From 922ed536fddbe3f187299c9da6171889af1d34b9 Mon Sep 17 00:00:00 2001
From: "Peter J. Keleher" <keleher@cs.umd.edu>
Date: Fri, 1 May 2020 19:40:41 -0400
Subject: [PATCH] auto

---
 assign5/openTok/.DS_Store                     |  Bin 6148 -> 0 bytes
 assign5/openTok/Podfile                       |   10 -
 assign5/openTok/Podfile.lock                  |   74 -
 .../Pods/Firebase/CoreOnly/Sources/Firebase.h |  172 -
 .../CoreOnly/Sources/module.modulemap         |    4 -
 assign5/openTok/Pods/Firebase/LICENSE         |  202 -
 assign5/openTok/Pods/Firebase/README.md       |  282 -
 .../Interop/Auth/Public/FIRAuthInterop.h      |   44 -
 .../openTok/Pods/FirebaseAuthInterop/LICENSE  |  202 -
 .../Pods/FirebaseAuthInterop/README.md        |  266 -
 .../Sources/FIRAnalyticsConfiguration.m       |   62 -
 .../FirebaseCore/Sources/FIRApp.m             |  938 ----
 .../Sources/FIRAppAssociationRegistration.m   |   47 -
 .../FirebaseCore/Sources/FIRBundleUtil.h      |   53 -
 .../FirebaseCore/Sources/FIRBundleUtil.m      |   75 -
 .../FirebaseCore/Sources/FIRComponent.m       |   65 -
 .../Sources/FIRComponentContainer.m           |  214 -
 .../FirebaseCore/Sources/FIRComponentType.m   |   28 -
 .../FirebaseCore/Sources/FIRConfiguration.m   |   46 -
 .../Sources/FIRCoreDiagnosticsConnector.m     |   61 -
 .../FirebaseCore/Sources/FIRDependency.m      |   44 -
 .../FirebaseCore/Sources/FIRDiagnosticsData.m |   66 -
 .../FirebaseCore/Sources/FIRErrors.m          |   21 -
 .../FirebaseCore/Sources/FIRHeartbeatInfo.m   |   61 -
 .../FirebaseCore/Sources/FIRLogger.m          |  179 -
 .../FirebaseCore/Sources/FIROptions.m         |  490 --
 .../FirebaseCore/Sources/FIRVersion.h         |   23 -
 .../FirebaseCore/Sources/FIRVersion.m         |   33 -
 .../Private/FIRAnalyticsConfiguration.h       |   56 -
 .../Private/FIRAppAssociationRegistration.h   |   49 -
 .../Sources/Private/FIRAppInternal.h          |  162 -
 .../Sources/Private/FIRComponent.h            |   91 -
 .../Sources/Private/FIRComponentContainer.h   |   44 -
 .../Private/FIRComponentContainerInternal.h   |   49 -
 .../Sources/Private/FIRComponentType.h        |   34 -
 .../Private/FIRConfigurationInternal.h        |   29 -
 .../Private/FIRCoreDiagnosticsConnector.h     |   35 -
 .../Sources/Private/FIRDependency.h           |   45 -
 .../Sources/Private/FIRDiagnosticsData.h      |   35 -
 .../Sources/Private/FIRErrorCode.h            |   38 -
 .../FirebaseCore/Sources/Private/FIRErrors.h  |   24 -
 .../Sources/Private/FIRHeartbeatInfo.h        |   39 -
 .../FirebaseCore/Sources/Private/FIRLibrary.h |   45 -
 .../FirebaseCore/Sources/Private/FIRLogger.h  |  151 -
 .../Sources/Private/FIROptionsInternal.h      |  114 -
 .../FirebaseCore/Sources/Public/FIRApp.h      |  127 -
 .../Sources/Public/FIRConfiguration.h         |   45 -
 .../Sources/Public/FIRLoggerLevel.h           |   38 -
 .../FirebaseCore/Sources/Public/FIROptions.h  |  123 -
 .../Sources/Public/FirebaseCore.h             |   20 -
 assign5/openTok/Pods/FirebaseCore/LICENSE     |  202 -
 assign5/openTok/Pods/FirebaseCore/README.md   |  282 -
 .../FIRCDLibrary/FIRCoreDiagnostics.m         |  647 ---
 .../Protogen/nanopb/firebasecore.nanopb.c     |   60 -
 .../Protogen/nanopb/firebasecore.nanopb.h     |  193 -
 .../Pods/FirebaseCoreDiagnostics/LICENSE      |  202 -
 .../Pods/FirebaseCoreDiagnostics/README.md    |  282 -
 .../Public/FIRCoreDiagnosticsData.h           |   61 -
 .../Public/FIRCoreDiagnosticsInterop.h        |   34 -
 .../FirebaseCoreDiagnosticsInterop/LICENSE    |  202 -
 .../FirebaseCoreDiagnosticsInterop/README.md  |  251 -
 .../Firebase/Database/Api/FIRDataSnapshot.m   |  105 -
 .../Firebase/Database/Api/FIRDatabase.m       |  234 -
 .../Database/Api/FIRDatabaseComponent.h       |   46 -
 .../Database/Api/FIRDatabaseComponent.m       |  173 -
 .../Firebase/Database/Api/FIRDatabaseConfig.h |   70 -
 .../Firebase/Database/Api/FIRDatabaseConfig.m |   92 -
 .../Firebase/Database/Api/FIRDatabaseQuery.m  |  677 ---
 .../Firebase/Database/Api/FIRMutableData.m    |  149 -
 .../Firebase/Database/Api/FIRServerValue.m    |   33 -
 .../Database/Api/FIRTransactionResult.m       |   39 -
 .../Api/Private/FIRDataSnapshot_Private.h     |   28 -
 .../Api/Private/FIRDatabaseQuery_Private.h    |   43 -
 .../Private/FIRDatabaseReference_Private.h    |   27 -
 .../Api/Private/FIRDatabase_Private.h         |   37 -
 .../Api/Private/FIRMutableData_Private.h      |   26 -
 .../Private/FIRTransactionResult_Private.h    |   25 -
 .../Database/Api/Private/FTypedefs_Private.h  |   60 -
 .../Firebase/Database/Constants/FConstants.h  |  195 -
 .../Firebase/Database/Constants/FConstants.m  |  185 -
 .../Firebase/Database/Core/FCompoundHash.h    |   38 -
 .../Firebase/Database/Core/FCompoundHash.m    |  259 -
 .../Firebase/Database/Core/FListenProvider.h  |   32 -
 .../Firebase/Database/Core/FListenProvider.m  |   25 -
 .../Database/Core/FPersistentConnection.h     |   99 -
 .../Database/Core/FPersistentConnection.m     | 1141 ----
 .../Firebase/Database/Core/FQueryParams.h     |   60 -
 .../Firebase/Database/Core/FQueryParams.m     |  393 --
 .../Firebase/Database/Core/FQuerySpec.h       |   36 -
 .../Firebase/Database/Core/FQuerySpec.m       |   86 -
 .../Firebase/Database/Core/FRangeMerge.h      |   39 -
 .../Firebase/Database/Core/FRangeMerge.m      |  134 -
 .../Firebase/Database/Core/FRepo.h            |   93 -
 .../Firebase/Database/Core/FRepo.m            | 1467 ------
 .../Firebase/Database/Core/FRepoInfo.h        |   40 -
 .../Firebase/Database/Core/FRepoInfo.m        |  144 -
 .../Firebase/Database/Core/FRepoManager.h     |   34 -
 .../Firebase/Database/Core/FRepoManager.m     |  148 -
 .../Firebase/Database/Core/FRepo_Private.h    |   42 -
 .../Firebase/Database/Core/FServerValues.h    |   40 -
 .../Firebase/Database/Core/FServerValues.m    |  269 -
 .../Firebase/Database/Core/FSnapshotHolder.h  |   27 -
 .../Firebase/Database/Core/FSnapshotHolder.m  |   46 -
 .../Database/Core/FSparseSnapshotTree.h       |   34 -
 .../Database/Core/FSparseSnapshotTree.m       |  144 -
 .../Firebase/Database/Core/FSyncPoint.h       |   69 -
 .../Firebase/Database/Core/FSyncPoint.m       |  302 --
 .../Firebase/Database/Core/FSyncTree.h        |   82 -
 .../Firebase/Database/Core/FSyncTree.m        | 1042 ----
 .../Firebase/Database/Core/FWriteRecord.h     |   45 -
 .../Firebase/Database/Core/FWriteRecord.m     |  139 -
 .../Firebase/Database/Core/FWriteTree.h       |   70 -
 .../Firebase/Database/Core/FWriteTree.m       |  577 ---
 .../Firebase/Database/Core/FWriteTreeRef.h    |   57 -
 .../Firebase/Database/Core/FWriteTreeRef.m    |  159 -
 .../Database/Core/Operation/FAckUserWrite.h   |   37 -
 .../Database/Core/Operation/FAckUserWrite.m   |   66 -
 .../Firebase/Database/Core/Operation/FMerge.h |   32 -
 .../Firebase/Database/Core/Operation/FMerge.m |   85 -
 .../Database/Core/Operation/FOperation.h      |   34 -
 .../Core/Operation/FOperationSource.h         |   37 -
 .../Core/Operation/FOperationSource.m         |   86 -
 .../Database/Core/Operation/FOverwrite.h      |   32 -
 .../Database/Core/Operation/FOverwrite.m      |   67 -
 .../Database/Core/Utilities/FIRRetryHelper.h  |   33 -
 .../Database/Core/Utilities/FIRRetryHelper.m  |  140 -
 .../Database/Core/Utilities/FImmutableTree.h  |   59 -
 .../Database/Core/Utilities/FImmutableTree.m  |  486 --
 .../Firebase/Database/Core/Utilities/FPath.h  |   46 -
 .../Firebase/Database/Core/Utilities/FPath.m  |  304 --
 .../Firebase/Database/Core/Utilities/FTree.h  |   52 -
 .../Firebase/Database/Core/Utilities/FTree.m  |  193 -
 .../Database/Core/Utilities/FTreeNode.h       |   25 -
 .../Database/Core/Utilities/FTreeNode.m       |   35 -
 .../Firebase/Database/Core/View/FCacheNode.h  |   46 -
 .../Firebase/Database/Core/View/FCacheNode.m  |   60 -
 .../Database/Core/View/FCancelEvent.h         |   31 -
 .../Database/Core/View/FCancelEvent.m         |   57 -
 .../Firebase/Database/Core/View/FChange.h     |   41 -
 .../Firebase/Database/Core/View/FChange.m     |   72 -
 .../Core/View/FChildEventRegistration.h       |   37 -
 .../Core/View/FChildEventRegistration.m       |  112 -
 .../Firebase/Database/Core/View/FDataEvent.h  |   41 -
 .../Firebase/Database/Core/View/FDataEvent.m  |   83 -
 .../Firebase/Database/Core/View/FEvent.h      |   27 -
 .../Database/Core/View/FEventRaiser.h         |   36 -
 .../Database/Core/View/FEventRaiser.m         |   74 -
 .../Database/Core/View/FEventRegistration.h   |   38 -
 .../Core/View/FKeepSyncedEventRegistration.h  |   28 -
 .../Core/View/FKeepSyncedEventRegistration.m  |   70 -
 .../Core/View/FValueEventRegistration.h       |   34 -
 .../Core/View/FValueEventRegistration.m       |  102 -
 .../Firebase/Database/Core/View/FView.h       |   56 -
 .../Firebase/Database/Core/View/FView.m       |  266 -
 .../Firebase/Database/Core/View/FViewCache.h  |   40 -
 .../Firebase/Database/Core/View/FViewCache.m  |   72 -
 .../View/Filter/FChildChangeAccumulator.h     |   27 -
 .../View/Filter/FChildChangeAccumulator.m     |   99 -
 .../Core/View/Filter/FCompleteChildSource.h   |   30 -
 .../Core/View/Filter/FIndexedFilter.h         |   26 -
 .../Core/View/Filter/FIndexedFilter.m         |  164 -
 .../Core/View/Filter/FLimitedFilter.h         |   25 -
 .../Core/View/Filter/FLimitedFilter.m         |  285 -
 .../Database/Core/View/Filter/FNodeFilter.h   |   77 -
 .../Firebase/Database/FClock.h                |   35 -
 .../Firebase/Database/FClock.m                |   58 -
 .../Firebase/Database/FEventGenerator.h       |   28 -
 .../Firebase/Database/FEventGenerator.m       |  169 -
 .../Database/FIRDatabaseConfig_Private.h      |   31 -
 .../Firebase/Database/FIRDatabaseReference.m  |  528 --
 .../Firebase/Database/FIndex.h                |   51 -
 .../Firebase/Database/FIndex.m                |   39 -
 .../Firebase/Database/FKeyIndex.h             |   22 -
 .../Firebase/Database/FKeyIndex.m             |  123 -
 .../Firebase/Database/FListenComplete.h       |   28 -
 .../Firebase/Database/FListenComplete.m       |   55 -
 .../Firebase/Database/FMaxNode.h              |   22 -
 .../Firebase/Database/FMaxNode.m              |   58 -
 .../Firebase/Database/FNamedNode.h            |   31 -
 .../Firebase/Database/FNamedNode.m            |  102 -
 .../Firebase/Database/FPathIndex.h            |   23 -
 .../Firebase/Database/FPathIndex.m            |  135 -
 .../Firebase/Database/FPriorityIndex.h        |   23 -
 .../Firebase/Database/FPriorityIndex.m        |  126 -
 .../Firebase/Database/FRangedFilter.h         |   31 -
 .../Firebase/Database/FRangedFilter.m         |  129 -
 .../Database/FTransformedEnumerator.h         |   24 -
 .../Database/FTransformedEnumerator.m         |   44 -
 .../Firebase/Database/FValueIndex.h           |   22 -
 .../Firebase/Database/FValueIndex.m           |  112 -
 .../Firebase/Database/FViewProcessor.h        |   42 -
 .../Firebase/Database/FViewProcessor.m        |  831 ---
 .../Firebase/Database/FViewProcessorResult.h  |   29 -
 .../Firebase/Database/FViewProcessorResult.m  |   35 -
 .../Database/Login/FAuthTokenProvider.h       |   39 -
 .../Database/Login/FAuthTokenProvider.m       |  123 -
 .../Database/Login/FIRNoopAuthTokenProvider.h |   22 -
 .../Database/Login/FIRNoopAuthTokenProvider.m |   34 -
 .../Database/Persistence/FCachePolicy.h       |   41 -
 .../Database/Persistence/FCachePolicy.m       |   82 -
 .../Persistence/FLevelDBStorageEngine.h       |   39 -
 .../Persistence/FLevelDBStorageEngine.m       |  990 ----
 .../Database/Persistence/FPendingPut.h        |   53 -
 .../Database/Persistence/FPendingPut.m        |  113 -
 .../Persistence/FPersistenceManager.h         |   60 -
 .../Persistence/FPersistenceManager.m         |  231 -
 .../Database/Persistence/FPruneForest.h       |   38 -
 .../Database/Persistence/FPruneForest.m       |  194 -
 .../Database/Persistence/FStorageEngine.h     |   60 -
 .../Database/Persistence/FTrackedQuery.h      |   43 -
 .../Database/Persistence/FTrackedQuery.m      |  113 -
 .../Persistence/FTrackedQueryManager.h        |   52 -
 .../Persistence/FTrackedQueryManager.m        |  375 --
 .../Database/Public/FIRDataEventType.h        |   39 -
 .../Database/Public/FIRDataSnapshot.h         |  142 -
 .../Firebase/Database/Public/FIRDatabase.h    |  182 -
 .../Database/Public/FIRDatabaseQuery.h        |  395 --
 .../Database/Public/FIRDatabaseReference.h    |  861 ---
 .../Firebase/Database/Public/FIRMutableData.h |  128 -
 .../Firebase/Database/Public/FIRServerValue.h |   53 -
 .../Database/Public/FIRTransactionResult.h    |   50 -
 .../Database/Public/FirebaseDatabase.h        |   29 -
 .../Firebase/Database/Realtime/FConnection.h  |   59 -
 .../Firebase/Database/Realtime/FConnection.m  |  234 -
 .../Database/Realtime/FWebSocketConnection.h  |   53 -
 .../Database/Realtime/FWebSocketConnection.m  |  346 --
 .../Database/Snapshot/FChildrenNode.h         |   42 -
 .../Database/Snapshot/FChildrenNode.m         |  418 --
 .../Database/Snapshot/FCompoundWrite.h        |   64 -
 .../Database/Snapshot/FCompoundWrite.m        |  304 --
 .../Firebase/Database/Snapshot/FEmptyNode.h   |   24 -
 .../Firebase/Database/Snapshot/FEmptyNode.m   |   30 -
 .../Firebase/Database/Snapshot/FIndexedNode.h |   55 -
 .../Firebase/Database/Snapshot/FIndexedNode.m |  218 -
 .../Firebase/Database/Snapshot/FLeafNode.h    |   27 -
 .../Firebase/Database/Snapshot/FLeafNode.m    |  266 -
 .../Firebase/Database/Snapshot/FNode.h        |   50 -
 .../Database/Snapshot/FSnapshotUtilities.h    |   49 -
 .../Database/Snapshot/FSnapshotUtilities.m    |  394 --
 .../Database/Utilities/FAtomicNumber.h        |   23 -
 .../Database/Utilities/FAtomicNumber.m        |   55 -
 .../Database/Utilities/FEventEmitter.h        |   36 -
 .../Database/Utilities/FEventEmitter.m        |  161 -
 .../Firebase/Database/Utilities/FNextPushId.h |   23 -
 .../Firebase/Database/Utilities/FNextPushId.m |   62 -
 .../Firebase/Database/Utilities/FParsedUrl.h  |   25 -
 .../Firebase/Database/Utilities/FParsedUrl.m  |   24 -
 .../Database/Utilities/FStringUtilities.h     |   26 -
 .../Database/Utilities/FStringUtilities.m     |   72 -
 .../Firebase/Database/Utilities/FTypedefs.h   |   46 -
 .../Firebase/Database/Utilities/FUtilities.h  |   82 -
 .../Firebase/Database/Utilities/FUtilities.m  |  433 --
 .../Firebase/Database/Utilities/FValidation.h |   55 -
 .../Firebase/Database/Utilities/FValidation.m |  461 --
 .../Utilities/Tuples/FTupleBoolBlock.h        |   25 -
 .../Utilities/Tuples/FTupleBoolBlock.m        |   24 -
 .../Utilities/Tuples/FTupleCallbackStatus.h   |   24 -
 .../Utilities/Tuples/FTupleCallbackStatus.m   |   22 -
 .../Utilities/Tuples/FTupleFirebase.h         |   26 -
 .../Utilities/Tuples/FTupleFirebase.m         |   25 -
 .../Utilities/Tuples/FTupleNodePath.h         |   28 -
 .../Utilities/Tuples/FTupleNodePath.m         |   33 -
 .../Utilities/Tuples/FTupleObjectNode.h       |   27 -
 .../Utilities/Tuples/FTupleObjectNode.m       |   32 -
 .../Database/Utilities/Tuples/FTupleObjects.h |   24 -
 .../Database/Utilities/Tuples/FTupleObjects.m |   24 -
 .../Utilities/Tuples/FTupleOnDisconnect.h     |   27 -
 .../Utilities/Tuples/FTupleOnDisconnect.m     |   26 -
 .../Utilities/Tuples/FTuplePathValue.h        |   25 -
 .../Utilities/Tuples/FTuplePathValue.m        |   38 -
 .../Tuples/FTupleRemovedQueriesEvents.h       |   30 -
 .../Tuples/FTupleRemovedQueriesEvents.m       |   37 -
 .../Utilities/Tuples/FTupleSetIdPath.h        |   27 -
 .../Utilities/Tuples/FTupleSetIdPath.m        |   33 -
 .../Utilities/Tuples/FTupleStringNode.h       |   27 -
 .../Utilities/Tuples/FTupleStringNode.m       |   33 -
 .../Database/Utilities/Tuples/FTupleTSN.h     |   25 -
 .../Database/Utilities/Tuples/FTupleTSN.m     |   24 -
 .../Utilities/Tuples/FTupleTransaction.h      |   75 -
 .../Utilities/Tuples/FTupleTransaction.m      |   41 -
 .../Utilities/Tuples/FTupleUserCallback.h     |   32 -
 .../Utilities/Tuples/FTupleUserCallback.m     |   35 -
 .../FArraySortedDictionary.h                  |   21 -
 .../FArraySortedDictionary.m                  |  266 -
 .../FImmutableSortedDictionary.h              |   54 -
 .../FImmutableSortedDictionary.m              |  142 -
 .../FImmutableSortedSet.h                     |   22 -
 .../FImmutableSortedSet.m                     |  115 -
 .../FLLRBEmptyNode.h                          |   27 -
 .../FLLRBEmptyNode.m                          |   72 -
 .../FImmutableSortedDictionary/FLLRBNode.h    |   29 -
 .../FLLRBValueNode.h                          |   29 -
 .../FLLRBValueNode.m                          |  230 -
 .../FTreeSortedDictionary.h                   |   30 -
 .../FTreeSortedDictionary.m                   |  326 --
 .../FTreeSortedDictionaryEnumerator.h         |    9 -
 .../FTreeSortedDictionaryEnumerator.m         |   83 -
 .../third_party/SocketRocket/FSRWebSocket.h   |  107 -
 .../third_party/SocketRocket/FSRWebSocket.m   | 1858 -------
 .../SocketRocket/NSData+SRB64Additions.h      |   23 -
 .../SocketRocket/NSData+SRB64Additions.m      |   37 -
 .../third_party/SocketRocket/fbase64.c        |  318 --
 .../third_party/SocketRocket/fbase64.h        |   33 -
 .../third_party/Wrap-leveldb/APLevelDB.h      |  105 -
 .../third_party/Wrap-leveldb/APLevelDB.mm     |  500 --
 assign5/openTok/Pods/FirebaseDatabase/LICENSE |  202 -
 .../openTok/Pods/FirebaseDatabase/README.md   |  282 -
 .../GDTCORLibrary/GDTCORAssert.m              |   36 -
 .../GDTCORLibrary/GDTCORClock.m               |  164 -
 .../GDTCORLibrary/GDTCORConsoleLogger.m       |   55 -
 .../GDTCORLibrary/GDTCORDataFuture.m          |   59 -
 .../GDTCORLibrary/GDTCOREvent.m               |  257 -
 .../GDTCORLibrary/GDTCORFlatFileStorage.m     |  342 --
 .../GDTCORLibrary/GDTCORLifecycle.m           |  119 -
 .../GDTCORLibrary/GDTCORPlatform.m            |  407 --
 .../GDTCORLibrary/GDTCORReachability.m        |  119 -
 .../GDTCORLibrary/GDTCORRegistrar.m           |  187 -
 .../GDTCORLibrary/GDTCORTransformer.m         |  104 -
 .../GDTCORLibrary/GDTCORTransport.m           |   92 -
 .../GDTCORLibrary/GDTCORUploadCoordinator.m   |  285 -
 .../GDTCORLibrary/GDTCORUploadPackage.m       |  193 -
 .../GDTCORLibrary/Private/GDTCORDataFuture.h  |   36 -
 .../Private/GDTCOREvent_Private.h             |   48 -
 .../Private/GDTCORFlatFileStorage.h           |   59 -
 .../Private/GDTCORReachability_Private.h      |   32 -
 .../Private/GDTCORRegistrar_Private.h         |   39 -
 .../GDTCORLibrary/Private/GDTCORTransformer.h |   56 -
 .../Private/GDTCORTransformer_Private.h       |   28 -
 .../Private/GDTCORTransport_Private.h         |   39 -
 .../Private/GDTCORUploadCoordinator.h         |   75 -
 .../Private/GDTCORUploadPackage_Private.h     |   30 -
 .../GDTCORLibrary/Public/GDTCORAssert.h       |   95 -
 .../GDTCORLibrary/Public/GDTCORClock.h        |   57 -
 .../Public/GDTCORConsoleLogger.h              |  143 -
 .../GDTCORLibrary/Public/GDTCOREvent.h        |   89 -
 .../Public/GDTCOREventDataObject.h            |   36 -
 .../Public/GDTCOREventTransformer.h           |   38 -
 .../GDTCORLibrary/Public/GDTCORLifecycle.h    |   63 -
 .../GDTCORLibrary/Public/GDTCORPlatform.h     |  168 -
 .../GDTCORLibrary/Public/GDTCORPrioritizer.h  |   79 -
 .../GDTCORLibrary/Public/GDTCORReachability.h |   34 -
 .../GDTCORLibrary/Public/GDTCORRegistrar.h    |   58 -
 .../Public/GDTCORStorageProtocol.h            |   41 -
 .../GDTCORLibrary/Public/GDTCORTargets.h      |   37 -
 .../GDTCORLibrary/Public/GDTCORTransport.h    |   91 -
 .../Public/GDTCORUploadPackage.h              |   76 -
 .../GDTCORLibrary/Public/GDTCORUploader.h     |   48 -
 .../Public/GoogleDataTransport.h              |   28 -
 .../openTok/Pods/GoogleDataTransport/LICENSE  |  202 -
 .../Pods/GoogleDataTransport/README.md        |  282 -
 .../GDTCCTLibrary/GDTCCTCompressionHelper.m   |   95 -
 .../GDTCCTLibrary/GDTCCTNanopbHelpers.m       |  270 -
 .../GDTCCTLibrary/GDTCCTPrioritizer.m         |  426 --
 .../GDTCCTLibrary/GDTCCTUploader.m            |  441 --
 .../GDTCOREvent+NetworkConnectionInfo.m       |  102 -
 .../Private/GDTCCTCompressionHelper.h         |   40 -
 .../Private/GDTCCTNanopbHelpers.h             |  128 -
 .../GDTCCTLibrary/Private/GDTCCTPrioritizer.h |   53 -
 .../GDTCCTLibrary/Private/GDTCCTUploader.h    |   63 -
 .../GDTCOREvent+NetworkConnectionInfo.h       |   47 -
 .../Protogen/nanopb/cct.nanopb.c              |  128 -
 .../Protogen/nanopb/cct.nanopb.h              |  281 -
 .../GoogleDataTransportCCTSupport/LICENSE     |  202 -
 .../GoogleDataTransportCCTSupport/README.md   |  282 -
 .../Environment/GULHeartbeatDateStorage.m     |  140 -
 .../Environment/GULSecureCoding.m             |  103 -
 .../Public/GULHeartbeatDateStorage.h          |   49 -
 .../Environment/Public/GULKeychainStorage.h   |   79 -
 .../Environment/Public/GULKeychainUtils.h     |   61 -
 .../Environment/Public/GULSecureCoding.h      |   36 -
 .../SecureStorage/GULKeychainStorage.m        |  192 -
 .../SecureStorage/GULKeychainUtils.m          |  113 -
 .../third_party/GULAppEnvironmentUtil.h       |   46 -
 .../third_party/GULAppEnvironmentUtil.m       |  267 -
 .../GoogleUtilities/GoogleUtilities/LICENSE   |  247 -
 .../GoogleUtilities/Logger/GULLogger.m        |  214 -
 .../Logger/Private/GULLogger.h                |  159 -
 .../Logger/Public/GULLoggerLevel.h            |   37 -
 .../openTok/Pods/GoogleUtilities/README.md    |  282 -
 .../Pods/Headers/Private/Firebase/Firebase.h  |  172 -
 .../FirebaseAuthInterop/FIRAuthInterop.h      |   44 -
 .../FIRCoreDiagnosticsData.h                  |   61 -
 .../FIRCoreDiagnosticsInterop.h               |   34 -
 .../Pods/Headers/Public/Firebase/Firebase.h   |  172 -
 .../FirebaseAuthInterop/FIRAuthInterop.h      |   44 -
 .../FIRCoreDiagnosticsData.h                  |   61 -
 .../FIRCoreDiagnosticsInterop.h               |   34 -
 assign5/openTok/Pods/Manifest.lock            |   74 -
 .../Pods/Pods.xcodeproj/project.pbxproj       | 4612 -----------------
 .../xcschemes/Firebase.xcscheme               |   60 -
 .../xcschemes/FirebaseAuthInterop.xcscheme    |   60 -
 .../xcschemes/FirebaseCore.xcscheme           |   60 -
 .../FirebaseCoreDiagnostics.xcscheme          |   60 -
 .../FirebaseCoreDiagnosticsInterop.xcscheme   |   60 -
 .../xcschemes/FirebaseDatabase.xcscheme       |   60 -
 .../xcschemes/GoogleDataTransport.xcscheme    |   60 -
 .../GoogleDataTransportCCTSupport.xcscheme    |   60 -
 .../xcschemes/GoogleUtilities.xcscheme        |   60 -
 .../xcschemes/Pods-openTok.xcscheme           |   58 -
 .../xcschemes/PromisesObjC.xcscheme           |   58 -
 .../xcschemes/leveldb-library.xcscheme        |   58 -
 .../xcschemes/nanopb.xcscheme                 |   60 -
 .../xcschemes/xcschememanagement.plist        |  102 -
 assign5/openTok/Pods/PromisesObjC/LICENSE     |  202 -
 assign5/openTok/Pods/PromisesObjC/README.md   |   60 -
 .../Sources/FBLPromises/FBLPromise+All.m      |   86 -
 .../Sources/FBLPromises/FBLPromise+Always.m   |   58 -
 .../Sources/FBLPromises/FBLPromise+Any.m      |  112 -
 .../Sources/FBLPromises/FBLPromise+Async.m    |   70 -
 .../Sources/FBLPromises/FBLPromise+Await.m    |   48 -
 .../Sources/FBLPromises/FBLPromise+Catch.m    |   55 -
 .../Sources/FBLPromises/FBLPromise+Delay.m    |   59 -
 .../Sources/FBLPromises/FBLPromise+Do.m       |   59 -
 .../Sources/FBLPromises/FBLPromise+Race.m     |   65 -
 .../Sources/FBLPromises/FBLPromise+Recover.m  |   54 -
 .../Sources/FBLPromises/FBLPromise+Reduce.m   |   61 -
 .../Sources/FBLPromises/FBLPromise+Retry.m    |  128 -
 .../Sources/FBLPromises/FBLPromise+Testing.m  |   56 -
 .../Sources/FBLPromises/FBLPromise+Then.m     |   50 -
 .../Sources/FBLPromises/FBLPromise+Timeout.m  |   64 -
 .../Sources/FBLPromises/FBLPromise+Validate.m |   56 -
 .../Sources/FBLPromises/FBLPromise+Wrap.m     |  420 --
 .../Sources/FBLPromises/FBLPromise.m          |  297 --
 .../Sources/FBLPromises/FBLPromiseError.m     |   19 -
 .../FBLPromises/include/FBLPromise+All.h      |   63 -
 .../FBLPromises/include/FBLPromise+Always.h   |   54 -
 .../FBLPromises/include/FBLPromise+Any.h      |   69 -
 .../FBLPromises/include/FBLPromise+Async.h    |   60 -
 .../FBLPromises/include/FBLPromise+Await.h    |   32 -
 .../FBLPromises/include/FBLPromise+Catch.h    |   59 -
 .../FBLPromises/include/FBLPromise+Delay.h    |   59 -
 .../FBLPromises/include/FBLPromise+Do.h       |   55 -
 .../FBLPromises/include/FBLPromise+Race.h     |   62 -
 .../FBLPromises/include/FBLPromise+Recover.h  |   60 -
 .../FBLPromises/include/FBLPromise+Reduce.h   |   71 -
 .../FBLPromises/include/FBLPromise+Retry.h    |  165 -
 .../FBLPromises/include/FBLPromise+Testing.h  |   63 -
 .../FBLPromises/include/FBLPromise+Then.h     |   63 -
 .../FBLPromises/include/FBLPromise+Timeout.h  |   57 -
 .../FBLPromises/include/FBLPromise+Validate.h |   60 -
 .../FBLPromises/include/FBLPromise+Wrap.h     |  316 --
 .../Sources/FBLPromises/include/FBLPromise.h  |   82 -
 .../FBLPromises/include/FBLPromiseError.h     |   43 -
 .../FBLPromises/include/FBLPromisePrivate.h   |   66 -
 .../Sources/FBLPromises/include/FBLPromises.h |   32 -
 .../Firebase/Firebase.debug.xcconfig          |   11 -
 .../Firebase/Firebase.release.xcconfig        |   11 -
 .../FirebaseAuthInterop.debug.xcconfig        |   10 -
 .../FirebaseAuthInterop.release.xcconfig      |   10 -
 .../FirebaseCore/FirebaseCore-Info.plist      |   26 -
 .../FirebaseCore/FirebaseCore-dummy.m         |    5 -
 .../FirebaseCore/FirebaseCore-umbrella.h      |   21 -
 .../FirebaseCore/FirebaseCore.debug.xcconfig  |   13 -
 .../FirebaseCore/FirebaseCore.modulemap       |    6 -
 .../FirebaseCore.release.xcconfig             |   13 -
 .../FirebaseCoreDiagnostics-Info.plist        |   26 -
 .../FirebaseCoreDiagnostics-dummy.m           |    5 -
 .../FirebaseCoreDiagnostics-umbrella.h        |   17 -
 .../FirebaseCoreDiagnostics.debug.xcconfig    |   14 -
 .../FirebaseCoreDiagnostics.modulemap         |    6 -
 .../FirebaseCoreDiagnostics.release.xcconfig  |   14 -
 ...ebaseCoreDiagnosticsInterop.debug.xcconfig |   10 -
 ...aseCoreDiagnosticsInterop.release.xcconfig |   10 -
 .../FirebaseDatabase-Info.plist               |   26 -
 .../FirebaseDatabase/FirebaseDatabase-dummy.m |    5 -
 .../FirebaseDatabase-umbrella.h               |   25 -
 .../FirebaseDatabase.debug.xcconfig           |   12 -
 .../FirebaseDatabase.modulemap                |    6 -
 .../FirebaseDatabase.release.xcconfig         |   12 -
 .../GoogleDataTransport-Info.plist            |   26 -
 .../GoogleDataTransport-dummy.m               |    5 -
 .../GoogleDataTransport-umbrella.h            |   33 -
 .../GoogleDataTransport.debug.xcconfig        |   13 -
 .../GoogleDataTransport.modulemap             |    6 -
 .../GoogleDataTransport.release.xcconfig      |   13 -
 .../GoogleDataTransportCCTSupport-Info.plist  |   26 -
 .../GoogleDataTransportCCTSupport-dummy.m     |    5 -
 .../GoogleDataTransportCCTSupport-umbrella.h  |   17 -
 ...ogleDataTransportCCTSupport.debug.xcconfig |   14 -
 .../GoogleDataTransportCCTSupport.modulemap   |    6 -
 ...leDataTransportCCTSupport.release.xcconfig |   14 -
 .../GoogleUtilities-Info.plist                |   26 -
 .../GoogleUtilities/GoogleUtilities-dummy.m   |    5 -
 .../GoogleUtilities-prefix.pch                |   12 -
 .../GoogleUtilities-umbrella.h                |   17 -
 .../GoogleUtilities.debug.xcconfig            |   12 -
 .../GoogleUtilities/GoogleUtilities.modulemap |    6 -
 .../GoogleUtilities.release.xcconfig          |   12 -
 .../Pods-openTok/Pods-openTok-Info.plist      |   26 -
 .../Pods-openTok-acknowledgements.markdown    | 2163 --------
 .../Pods-openTok-acknowledgements.plist       | 2261 --------
 .../Pods-openTok/Pods-openTok-dummy.m         |    5 -
 ...ok-frameworks-Debug-input-files.xcfilelist |    5 -
 ...k-frameworks-Debug-output-files.xcfilelist |    4 -
 ...-frameworks-Release-input-files.xcfilelist |    5 -
 ...frameworks-Release-output-files.xcfilelist |    4 -
 .../Pods-openTok/Pods-openTok-frameworks.sh   |  213 -
 .../Pods-openTok/Pods-openTok-umbrella.h      |   16 -
 .../Pods-openTok/Pods-openTok.debug.xcconfig  |   10 -
 .../Pods-openTok/Pods-openTok.modulemap       |    6 -
 .../Pods-openTok.release.xcconfig             |   10 -
 .../PromisesObjC/PromisesObjC-Info.plist      |   26 -
 .../PromisesObjC/PromisesObjC-dummy.m         |    5 -
 .../PromisesObjC/PromisesObjC-umbrella.h      |   36 -
 .../PromisesObjC/PromisesObjC.debug.xcconfig  |   10 -
 .../PromisesObjC/PromisesObjC.modulemap       |    6 -
 .../PromisesObjC.release.xcconfig             |   10 -
 .../leveldb-library-Info.plist                |   26 -
 .../leveldb-library/leveldb-library-dummy.m   |    5 -
 .../leveldb-library-prefix.pch                |   12 -
 .../leveldb-library-umbrella.h                |   31 -
 .../leveldb-library.debug.xcconfig            |   13 -
 .../leveldb-library/leveldb-library.modulemap |    6 -
 .../leveldb-library.release.xcconfig          |   13 -
 .../nanopb/nanopb-Info.plist                  |   26 -
 .../nanopb/nanopb-dummy.m                     |    5 -
 .../nanopb/nanopb-prefix.pch                  |   12 -
 .../nanopb/nanopb-umbrella.h                  |   26 -
 .../nanopb/nanopb.debug.xcconfig              |    9 -
 .../nanopb/nanopb.modulemap                   |    6 -
 .../nanopb/nanopb.release.xcconfig            |    9 -
 assign5/openTok/Pods/leveldb-library/LICENSE  |   27 -
 .../openTok/Pods/leveldb-library/README.md    |  225 -
 .../Pods/leveldb-library/db/builder.cc        |   79 -
 .../openTok/Pods/leveldb-library/db/builder.h |   30 -
 assign5/openTok/Pods/leveldb-library/db/c.cc  |  566 --
 .../Pods/leveldb-library/db/db_impl.cc        | 1550 ------
 .../openTok/Pods/leveldb-library/db/db_impl.h |  216 -
 .../Pods/leveldb-library/db/db_iter.cc        |  309 --
 .../openTok/Pods/leveldb-library/db/db_iter.h |   26 -
 .../Pods/leveldb-library/db/dbformat.cc       |  140 -
 .../Pods/leveldb-library/db/dbformat.h        |  218 -
 .../Pods/leveldb-library/db/dumpfile.cc       |  232 -
 .../Pods/leveldb-library/db/filename.cc       |  141 -
 .../Pods/leveldb-library/db/filename.h        |   84 -
 .../Pods/leveldb-library/db/log_format.h      |   35 -
 .../Pods/leveldb-library/db/log_reader.cc     |  274 -
 .../Pods/leveldb-library/db/log_reader.h      |  112 -
 .../Pods/leveldb-library/db/log_writer.cc     |  111 -
 .../Pods/leveldb-library/db/log_writer.h      |   54 -
 .../Pods/leveldb-library/db/memtable.cc       |  136 -
 .../Pods/leveldb-library/db/memtable.h        |   87 -
 .../openTok/Pods/leveldb-library/db/repair.cc |  450 --
 .../Pods/leveldb-library/db/skiplist.h        |  382 --
 .../Pods/leveldb-library/db/snapshot.h        |   95 -
 .../Pods/leveldb-library/db/table_cache.cc    |  120 -
 .../Pods/leveldb-library/db/table_cache.h     |   58 -
 .../Pods/leveldb-library/db/version_edit.cc   |  260 -
 .../Pods/leveldb-library/db/version_edit.h    |  106 -
 .../Pods/leveldb-library/db/version_set.cc    | 1585 ------
 .../Pods/leveldb-library/db/version_set.h     |  393 --
 .../Pods/leveldb-library/db/write_batch.cc    |  150 -
 .../leveldb-library/db/write_batch_internal.h |   45 -
 .../Pods/leveldb-library/include/leveldb/c.h  |  270 -
 .../leveldb-library/include/leveldb/cache.h   |  111 -
 .../include/leveldb/comparator.h              |   64 -
 .../Pods/leveldb-library/include/leveldb/db.h |  167 -
 .../include/leveldb/dumpfile.h                |   28 -
 .../leveldb-library/include/leveldb/env.h     |  387 --
 .../leveldb-library/include/leveldb/export.h  |   33 -
 .../include/leveldb/filter_policy.h           |   72 -
 .../include/leveldb/iterator.h                |  112 -
 .../leveldb-library/include/leveldb/options.h |  187 -
 .../leveldb-library/include/leveldb/slice.h   |  115 -
 .../leveldb-library/include/leveldb/status.h  |  122 -
 .../leveldb-library/include/leveldb/table.h   |   84 -
 .../include/leveldb/table_builder.h           |   93 -
 .../include/leveldb/write_batch.h             |   83 -
 .../openTok/Pods/leveldb-library/port/port.h  |   19 -
 .../Pods/leveldb-library/port/port_example.h  |  104 -
 .../Pods/leveldb-library/port/port_stdcxx.h   |  153 -
 .../leveldb-library/port/thread_annotations.h |  108 -
 .../Pods/leveldb-library/table/block.cc       |  266 -
 .../Pods/leveldb-library/table/block.h        |   44 -
 .../leveldb-library/table/block_builder.cc    |  108 -
 .../leveldb-library/table/block_builder.h     |   55 -
 .../leveldb-library/table/filter_block.cc     |  106 -
 .../Pods/leveldb-library/table/filter_block.h |   69 -
 .../Pods/leveldb-library/table/format.cc      |  141 -
 .../Pods/leveldb-library/table/format.h       |  100 -
 .../Pods/leveldb-library/table/iterator.cc    |   76 -
 .../leveldb-library/table/iterator_wrapper.h  |   92 -
 .../Pods/leveldb-library/table/merger.cc      |  191 -
 .../Pods/leveldb-library/table/merger.h       |   26 -
 .../Pods/leveldb-library/table/table.cc       |  273 -
 .../leveldb-library/table/table_builder.cc    |  265 -
 .../table/two_level_iterator.cc               |  171 -
 .../table/two_level_iterator.h                |   31 -
 .../Pods/leveldb-library/util/arena.cc        |   66 -
 .../openTok/Pods/leveldb-library/util/arena.h |   71 -
 .../Pods/leveldb-library/util/bloom.cc        |   92 -
 .../Pods/leveldb-library/util/cache.cc        |  400 --
 .../Pods/leveldb-library/util/coding.cc       |  192 -
 .../Pods/leveldb-library/util/coding.h        |  104 -
 .../Pods/leveldb-library/util/comparator.cc   |   73 -
 .../Pods/leveldb-library/util/crc32c.cc       |  380 --
 .../Pods/leveldb-library/util/crc32c.h        |   43 -
 .../openTok/Pods/leveldb-library/util/env.cc  |   92 -
 .../Pods/leveldb-library/util/env_posix.cc    |  876 ----
 .../util/env_posix_test_helper.h              |   28 -
 .../util/env_windows_test_helper.h            |   25 -
 .../leveldb-library/util/filter_policy.cc     |   11 -
 .../openTok/Pods/leveldb-library/util/hash.cc |   55 -
 .../openTok/Pods/leveldb-library/util/hash.h  |   19 -
 .../Pods/leveldb-library/util/histogram.cc    |  272 -
 .../Pods/leveldb-library/util/histogram.h     |   44 -
 .../Pods/leveldb-library/util/logging.cc      |   85 -
 .../Pods/leveldb-library/util/logging.h       |   45 -
 .../Pods/leveldb-library/util/mutexlock.h     |   39 -
 .../Pods/leveldb-library/util/no_destructor.h |   46 -
 .../Pods/leveldb-library/util/options.cc      |   14 -
 .../Pods/leveldb-library/util/posix_logger.h  |  130 -
 .../Pods/leveldb-library/util/random.h        |   63 -
 .../Pods/leveldb-library/util/status.cc       |   77 -
 .../Pods/leveldb-library/util/testharness.cc  |   81 -
 .../Pods/leveldb-library/util/testharness.h   |  141 -
 .../Pods/leveldb-library/util/testutil.h      |   66 -
 .../leveldb-library/util/windows_logger.h     |  124 -
 assign5/openTok/Pods/nanopb/LICENSE.txt       |   20 -
 assign5/openTok/Pods/nanopb/README.md         |   71 -
 assign5/openTok/Pods/nanopb/pb.h              |  593 ---
 assign5/openTok/Pods/nanopb/pb_common.c       |   97 -
 assign5/openTok/Pods/nanopb/pb_common.h       |   42 -
 assign5/openTok/Pods/nanopb/pb_decode.c       | 1508 ------
 assign5/openTok/Pods/nanopb/pb_decode.h       |  175 -
 assign5/openTok/Pods/nanopb/pb_encode.c       |  869 ----
 assign5/openTok/Pods/nanopb/pb_encode.h       |  170 -
 .../openTok/openTok.xcodeproj/project.pbxproj |  429 --
 .../contents.xcworkspacedata                  |    7 -
 .../xcshareddata/IDEWorkspaceChecks.plist     |    8 -
 .../UserInterfaceState.xcuserstate            |  Bin 9289 -> 0 bytes
 .../xcschemes/xcschememanagement.plist        |   14 -
 .../contents.xcworkspacedata                  |   10 -
 .../xcshareddata/IDEWorkspaceChecks.plist     |    8 -
 .../UserInterfaceState.xcuserstate            |  Bin 46383 -> 0 bytes
 .../xcdebugger/Breakpoints_v2.xcbkptlist      |    6 -
 assign5/openTok/openTok/AppDelegate.swift     |   41 -
 .../AppIcon.appiconset/Contents.json          |   98 -
 .../openTok/Assets.xcassets/Contents.json     |    6 -
 .../Base.lproj/LaunchScreen.storyboard        |   25 -
 .../openTok/Base.lproj/Main.storyboard        |  197 -
 .../openTok/openTok/GoogleService-Info.plist  |   36 -
 assign5/openTok/openTok/Info.plist            |   64 -
 assign5/openTok/openTok/MainController.swift  |   31 -
 .../openTok/openTok/PlayerController.swift    |  258 -
 .../openTok/RecordViewController.swift        |   36 -
 assign5/openTok/openTok/SceneDelegate.swift   |   53 -
 assign5/openTok/openTok/URLController.swift   |   58 -
 648 files changed, 84656 deletions(-)
 delete mode 100644 assign5/openTok/.DS_Store
 delete mode 100644 assign5/openTok/Podfile
 delete mode 100644 assign5/openTok/Podfile.lock
 delete mode 100755 assign5/openTok/Pods/Firebase/CoreOnly/Sources/Firebase.h
 delete mode 100755 assign5/openTok/Pods/Firebase/CoreOnly/Sources/module.modulemap
 delete mode 100644 assign5/openTok/Pods/Firebase/LICENSE
 delete mode 100644 assign5/openTok/Pods/Firebase/README.md
 delete mode 100644 assign5/openTok/Pods/FirebaseAuthInterop/Interop/Auth/Public/FIRAuthInterop.h
 delete mode 100644 assign5/openTok/Pods/FirebaseAuthInterop/LICENSE
 delete mode 100644 assign5/openTok/Pods/FirebaseAuthInterop/README.md
 delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRAnalyticsConfiguration.m
 delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRApp.m
 delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRAppAssociationRegistration.m
 delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRBundleUtil.h
 delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRBundleUtil.m
 delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRComponent.m
 delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRComponentContainer.m
 delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRComponentType.m
 delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRConfiguration.m
 delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRCoreDiagnosticsConnector.m
 delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRDependency.m
 delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRDiagnosticsData.m
 delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRErrors.m
 delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRHeartbeatInfo.m
 delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRLogger.m
 delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIROptions.m
 delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRVersion.h
 delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRVersion.m
 delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRAnalyticsConfiguration.h
 delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRAppAssociationRegistration.h
 delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRAppInternal.h
 delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponent.h
 delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponentContainer.h
 delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponentContainerInternal.h
 delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponentType.h
 delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRConfigurationInternal.h
 delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRCoreDiagnosticsConnector.h
 delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRDependency.h
 delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRDiagnosticsData.h
 delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRErrorCode.h
 delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRErrors.h
 delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRHeartbeatInfo.h
 delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRLibrary.h
 delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRLogger.h
 delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIROptionsInternal.h
 delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Public/FIRApp.h
 delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Public/FIRConfiguration.h
 delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Public/FIRLoggerLevel.h
 delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Public/FIROptions.h
 delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Public/FirebaseCore.h
 delete mode 100644 assign5/openTok/Pods/FirebaseCore/LICENSE
 delete mode 100644 assign5/openTok/Pods/FirebaseCore/README.md
 delete mode 100644 assign5/openTok/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/FIRCoreDiagnostics.m
 delete mode 100644 assign5/openTok/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.c
 delete mode 100644 assign5/openTok/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.h
 delete mode 100644 assign5/openTok/Pods/FirebaseCoreDiagnostics/LICENSE
 delete mode 100644 assign5/openTok/Pods/FirebaseCoreDiagnostics/README.md
 delete mode 100644 assign5/openTok/Pods/FirebaseCoreDiagnosticsInterop/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsData.h
 delete mode 100644 assign5/openTok/Pods/FirebaseCoreDiagnosticsInterop/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsInterop.h
 delete mode 100644 assign5/openTok/Pods/FirebaseCoreDiagnosticsInterop/LICENSE
 delete mode 100644 assign5/openTok/Pods/FirebaseCoreDiagnosticsInterop/README.md
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDataSnapshot.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabase.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabaseComponent.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabaseComponent.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabaseConfig.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabaseConfig.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabaseQuery.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRMutableData.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRServerValue.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRTransactionResult.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRDataSnapshot_Private.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRDatabaseQuery_Private.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRDatabaseReference_Private.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRDatabase_Private.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRMutableData_Private.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRTransactionResult_Private.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FTypedefs_Private.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Constants/FConstants.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Constants/FConstants.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FCompoundHash.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FCompoundHash.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FListenProvider.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FListenProvider.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FPersistentConnection.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FPersistentConnection.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FQueryParams.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FQueryParams.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FQuerySpec.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FQuerySpec.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRangeMerge.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRangeMerge.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepo.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepo.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepoInfo.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepoInfo.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepoManager.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepoManager.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepo_Private.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FServerValues.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FServerValues.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSnapshotHolder.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSnapshotHolder.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSparseSnapshotTree.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSparseSnapshotTree.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSyncPoint.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSyncPoint.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSyncTree.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSyncTree.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteRecord.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteRecord.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteTree.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteTree.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteTreeRef.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteTreeRef.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FAckUserWrite.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FAckUserWrite.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FMerge.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FMerge.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FOperation.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FOperationSource.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FOperationSource.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FOverwrite.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FOverwrite.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FIRRetryHelper.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FIRRetryHelper.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FImmutableTree.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FImmutableTree.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FPath.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FPath.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FTree.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FTree.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FTreeNode.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FTreeNode.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FCacheNode.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FCacheNode.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FCancelEvent.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FCancelEvent.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FChange.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FChange.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FChildEventRegistration.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FChildEventRegistration.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FDataEvent.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FDataEvent.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FEvent.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FEventRaiser.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FEventRaiser.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FEventRegistration.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FKeepSyncedEventRegistration.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FKeepSyncedEventRegistration.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FValueEventRegistration.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FValueEventRegistration.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FView.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FView.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FViewCache.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FViewCache.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FChildChangeAccumulator.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FChildChangeAccumulator.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FCompleteChildSource.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FIndexedFilter.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FIndexedFilter.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FLimitedFilter.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FLimitedFilter.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FNodeFilter.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FClock.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FClock.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FEventGenerator.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FEventGenerator.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FIRDatabaseConfig_Private.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FIRDatabaseReference.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FIndex.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FIndex.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FKeyIndex.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FKeyIndex.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FListenComplete.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FListenComplete.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FMaxNode.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FMaxNode.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FNamedNode.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FNamedNode.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FPathIndex.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FPathIndex.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FPriorityIndex.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FPriorityIndex.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FRangedFilter.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FRangedFilter.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FTransformedEnumerator.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FTransformedEnumerator.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FValueIndex.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FValueIndex.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FViewProcessor.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FViewProcessor.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FViewProcessorResult.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FViewProcessorResult.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Login/FAuthTokenProvider.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Login/FAuthTokenProvider.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Login/FIRNoopAuthTokenProvider.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Login/FIRNoopAuthTokenProvider.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FCachePolicy.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FCachePolicy.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FLevelDBStorageEngine.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FLevelDBStorageEngine.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPendingPut.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPendingPut.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPersistenceManager.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPersistenceManager.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPruneForest.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPruneForest.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FStorageEngine.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FTrackedQuery.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FTrackedQuery.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FTrackedQueryManager.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FTrackedQueryManager.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRDataEventType.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRDataSnapshot.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRDatabase.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRDatabaseQuery.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRDatabaseReference.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRMutableData.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRServerValue.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRTransactionResult.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FirebaseDatabase.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Realtime/FConnection.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Realtime/FConnection.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Realtime/FWebSocketConnection.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Realtime/FWebSocketConnection.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FChildrenNode.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FChildrenNode.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FCompoundWrite.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FCompoundWrite.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FEmptyNode.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FEmptyNode.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FIndexedNode.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FIndexedNode.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FLeafNode.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FLeafNode.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FNode.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FSnapshotUtilities.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FSnapshotUtilities.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FAtomicNumber.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FAtomicNumber.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FEventEmitter.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FEventEmitter.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FNextPushId.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FNextPushId.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FParsedUrl.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FParsedUrl.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FStringUtilities.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FStringUtilities.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FTypedefs.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FUtilities.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FUtilities.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FValidation.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FValidation.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleBoolBlock.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleBoolBlock.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleCallbackStatus.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleCallbackStatus.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleFirebase.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleFirebase.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleNodePath.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleNodePath.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleObjectNode.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleObjectNode.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleObjects.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleObjects.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleOnDisconnect.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleOnDisconnect.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTuplePathValue.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTuplePathValue.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleRemovedQueriesEvents.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleRemovedQueriesEvents.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleSetIdPath.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleSetIdPath.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleStringNode.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleStringNode.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleTSN.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleTSN.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleTransaction.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleTransaction.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleUserCallback.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleUserCallback.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FArraySortedDictionary.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FArraySortedDictionary.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedDictionary.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedDictionary.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedSet.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedSet.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBEmptyNode.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBEmptyNode.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBNode.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBValueNode.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBValueNode.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionary.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionary.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionaryEnumerator.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionaryEnumerator.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/FSRWebSocket.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/FSRWebSocket.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/NSData+SRB64Additions.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/NSData+SRB64Additions.m
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/fbase64.c
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/fbase64.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/Wrap-leveldb/APLevelDB.h
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/Wrap-leveldb/APLevelDB.mm
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/LICENSE
 delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/README.md
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORAssert.m
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORClock.m
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORConsoleLogger.m
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORDataFuture.m
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCOREvent.m
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORFlatFileStorage.m
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORLifecycle.m
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORPlatform.m
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORReachability.m
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORRegistrar.m
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORTransformer.m
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORTransport.m
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORUploadCoordinator.m
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORUploadPackage.m
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORDataFuture.h
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCOREvent_Private.h
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORFlatFileStorage.h
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORReachability_Private.h
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORRegistrar_Private.h
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransformer.h
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransformer_Private.h
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransport_Private.h
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadCoordinator.h
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadPackage_Private.h
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORAssert.h
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORClock.h
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORConsoleLogger.h
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCOREvent.h
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCOREventDataObject.h
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCOREventTransformer.h
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORLifecycle.h
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORPlatform.h
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORPrioritizer.h
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORReachability.h
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORRegistrar.h
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORStorageProtocol.h
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORTargets.h
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORTransport.h
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORUploadPackage.h
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORUploader.h
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport.h
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/LICENSE
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/README.md
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTCompressionHelper.m
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTNanopbHelpers.m
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTPrioritizer.m
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTUploader.m
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCOREvent+NetworkConnectionInfo.m
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTCompressionHelper.h
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTNanopbHelpers.h
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTPrioritizer.h
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTUploader.h
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCOREvent+NetworkConnectionInfo.h
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.c
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.h
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransportCCTSupport/LICENSE
 delete mode 100644 assign5/openTok/Pods/GoogleDataTransportCCTSupport/README.md
 delete mode 100644 assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/GULHeartbeatDateStorage.m
 delete mode 100644 assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/GULSecureCoding.m
 delete mode 100644 assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GULHeartbeatDateStorage.h
 delete mode 100644 assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GULKeychainStorage.h
 delete mode 100644 assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GULKeychainUtils.h
 delete mode 100644 assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GULSecureCoding.h
 delete mode 100644 assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/SecureStorage/GULKeychainStorage.m
 delete mode 100644 assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/SecureStorage/GULKeychainUtils.m
 delete mode 100644 assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.h
 delete mode 100644 assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.m
 delete mode 100644 assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/LICENSE
 delete mode 100644 assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Logger/GULLogger.m
 delete mode 100644 assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Logger/Private/GULLogger.h
 delete mode 100644 assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Logger/Public/GULLoggerLevel.h
 delete mode 100644 assign5/openTok/Pods/GoogleUtilities/README.md
 delete mode 100755 assign5/openTok/Pods/Headers/Private/Firebase/Firebase.h
 delete mode 100644 assign5/openTok/Pods/Headers/Private/FirebaseAuthInterop/FIRAuthInterop.h
 delete mode 100644 assign5/openTok/Pods/Headers/Private/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsData.h
 delete mode 100644 assign5/openTok/Pods/Headers/Private/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsInterop.h
 delete mode 100755 assign5/openTok/Pods/Headers/Public/Firebase/Firebase.h
 delete mode 100644 assign5/openTok/Pods/Headers/Public/FirebaseAuthInterop/FIRAuthInterop.h
 delete mode 100644 assign5/openTok/Pods/Headers/Public/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsData.h
 delete mode 100644 assign5/openTok/Pods/Headers/Public/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsInterop.h
 delete mode 100644 assign5/openTok/Pods/Manifest.lock
 delete mode 100644 assign5/openTok/Pods/Pods.xcodeproj/project.pbxproj
 delete mode 100644 assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/Firebase.xcscheme
 delete mode 100644 assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/FirebaseAuthInterop.xcscheme
 delete mode 100644 assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/FirebaseCore.xcscheme
 delete mode 100644 assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/FirebaseCoreDiagnostics.xcscheme
 delete mode 100644 assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/FirebaseCoreDiagnosticsInterop.xcscheme
 delete mode 100644 assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/FirebaseDatabase.xcscheme
 delete mode 100644 assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/GoogleDataTransport.xcscheme
 delete mode 100644 assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/GoogleDataTransportCCTSupport.xcscheme
 delete mode 100644 assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/GoogleUtilities.xcscheme
 delete mode 100644 assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/Pods-openTok.xcscheme
 delete mode 100644 assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/PromisesObjC.xcscheme
 delete mode 100644 assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/leveldb-library.xcscheme
 delete mode 100644 assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/nanopb.xcscheme
 delete mode 100644 assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/xcschememanagement.plist
 delete mode 100644 assign5/openTok/Pods/PromisesObjC/LICENSE
 delete mode 100644 assign5/openTok/Pods/PromisesObjC/README.md
 delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+All.m
 delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Always.m
 delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Any.m
 delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Async.m
 delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Await.m
 delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Catch.m
 delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Delay.m
 delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Do.m
 delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Race.m
 delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Recover.m
 delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Reduce.m
 delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Retry.m
 delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Testing.m
 delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Then.m
 delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Timeout.m
 delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Validate.m
 delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Wrap.m
 delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise.m
 delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromiseError.m
 delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+All.h
 delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Always.h
 delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Any.h
 delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Async.h
 delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Await.h
 delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Catch.h
 delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Delay.h
 delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Do.h
 delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Race.h
 delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Recover.h
 delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Reduce.h
 delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Retry.h
 delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Testing.h
 delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Then.h
 delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Timeout.h
 delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Validate.h
 delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Wrap.h
 delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise.h
 delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromiseError.h
 delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromisePrivate.h
 delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromises.h
 delete mode 100644 assign5/openTok/Pods/Target Support Files/Firebase/Firebase.debug.xcconfig
 delete mode 100644 assign5/openTok/Pods/Target Support Files/Firebase/Firebase.release.xcconfig
 delete mode 100644 assign5/openTok/Pods/Target Support Files/FirebaseAuthInterop/FirebaseAuthInterop.debug.xcconfig
 delete mode 100644 assign5/openTok/Pods/Target Support Files/FirebaseAuthInterop/FirebaseAuthInterop.release.xcconfig
 delete mode 100644 assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore-Info.plist
 delete mode 100644 assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore-dummy.m
 delete mode 100644 assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore-umbrella.h
 delete mode 100644 assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore.debug.xcconfig
 delete mode 100644 assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore.modulemap
 delete mode 100644 assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore.release.xcconfig
 delete mode 100644 assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-Info.plist
 delete mode 100644 assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-dummy.m
 delete mode 100644 assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-umbrella.h
 delete mode 100644 assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.debug.xcconfig
 delete mode 100644 assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.modulemap
 delete mode 100644 assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.release.xcconfig
 delete mode 100644 assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnosticsInterop/FirebaseCoreDiagnosticsInterop.debug.xcconfig
 delete mode 100644 assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnosticsInterop/FirebaseCoreDiagnosticsInterop.release.xcconfig
 delete mode 100644 assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase-Info.plist
 delete mode 100644 assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase-dummy.m
 delete mode 100644 assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase-umbrella.h
 delete mode 100644 assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase.debug.xcconfig
 delete mode 100644 assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase.modulemap
 delete mode 100644 assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase.release.xcconfig
 delete mode 100644 assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-Info.plist
 delete mode 100644 assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-dummy.m
 delete mode 100644 assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-umbrella.h
 delete mode 100644 assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.debug.xcconfig
 delete mode 100644 assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.modulemap
 delete mode 100644 assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.release.xcconfig
 delete mode 100644 assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-Info.plist
 delete mode 100644 assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-dummy.m
 delete mode 100644 assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-umbrella.h
 delete mode 100644 assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.debug.xcconfig
 delete mode 100644 assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.modulemap
 delete mode 100644 assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.release.xcconfig
 delete mode 100644 assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-Info.plist
 delete mode 100644 assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-dummy.m
 delete mode 100644 assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-prefix.pch
 delete mode 100644 assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-umbrella.h
 delete mode 100644 assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.debug.xcconfig
 delete mode 100644 assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.modulemap
 delete mode 100644 assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.release.xcconfig
 delete mode 100644 assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-Info.plist
 delete mode 100644 assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-acknowledgements.markdown
 delete mode 100644 assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-acknowledgements.plist
 delete mode 100644 assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-dummy.m
 delete mode 100644 assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-frameworks-Debug-input-files.xcfilelist
 delete mode 100644 assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-frameworks-Debug-output-files.xcfilelist
 delete mode 100644 assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-frameworks-Release-input-files.xcfilelist
 delete mode 100644 assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-frameworks-Release-output-files.xcfilelist
 delete mode 100755 assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-frameworks.sh
 delete mode 100644 assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-umbrella.h
 delete mode 100644 assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok.debug.xcconfig
 delete mode 100644 assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok.modulemap
 delete mode 100644 assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok.release.xcconfig
 delete mode 100644 assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC-Info.plist
 delete mode 100644 assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC-dummy.m
 delete mode 100644 assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC-umbrella.h
 delete mode 100644 assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC.debug.xcconfig
 delete mode 100644 assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC.modulemap
 delete mode 100644 assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC.release.xcconfig
 delete mode 100644 assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library-Info.plist
 delete mode 100644 assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library-dummy.m
 delete mode 100644 assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library-prefix.pch
 delete mode 100644 assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library-umbrella.h
 delete mode 100644 assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library.debug.xcconfig
 delete mode 100644 assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library.modulemap
 delete mode 100644 assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library.release.xcconfig
 delete mode 100644 assign5/openTok/Pods/Target Support Files/nanopb/nanopb-Info.plist
 delete mode 100644 assign5/openTok/Pods/Target Support Files/nanopb/nanopb-dummy.m
 delete mode 100644 assign5/openTok/Pods/Target Support Files/nanopb/nanopb-prefix.pch
 delete mode 100644 assign5/openTok/Pods/Target Support Files/nanopb/nanopb-umbrella.h
 delete mode 100644 assign5/openTok/Pods/Target Support Files/nanopb/nanopb.debug.xcconfig
 delete mode 100644 assign5/openTok/Pods/Target Support Files/nanopb/nanopb.modulemap
 delete mode 100644 assign5/openTok/Pods/Target Support Files/nanopb/nanopb.release.xcconfig
 delete mode 100644 assign5/openTok/Pods/leveldb-library/LICENSE
 delete mode 100644 assign5/openTok/Pods/leveldb-library/README.md
 delete mode 100644 assign5/openTok/Pods/leveldb-library/db/builder.cc
 delete mode 100644 assign5/openTok/Pods/leveldb-library/db/builder.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/db/c.cc
 delete mode 100644 assign5/openTok/Pods/leveldb-library/db/db_impl.cc
 delete mode 100644 assign5/openTok/Pods/leveldb-library/db/db_impl.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/db/db_iter.cc
 delete mode 100644 assign5/openTok/Pods/leveldb-library/db/db_iter.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/db/dbformat.cc
 delete mode 100644 assign5/openTok/Pods/leveldb-library/db/dbformat.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/db/dumpfile.cc
 delete mode 100644 assign5/openTok/Pods/leveldb-library/db/filename.cc
 delete mode 100644 assign5/openTok/Pods/leveldb-library/db/filename.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/db/log_format.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/db/log_reader.cc
 delete mode 100644 assign5/openTok/Pods/leveldb-library/db/log_reader.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/db/log_writer.cc
 delete mode 100644 assign5/openTok/Pods/leveldb-library/db/log_writer.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/db/memtable.cc
 delete mode 100644 assign5/openTok/Pods/leveldb-library/db/memtable.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/db/repair.cc
 delete mode 100644 assign5/openTok/Pods/leveldb-library/db/skiplist.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/db/snapshot.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/db/table_cache.cc
 delete mode 100644 assign5/openTok/Pods/leveldb-library/db/table_cache.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/db/version_edit.cc
 delete mode 100644 assign5/openTok/Pods/leveldb-library/db/version_edit.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/db/version_set.cc
 delete mode 100644 assign5/openTok/Pods/leveldb-library/db/version_set.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/db/write_batch.cc
 delete mode 100644 assign5/openTok/Pods/leveldb-library/db/write_batch_internal.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/include/leveldb/c.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/include/leveldb/cache.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/include/leveldb/comparator.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/include/leveldb/db.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/include/leveldb/dumpfile.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/include/leveldb/env.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/include/leveldb/export.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/include/leveldb/filter_policy.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/include/leveldb/iterator.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/include/leveldb/options.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/include/leveldb/slice.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/include/leveldb/status.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/include/leveldb/table.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/include/leveldb/table_builder.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/include/leveldb/write_batch.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/port/port.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/port/port_example.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/port/port_stdcxx.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/port/thread_annotations.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/table/block.cc
 delete mode 100644 assign5/openTok/Pods/leveldb-library/table/block.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/table/block_builder.cc
 delete mode 100644 assign5/openTok/Pods/leveldb-library/table/block_builder.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/table/filter_block.cc
 delete mode 100644 assign5/openTok/Pods/leveldb-library/table/filter_block.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/table/format.cc
 delete mode 100644 assign5/openTok/Pods/leveldb-library/table/format.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/table/iterator.cc
 delete mode 100644 assign5/openTok/Pods/leveldb-library/table/iterator_wrapper.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/table/merger.cc
 delete mode 100644 assign5/openTok/Pods/leveldb-library/table/merger.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/table/table.cc
 delete mode 100644 assign5/openTok/Pods/leveldb-library/table/table_builder.cc
 delete mode 100644 assign5/openTok/Pods/leveldb-library/table/two_level_iterator.cc
 delete mode 100644 assign5/openTok/Pods/leveldb-library/table/two_level_iterator.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/util/arena.cc
 delete mode 100644 assign5/openTok/Pods/leveldb-library/util/arena.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/util/bloom.cc
 delete mode 100644 assign5/openTok/Pods/leveldb-library/util/cache.cc
 delete mode 100644 assign5/openTok/Pods/leveldb-library/util/coding.cc
 delete mode 100644 assign5/openTok/Pods/leveldb-library/util/coding.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/util/comparator.cc
 delete mode 100644 assign5/openTok/Pods/leveldb-library/util/crc32c.cc
 delete mode 100644 assign5/openTok/Pods/leveldb-library/util/crc32c.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/util/env.cc
 delete mode 100644 assign5/openTok/Pods/leveldb-library/util/env_posix.cc
 delete mode 100644 assign5/openTok/Pods/leveldb-library/util/env_posix_test_helper.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/util/env_windows_test_helper.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/util/filter_policy.cc
 delete mode 100644 assign5/openTok/Pods/leveldb-library/util/hash.cc
 delete mode 100644 assign5/openTok/Pods/leveldb-library/util/hash.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/util/histogram.cc
 delete mode 100644 assign5/openTok/Pods/leveldb-library/util/histogram.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/util/logging.cc
 delete mode 100644 assign5/openTok/Pods/leveldb-library/util/logging.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/util/mutexlock.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/util/no_destructor.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/util/options.cc
 delete mode 100644 assign5/openTok/Pods/leveldb-library/util/posix_logger.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/util/random.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/util/status.cc
 delete mode 100644 assign5/openTok/Pods/leveldb-library/util/testharness.cc
 delete mode 100644 assign5/openTok/Pods/leveldb-library/util/testharness.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/util/testutil.h
 delete mode 100644 assign5/openTok/Pods/leveldb-library/util/windows_logger.h
 delete mode 100644 assign5/openTok/Pods/nanopb/LICENSE.txt
 delete mode 100644 assign5/openTok/Pods/nanopb/README.md
 delete mode 100644 assign5/openTok/Pods/nanopb/pb.h
 delete mode 100644 assign5/openTok/Pods/nanopb/pb_common.c
 delete mode 100644 assign5/openTok/Pods/nanopb/pb_common.h
 delete mode 100644 assign5/openTok/Pods/nanopb/pb_decode.c
 delete mode 100644 assign5/openTok/Pods/nanopb/pb_decode.h
 delete mode 100644 assign5/openTok/Pods/nanopb/pb_encode.c
 delete mode 100644 assign5/openTok/Pods/nanopb/pb_encode.h
 delete mode 100644 assign5/openTok/openTok.xcodeproj/project.pbxproj
 delete mode 100644 assign5/openTok/openTok.xcodeproj/project.xcworkspace/contents.xcworkspacedata
 delete mode 100644 assign5/openTok/openTok.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
 delete mode 100644 assign5/openTok/openTok.xcodeproj/project.xcworkspace/xcuserdata/keleher.xcuserdatad/UserInterfaceState.xcuserstate
 delete mode 100644 assign5/openTok/openTok.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/xcschememanagement.plist
 delete mode 100644 assign5/openTok/openTok.xcworkspace/contents.xcworkspacedata
 delete mode 100644 assign5/openTok/openTok.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
 delete mode 100644 assign5/openTok/openTok.xcworkspace/xcuserdata/keleher.xcuserdatad/UserInterfaceState.xcuserstate
 delete mode 100644 assign5/openTok/openTok.xcworkspace/xcuserdata/keleher.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
 delete mode 100644 assign5/openTok/openTok/AppDelegate.swift
 delete mode 100644 assign5/openTok/openTok/Assets.xcassets/AppIcon.appiconset/Contents.json
 delete mode 100644 assign5/openTok/openTok/Assets.xcassets/Contents.json
 delete mode 100644 assign5/openTok/openTok/Base.lproj/LaunchScreen.storyboard
 delete mode 100644 assign5/openTok/openTok/Base.lproj/Main.storyboard
 delete mode 100644 assign5/openTok/openTok/GoogleService-Info.plist
 delete mode 100644 assign5/openTok/openTok/Info.plist
 delete mode 100644 assign5/openTok/openTok/MainController.swift
 delete mode 100644 assign5/openTok/openTok/PlayerController.swift
 delete mode 100644 assign5/openTok/openTok/RecordViewController.swift
 delete mode 100644 assign5/openTok/openTok/SceneDelegate.swift
 delete mode 100644 assign5/openTok/openTok/URLController.swift

diff --git a/assign5/openTok/.DS_Store b/assign5/openTok/.DS_Store
deleted file mode 100644
index 646f615f5c5897687ad6966fc81b410d9d8577da..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 6148
zcmeHKu};H44E2=`0hS^b#(V%m>dF+VAhEX}P})>bXt<~d!G!V!Ec^pA6Cc1Y@dG@c
zt&%831O|kVE&1NXXXoN~Q5+MI8{A}lq8<@NP{z(ChBd<LtPSa?g%@48$A~;#(gEGk
zwBc=rzsLZe-40Hzpc!3J_53_#uobk#>c!%$Kb-o!kQC-y?V@s@rjv!Az&kpbKit3V
zzaF)X%zhYIoL8UpnICv}ZGN|~F7dWrBga#`ud{lNhokn9)jVGwpCZk(<-WQ9$o2ct
z^?b*iuZb~W3>X7nF@T!Q5^W3GXbczw#=wdJ{yxM|#ze6c44)1Rp#=bTVGe>h_Yxcv
zD<+DiAXXqwLV*(Mw8d}|4tuPAiDD@z;pDXWaJsY84#kDtasN2DlS>3`GzN@;Is+SW
z+2i_u{CWRh53(y`z!>;f47hGOOb19wYilDpuC+0A3}s=zQg9W5Nhrne<x;!{4FY@2
W6JVlP3c>=hAAvxF4aUH)GVl(9AaV%+

diff --git a/assign5/openTok/Podfile b/assign5/openTok/Podfile
deleted file mode 100644
index c254681..0000000
--- a/assign5/openTok/Podfile
+++ /dev/null
@@ -1,10 +0,0 @@
-# Uncomment the next line to define a global platform for your project
-# platform :ios, '9.0'
-
-target 'openTok' do
-  # Comment the next line if you don't want to use dynamic frameworks
-  use_frameworks!
-
-  # Pods for openTok
-  pod 'Firebase/Database'
-end
diff --git a/assign5/openTok/Podfile.lock b/assign5/openTok/Podfile.lock
deleted file mode 100644
index 0fa5d3c..0000000
--- a/assign5/openTok/Podfile.lock
+++ /dev/null
@@ -1,74 +0,0 @@
-PODS:
-  - Firebase/CoreOnly (6.23.0):
-    - FirebaseCore (= 6.6.7)
-  - Firebase/Database (6.23.0):
-    - Firebase/CoreOnly
-    - FirebaseDatabase (~> 6.2.0)
-  - FirebaseAuthInterop (1.1.0)
-  - FirebaseCore (6.6.7):
-    - FirebaseCoreDiagnostics (~> 1.2)
-    - FirebaseCoreDiagnosticsInterop (~> 1.2)
-    - GoogleUtilities/Environment (~> 6.5)
-    - GoogleUtilities/Logger (~> 6.5)
-  - FirebaseCoreDiagnostics (1.2.4):
-    - FirebaseCoreDiagnosticsInterop (~> 1.2)
-    - GoogleDataTransportCCTSupport (~> 3.0)
-    - GoogleUtilities/Environment (~> 6.5)
-    - GoogleUtilities/Logger (~> 6.5)
-    - nanopb (~> 0.3.901)
-  - FirebaseCoreDiagnosticsInterop (1.2.0)
-  - FirebaseDatabase (6.2.0):
-    - FirebaseAuthInterop (~> 1.0)
-    - FirebaseCore (~> 6.0)
-    - leveldb-library (~> 1.22)
-  - GoogleDataTransport (6.0.0)
-  - GoogleDataTransportCCTSupport (3.0.0):
-    - GoogleDataTransport (~> 6.0)
-    - nanopb (~> 0.3.901)
-  - GoogleUtilities/Environment (6.6.0):
-    - PromisesObjC (~> 1.2)
-  - GoogleUtilities/Logger (6.6.0):
-    - GoogleUtilities/Environment
-  - leveldb-library (1.22)
-  - nanopb (0.3.9011):
-    - nanopb/decode (= 0.3.9011)
-    - nanopb/encode (= 0.3.9011)
-  - nanopb/decode (0.3.9011)
-  - nanopb/encode (0.3.9011)
-  - PromisesObjC (1.2.8)
-
-DEPENDENCIES:
-  - Firebase/Database
-
-SPEC REPOS:
-  trunk:
-    - Firebase
-    - FirebaseAuthInterop
-    - FirebaseCore
-    - FirebaseCoreDiagnostics
-    - FirebaseCoreDiagnosticsInterop
-    - FirebaseDatabase
-    - GoogleDataTransport
-    - GoogleDataTransportCCTSupport
-    - GoogleUtilities
-    - leveldb-library
-    - nanopb
-    - PromisesObjC
-
-SPEC CHECKSUMS:
-  Firebase: 585ae467b3edda6a5444e788fda6888f024d8d6f
-  FirebaseAuthInterop: a0f37ae05833af156e72028f648d313f7e7592e9
-  FirebaseCore: a2788a0d5f6c1dff17b8f79b4a73654a8d4bfdbd
-  FirebaseCoreDiagnostics: b59c024493a409f8aecba02c99928d0d8431d159
-  FirebaseCoreDiagnosticsInterop: 296e2c5f5314500a850ad0b83e9e7c10b011a850
-  FirebaseDatabase: cbf2b9efe39b3f113616a2f1f140839f49d797e0
-  GoogleDataTransport: 061fe7d9b476710e3cd8ea51e8e07d8b67c2b420
-  GoogleDataTransportCCTSupport: 0f39025e8cf51f168711bd3fb773938d7e62ddb5
-  GoogleUtilities: 39530bc0ad980530298e9c4af8549e991fd033b1
-  leveldb-library: 55d93ee664b4007aac644a782d11da33fba316f7
-  nanopb: 18003b5e52dab79db540fe93fe9579f399bd1ccd
-  PromisesObjC: c119f3cd559f50b7ae681fa59dc1acd19173b7e6
-
-PODFILE CHECKSUM: 3bedbb01a41b9d1114e64e9f002246e83fffeb84
-
-COCOAPODS: 1.9.1
diff --git a/assign5/openTok/Pods/Firebase/CoreOnly/Sources/Firebase.h b/assign5/openTok/Pods/Firebase/CoreOnly/Sources/Firebase.h
deleted file mode 100755
index e5049ca..0000000
--- a/assign5/openTok/Pods/Firebase/CoreOnly/Sources/Firebase.h
+++ /dev/null
@@ -1,172 +0,0 @@
-// Copyright 2019 Google
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#import <FirebaseCore/FirebaseCore.h>
-
-#if !defined(__has_include)
-  #error "Firebase.h won't import anything if your compiler doesn't support __has_include. Please \
-          import the headers individually."
-#else
-  #if __has_include(<FirebaseAnalytics/FirebaseAnalytics.h>)
-    #import <FirebaseAnalytics/FirebaseAnalytics.h>
-  #endif
-
-  #if __has_include(<FirebaseAuth/FirebaseAuth.h>)
-    #import <FirebaseAuth/FirebaseAuth.h>
-  #endif
-
-  #if __has_include(<FirebaseCrashlytics/FirebaseCrashlytics.h>)
-    #import <FirebaseCrashlytics/FirebaseCrashlytics.h>
-  #endif
-
-  #if __has_include(<FirebaseDatabase/FirebaseDatabase.h>)
-    #import <FirebaseDatabase/FirebaseDatabase.h>
-  #endif
-
-  #if __has_include(<FirebaseDynamicLinks/FirebaseDynamicLinks.h>)
-    #import <FirebaseDynamicLinks/FirebaseDynamicLinks.h>
-    #if !__has_include(<FirebaseAnalytics/FirebaseAnalytics.h>)
-      #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING
-        #warning "FirebaseAnalytics.framework is not included in your target. Please add \
-`Firebase/Analytics` to your Podfile or add FirebaseAnalytics.framework to your project to ensure \
-Firebase Dynamic Links works as intended."
-      #endif // #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING
-    #endif
-  #endif
-
-  #if __has_include(<FirebaseFirestore/FirebaseFirestore.h>)
-    #import <FirebaseFirestore/FirebaseFirestore.h>
-  #endif
-
-  #if __has_include(<FirebaseFunctions/FirebaseFunctions.h>)
-    #import <FirebaseFunctions/FirebaseFunctions.h>
-  #endif
-
-  #if __has_include(<FirebaseInAppMessaging/FirebaseInAppMessaging.h>)
-    #import <FirebaseInAppMessaging/FirebaseInAppMessaging.h>
-    #if !__has_include(<FirebaseAnalytics/FirebaseAnalytics.h>)
-      #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING
-        #warning "FirebaseAnalytics.framework is not included in your target. Please add \
-`Firebase/Analytics` to your Podfile or add FirebaseAnalytics.framework to your project to ensure \
-Firebase In App Messaging works as intended."
-      #endif // #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING
-    #endif
-  #endif
-
-  #if __has_include(<FirebaseInstanceID/FirebaseInstanceID.h>)
-    #import <FirebaseInstanceID/FirebaseInstanceID.h>
-  #endif
-
-  #if __has_include(<FirebaseMessaging/FirebaseMessaging.h>)
-    #import <FirebaseMessaging/FirebaseMessaging.h>
-      #if !__has_include(<FirebaseAnalytics/FirebaseAnalytics.h>)
-      #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING
-        #warning "FirebaseAnalytics.framework is not included in your target. Please add \
-`Firebase/Analytics` to your Podfile or add FirebaseAnalytics.framework to your project to ensure \
-Firebase Messaging works as intended."
-      #endif // #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING
-    #endif
-#endif
-
-  #if __has_include(<FirebaseMLCommon/FirebaseMLCommon.h>)
-    #import <FirebaseMLCommon/FirebaseMLCommon.h>
-  #endif
-
-  #if __has_include(<FirebaseMLModelInterpreter/FirebaseMLModelInterpreter.h>)
-    #import <FirebaseMLModelInterpreter/FirebaseMLModelInterpreter.h>
-  #endif
-
-  #if __has_include(<FirebaseMLNLLanguageID/FirebaseMLNLLanguageID.h>)
-    #import <FirebaseMLNLLanguageID/FirebaseMLNLLanguageID.h>
-  #endif
-
-  #if __has_include(<FirebaseMLNLSmartReply/FirebaseMLNLSmartReply.h>)
-    #import <FirebaseMLNLSmartReply/FirebaseMLNLSmartReply.h>
-  #endif
-
-  #if __has_include(<FirebaseMLNLTranslate/FirebaseMLNLTranslate.h>)
-    #import <FirebaseMLNLTranslate/FirebaseMLNLTranslate.h>
-  #endif
-
-  #if __has_include(<FirebaseMLNaturalLanguage/FirebaseMLNaturalLanguage.h>)
-    #import <FirebaseMLNaturalLanguage/FirebaseMLNaturalLanguage.h>
-  #endif
-
-  #if __has_include(<FirebaseMLVision/FirebaseMLVision.h>)
-    #import <FirebaseMLVision/FirebaseMLVision.h>
-  #endif
-
-  #if __has_include(<FirebaseMLVisionAutoML/FirebaseMLVisionAutoML.h>)
-    #import <FirebaseMLVisionAutoML/FirebaseMLVisionAutoML.h>
-  #endif
-
-  #if __has_include(<FirebaseMLVisionBarcodeModel/FirebaseMLVisionBarcodeModel.h>)
-    #import <FirebaseMLVisionBarcodeModel/FirebaseMLVisionBarcodeModel.h>
-  #endif
-
-  #if __has_include(<FirebaseMLVisionFaceModel/FirebaseMLVisionFaceModel.h>)
-    #import <FirebaseMLVisionFaceModel/FirebaseMLVisionFaceModel.h>
-  #endif
-
-  #if __has_include(<FirebaseMLVisionLabelModel/FirebaseMLVisionLabelModel.h>)
-    #import <FirebaseMLVisionLabelModel/FirebaseMLVisionLabelModel.h>
-  #endif
-
-  #if __has_include(<FirebaseMLVisionObjectDetection/FirebaseMLVisionObjectDetection.h>)
-    #import <FirebaseMLVisionObjectDetection/FirebaseMLVisionObjectDetection.h>
-  #endif
-
-  #if __has_include(<FirebaseMLVisionTextModel/FirebaseMLVisionTextModel.h>)
-    #import <FirebaseMLVisionTextModel/FirebaseMLVisionTextModel.h>
-  #endif
-
-  #if __has_include(<FirebasePerformance/FirebasePerformance.h>)
-    #import <FirebasePerformance/FirebasePerformance.h>
-    #if !__has_include(<FirebaseAnalytics/FirebaseAnalytics.h>)
-      #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING
-        #warning "FirebaseAnalytics.framework is not included in your target. Please add \
-`Firebase/Analytics` to your Podfile or add FirebaseAnalytics.framework to your project to ensure \
-Firebase Performance works as intended."
-      #endif // #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING
-    #endif
-  #endif
-
-  #if __has_include(<FirebaseRemoteConfig/FirebaseRemoteConfig.h>)
-    #import <FirebaseRemoteConfig/FirebaseRemoteConfig.h>
-    #if !__has_include(<FirebaseAnalytics/FirebaseAnalytics.h>)
-      #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING
-        #warning "FirebaseAnalytics.framework is not included in your target. Please add \
-`Firebase/Analytics` to your Podfile or add FirebaseAnalytics.framework to your project to ensure \
-Firebase Remote Config works as intended."
-      #endif // #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING
-    #endif
-  #endif
-
-  #if __has_include(<FirebaseStorage/FirebaseStorage.h>)
-    #import <FirebaseStorage/FirebaseStorage.h>
-  #endif
-
-  #if __has_include(<GoogleMobileAds/GoogleMobileAds.h>)
-    #import <GoogleMobileAds/GoogleMobileAds.h>
-  #endif
-
-  #if __has_include(<Fabric/Fabric.h>)
-    #import <Fabric/Fabric.h>
-  #endif
-
-  #if __has_include(<Crashlytics/Crashlytics.h>)
-    #import <Crashlytics/Crashlytics.h>
-  #endif
-
-#endif  // defined(__has_include)
diff --git a/assign5/openTok/Pods/Firebase/CoreOnly/Sources/module.modulemap b/assign5/openTok/Pods/Firebase/CoreOnly/Sources/module.modulemap
deleted file mode 100755
index 3685b54..0000000
--- a/assign5/openTok/Pods/Firebase/CoreOnly/Sources/module.modulemap
+++ /dev/null
@@ -1,4 +0,0 @@
-module Firebase {
-  export *
-  header "Firebase.h"
-}
\ No newline at end of file
diff --git a/assign5/openTok/Pods/Firebase/LICENSE b/assign5/openTok/Pods/Firebase/LICENSE
deleted file mode 100644
index d645695..0000000
--- a/assign5/openTok/Pods/Firebase/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
diff --git a/assign5/openTok/Pods/Firebase/README.md b/assign5/openTok/Pods/Firebase/README.md
deleted file mode 100644
index b04a270..0000000
--- a/assign5/openTok/Pods/Firebase/README.md
+++ /dev/null
@@ -1,282 +0,0 @@
-# Firebase iOS Open Source Development
- [![Actions Status][gh-auth-badge]][gh-actions]
- [![Actions Status][gh-core-badge]][gh-actions]
- [![Actions Status][gh-datatransport-badge]][gh-actions]
- [![Actions Status][gh-dynamiclinks-badge]][gh-actions]
- [![Actions Status][gh-firebasepod-badge]][gh-actions]
- [![Actions Status][gh-firestore-badge]][gh-actions]
- [![Actions Status][gh-interop-badge]][gh-actions]
- [![Actions Status][gh-messaging-badge]][gh-actions]
- [![Actions Status][gh-storage-badge]][gh-actions]
- [![Actions Status][gh-symbolcollision-badge]][gh-actions]
- [![Actions Status][gh-zip-badge]][gh-actions]
- [![Travis](https://travis-ci.org/firebase/firebase-ios-sdk.svg?branch=master)](https://travis-ci.org/firebase/firebase-ios-sdk)
-
-This repository contains all Firebase iOS SDK source except FirebaseAnalytics,
-FirebasePerformance, and FirebaseML.
-
-The repository also includes GoogleUtilities source. The
-[GoogleUtilities](GoogleUtilities/README.md) pod is
-a set of utilities used by Firebase and other Google products.
-
-Firebase is an app development platform with tools to help you build, grow and
-monetize your app. More information about Firebase can be found at
-[https://firebase.google.com](https://firebase.google.com).
-
-## Installation
-
-See the three subsections for details about three different installation methods.
-1. [Standard pod install](README.md#standard-pod-install)
-1. [Installing from the GitHub repo](README.md#installing-from-github)
-1. [Experimental Carthage](README.md#carthage-ios-only)
-
-### Standard pod install
-
-Go to
-[https://firebase.google.com/docs/ios/setup](https://firebase.google.com/docs/ios/setup).
-
-### Installing from GitHub
-
-For releases starting with 5.0.0, the source for each release is also deployed
-to CocoaPods master and available via standard
-[CocoaPods Podfile syntax](https://guides.cocoapods.org/syntax/podfile.html#pod).
-
-These instructions can be used to access the Firebase repo at other branches,
-tags, or commits.
-
-#### Background
-
-See
-[the Podfile Syntax Reference](https://guides.cocoapods.org/syntax/podfile.html#pod)
-for instructions and options about overriding pod source locations.
-
-#### Accessing Firebase Source Snapshots
-
-All of the official releases are tagged in this repo and available via CocoaPods. To access a local
-source snapshot or unreleased branch, use Podfile directives like the following:
-
-To access FirebaseFirestore via a branch:
-```
-pod 'FirebaseCore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master'
-pod 'FirebaseFirestore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master'
-```
-
-To access FirebaseMessaging via a checked out version of the firebase-ios-sdk repo do:
-
-```
-pod 'FirebaseCore', :path => '/path/to/firebase-ios-sdk'
-pod 'FirebaseMessaging', :path => '/path/to/firebase-ios-sdk'
-```
-
-### Carthage (iOS only)
-
-Instructions for the experimental Carthage distribution are at
-[Carthage](Carthage.md).
-
-### Rome
-
-Instructions for installing binary frameworks via
-[Rome](https://github.com/CocoaPods/Rome) are at [Rome](Rome.md).
-
-### Using Firebase from a Framework or a library
-
-[Using Firebase from a Framework or a library](docs/firebase_in_libraries.md)
-
-## Development
-
-To develop Firebase software in this repository, ensure that you have at least
-the following software:
-
-  * Xcode 10.1 (or later)
-  * CocoaPods 1.7.2 (or later)
-  * [CocoaPods generate](https://github.com/square/cocoapods-generate)
-
-For the pod that you want to develop:
-
-`pod gen Firebase{name here}.podspec --local-sources=./ --auto-open --platforms=ios`
-
-Note: If the CocoaPods cache is out of date, you may need to run
-`pod repo update` before the `pod gen` command.
-
-Note: Set the `--platforms` option to `macos` or `tvos` to develop/test for
-those platforms. Since 10.2, Xcode does not properly handle multi-platform
-CocoaPods workspaces.
-
-Firestore has a self contained Xcode project. See
-[Firestore/README.md](Firestore/README.md).
-
-### Development for Catalyst
-* `pod gen {name here}.podspec --local-sources=./ --auto-open --platforms=ios`
-* Check the Mac box in the App-iOS Build Settings
-* Sign the App in the Settings Signing & Capabilities tab
-* Click Pods in the Project Manager
-* Add Signing to the iOS host app and unit test targets
-* Select the Unit-unit scheme
-* Run it to build and test
-
-### Adding a New Firebase Pod
-
-See [AddNewPod.md](AddNewPod.md).
-
-### Code Formatting
-
-To ensure that the code is formatted consistently, run the script
-[./scripts/style.sh](https://github.com/firebase/firebase-ios-sdk/blob/master/scripts/style.sh)
-before creating a PR.
-
-Travis will verify that any code changes are done in a style compliant way. Install
-`clang-format` and `swiftformat`.
-These commands will get the right versions:
-
-```
-brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/c6f1cbd/Formula/clang-format.rb
-brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/c13eda8/Formula/swiftformat.rb
-```
-
-Note: if you already have a newer version of these installed you may need to
-`brew switch` to this version.
-
-To update this section, find the versions of clang-format and swiftformat.rb to
-match the versions in the CI failure logs
-[here](https://github.com/Homebrew/homebrew-core/tree/master/Formula).
-
-### Running Unit Tests
-
-Select a scheme and press Command-u to build a component and run its unit tests.
-
-#### Viewing Code Coverage (Deprecated)
-
-First, make sure that [xcov](https://github.com/nakiostudio/xcov) is installed with `gem install xcov`.
-
-After running the `AllUnitTests_iOS` scheme in Xcode, execute
-`xcov --workspace Firebase.xcworkspace --scheme AllUnitTests_iOS --output_directory xcov_output`
-at Example/ in the terminal. This will aggregate the coverage, and you can run `open xcov_output/index.html` to see the results.
-
-### Running Sample Apps
-In order to run the sample apps and integration tests, you'll need valid
-`GoogleService-Info.plist` files for those samples. The Firebase Xcode project contains dummy plist
-files without real values, but can be replaced with real plist files. To get your own
-`GoogleService-Info.plist` files:
-
-1. Go to the [Firebase Console](https://console.firebase.google.com/)
-2. Create a new Firebase project, if you don't already have one
-3. For each sample app you want to test, create a new Firebase app with the sample app's bundle
-identifier (e.g. `com.google.Database-Example`)
-4. Download the resulting `GoogleService-Info.plist` and replace the appropriate dummy plist file
-(e.g. in [Example/Database/App/](Example/Database/App/));
-
-Some sample apps like Firebase Messaging ([Example/Messaging/App](Example/Messaging/App)) require
-special Apple capabilities, and you will have to change the sample app to use a unique bundle
-identifier that you can control in your own Apple Developer account.
-
-## Specific Component Instructions
-See the sections below for any special instructions for those components.
-
-### Firebase Auth
-
-If you're doing specific Firebase Auth development, see
-[the Auth Sample README](FirebaseAuth/Tests/Sample/README.md) for instructions about
-building and running the FirebaseAuth pod along with various samples and tests.
-
-### Firebase Database
-
-To run the Database Integration tests, make your database authentication rules
-[public](https://firebase.google.com/docs/database/security/quickstart).
-
-### Firebase Storage
-
-To run the Storage Integration tests, follow the instructions in
-[FIRStorageIntegrationTests.m](FirebaseStorage/Tests/Integration/FIRStorageIntegrationTests.m).
-
-#### Push Notifications
-
-Push notifications can only be delivered to specially provisioned App IDs in the developer portal.
-In order to actually test receiving push notifications, you will need to:
-
-1. Change the bundle identifier of the sample app to something you own in your Apple Developer
-account, and enable that App ID for push notifications.
-2. You'll also need to
-[upload your APNs Provider Authentication Key or certificate to the Firebase Console](https://firebase.google.com/docs/cloud-messaging/ios/certs)
-at **Project Settings > Cloud Messaging > [Your Firebase App]**.
-3. Ensure your iOS device is added to your Apple Developer portal as a test device.
-
-#### iOS Simulator
-
-The iOS Simulator cannot register for remote notifications, and will not receive push notifications.
-In order to receive push notifications, you'll have to follow the steps above and run the app on a
-physical device.
-
-## Community Supported Efforts
-
-We've seen an amazing amount of interest and contributions to improve the Firebase SDKs, and we are
-very grateful!  We'd like to empower as many developers as we can to be able to use Firebase and
-participate in the Firebase community.
-
-### tvOS, macOS, watchOS and Catalyst
-Thanks to contributions from the community, many of Firebase SDKs now compile, run unit tests, and work on
-tvOS, macOS, watchOS and Catalyst.
-
-For tvOS, checkout the [Sample](Example/tvOSSample).
-For watchOS, currently only Messaging and Storage (and their dependencies) have limited support. Checkout the
-[Independent Watch App Sample](Example/watchOSSample).
-
-Keep in mind that macOS, tvOS, watchOS and Catalyst are not officially supported by Firebase, and this
-repository is actively developed primarily for iOS. While we can catch basic unit test issues with
-Travis, there may be some changes where the SDK no longer works as expected on macOS, tvOS or watchOS. If you
-encounter this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues).
-
-During app setup in the console, you may get to a step that mentions something like "Checking if the app
-has communicated with our servers". This relies on Analytics and will not work on macOS/tvOS/watchOS/Catalyst.
-**It's safe to ignore the message and continue**, the rest of the SDKs will work as expected.
-
-To install, add a subset of the following to the Podfile:
-
-```
-pod 'Firebase/ABTesting'     # No watchOS support yet
-pod 'Firebase/Auth'          # No watchOS support yet
-pod 'Firebase/Crashlytics'   # No watchOS support yet
-pod 'Firebase/Database'      # No watchOS support yet
-pod 'Firebase/Firestore'     # No watchOS support yet
-pod 'Firebase/Functions'     # No watchOS support yet
-pod 'Firebase/Messaging'
-pod 'Firebase/RemoteConfig'  # No watchOS support yet
-pod 'Firebase/Storage'
-```
-
-#### Additional Catalyst Notes
-
-* FirebaseAuth and FirebaseMessaging require adding `Keychain Sharing Capability`
-to Build Settings.
-* FirebaseFirestore requires signing the
-[gRPC Resource target](https://github.com/firebase/firebase-ios-sdk/issues/3500#issuecomment-518741681).
-
-## Roadmap
-
-See [Roadmap](ROADMAP.md) for more about the Firebase iOS SDK Open Source
-plans and directions.
-
-## Contributing
-
-See [Contributing](CONTRIBUTING.md) for more information on contributing to the Firebase
-iOS SDK.
-
-## License
-
-The contents of this repository is licensed under the
-[Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0).
-
-Your use of Firebase is governed by the
-[Terms of Service for Firebase Services](https://firebase.google.com/terms/).
-
-[gh-actions]: https://github.com/firebase/firebase-ios-sdk/actions
-[gh-auth-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/auth/badge.svg
-[gh-core-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/core/badge.svg
-[gh-datatransport-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/datatransport/badge.svg
-[gh-dynamiclinks-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/dynamiclinks/badge.svg
-[gh-firebasepod-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firebasepod/badge.svg
-[gh-firestore-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firestore/badge.svg
-[gh-interop-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/interop/badge.svg
-[gh-messaging-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/messaging/badge.svg
-[gh-storage-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/storage/badge.svg
-[gh-symbolcollision-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/symbolcollision/badge.svg
-[gh-zip-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/zip/badge.svg
diff --git a/assign5/openTok/Pods/FirebaseAuthInterop/Interop/Auth/Public/FIRAuthInterop.h b/assign5/openTok/Pods/FirebaseAuthInterop/Interop/Auth/Public/FIRAuthInterop.h
deleted file mode 100644
index a33da7c..0000000
--- a/assign5/openTok/Pods/FirebaseAuthInterop/Interop/Auth/Public/FIRAuthInterop.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2018 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef FIRAuthInterop_h
-#define FIRAuthInterop_h
-
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-/** @typedef FIRTokenCallback
- @brief The type of block which gets called when a token is ready.
- */
-typedef void (^FIRTokenCallback)(NSString *_Nullable token, NSError *_Nullable error)
-    NS_SWIFT_NAME(TokenCallback);
-
-/// Common methods for Auth interoperability.
-NS_SWIFT_NAME(AuthInterop)
-@protocol FIRAuthInterop
-
-/// Retrieves the Firebase authentication token, possibly refreshing it if it has expired.
-- (void)getTokenForcingRefresh:(BOOL)forceRefresh withCallback:(FIRTokenCallback)callback;
-
-/// Get the current Auth user's UID. Returns nil if there is no user signed in.
-- (nullable NSString *)getUserID;
-
-@end
-
-NS_ASSUME_NONNULL_END
-
-#endif /* FIRAuthInterop_h */
diff --git a/assign5/openTok/Pods/FirebaseAuthInterop/LICENSE b/assign5/openTok/Pods/FirebaseAuthInterop/LICENSE
deleted file mode 100644
index d645695..0000000
--- a/assign5/openTok/Pods/FirebaseAuthInterop/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
diff --git a/assign5/openTok/Pods/FirebaseAuthInterop/README.md b/assign5/openTok/Pods/FirebaseAuthInterop/README.md
deleted file mode 100644
index d6798fe..0000000
--- a/assign5/openTok/Pods/FirebaseAuthInterop/README.md
+++ /dev/null
@@ -1,266 +0,0 @@
-# Firebase iOS Open Source Development
- [![Actions Status][gh-core-badge]][gh-actions]
- [![Actions Status][gh-dynamiclinks-badge]][gh-actions]
- [![Actions Status][gh-datatransport-badge]][gh-actions]
- [![Actions Status][gh-storage-badge]][gh-actions]
- [![Actions Status][gh-zip-badge]][gh-actions]
- [![Travis](https://travis-ci.org/firebase/firebase-ios-sdk.svg?branch=master)](https://travis-ci.org/firebase/firebase-ios-sdk)
-
-This repository contains all Firebase iOS SDK source except FirebaseAnalytics,
-FirebasePerformance, and FirebaseML.
-
-The repository also includes GoogleUtilities source. The
-[GoogleUtilities](GoogleUtilities/README.md) pod is
-a set of utilities used by Firebase and other Google products.
-
-Firebase is an app development platform with tools to help you build, grow and
-monetize your app. More information about Firebase can be found at
-[https://firebase.google.com](https://firebase.google.com).
-
-## Installation
-
-See the three subsections for details about three different installation methods.
-1. [Standard pod install](README.md#standard-pod-install)
-1. [Installing from the GitHub repo](README.md#installing-from-github)
-1. [Experimental Carthage](README.md#carthage-ios-only)
-
-### Standard pod install
-
-Go to
-[https://firebase.google.com/docs/ios/setup](https://firebase.google.com/docs/ios/setup).
-
-### Installing from GitHub
-
-For releases starting with 5.0.0, the source for each release is also deployed
-to CocoaPods master and available via standard
-[CocoaPods Podfile syntax](https://guides.cocoapods.org/syntax/podfile.html#pod).
-
-These instructions can be used to access the Firebase repo at other branches,
-tags, or commits.
-
-#### Background
-
-See
-[the Podfile Syntax Reference](https://guides.cocoapods.org/syntax/podfile.html#pod)
-for instructions and options about overriding pod source locations.
-
-#### Accessing Firebase Source Snapshots
-
-All of the official releases are tagged in this repo and available via CocoaPods. To access a local
-source snapshot or unreleased branch, use Podfile directives like the following:
-
-To access FirebaseFirestore via a branch:
-```
-pod 'FirebaseCore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master'
-pod 'FirebaseFirestore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master'
-```
-
-To access FirebaseMessaging via a checked out version of the firebase-ios-sdk repo do:
-
-```
-pod 'FirebaseCore', :path => '/path/to/firebase-ios-sdk'
-pod 'FirebaseMessaging', :path => '/path/to/firebase-ios-sdk'
-```
-
-### Carthage (iOS only)
-
-Instructions for the experimental Carthage distribution are at
-[Carthage](Carthage.md).
-
-### Rome
-
-Instructions for installing binary frameworks via
-[Rome](https://github.com/CocoaPods/Rome) are at [Rome](Rome.md).
-
-## Development
-
-To develop Firebase software in this repository, ensure that you have at least
-the following software:
-
-  * Xcode 10.1 (or later)
-  * CocoaPods 1.7.2 (or later)
-  * [CocoaPods generate](https://github.com/square/cocoapods-generate)
-
-For the pod that you want to develop:
-
-`pod gen Firebase{name here}.podspec --local-sources=./ --auto-open --platforms=ios`
-
-Note: If the CocoaPods cache is out of date, you may need to run
-`pod repo update` before the `pod gen` command.
-
-Note: Set the `--platforms` option to `macos` or `tvos` to develop/test for
-those platforms. Since 10.2, Xcode does not properly handle multi-platform
-CocoaPods workspaces.
-
-Firestore has a self contained Xcode project. See
-[Firestore/README.md](Firestore/README.md).
-
-### Development for Catalyst
-* `pod gen {name here}.podspec --local-sources=./ --auto-open --platforms=ios`
-* Check the Mac box in the App-iOS Build Settings
-* Sign the App in the Settings Signing & Capabilities tab
-* Click Pods in the Project Manager
-* Add Signing to the iOS host app and unit test targets
-* Select the Unit-unit scheme
-* Run it to build and test
-
-### Adding a New Firebase Pod
-
-See [AddNewPod.md](AddNewPod.md).
-
-### Code Formatting
-
-To ensure that the code is formatted consistently, run the script
-[./scripts/style.sh](https://github.com/firebase/firebase-ios-sdk/blob/master/scripts/style.sh)
-before creating a PR.
-
-Travis will verify that any code changes are done in a style compliant way. Install
-`clang-format` and `swiftformat`.
-These commands will get the right versions:
-
-```
-brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/e3496d9/Formula/clang-format.rb
-brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/7963c3d/Formula/swiftformat.rb
-```
-
-Note: if you already have a newer version of these installed you may need to
-`brew switch` to this version.
-
-To update this section, find the versions of clang-format and swiftformat.rb to
-match the versions in the CI failure logs
-[here](https://github.com/Homebrew/homebrew-core/tree/master/Formula).
-
-### Running Unit Tests
-
-Select a scheme and press Command-u to build a component and run its unit tests.
-
-#### Viewing Code Coverage
-
-First, make sure that [xcov](https://github.com/nakiostudio/xcov) is installed with `gem install xcov`.
-
-After running the `AllUnitTests_iOS` scheme in Xcode, execute
-`xcov --workspace Firebase.xcworkspace --scheme AllUnitTests_iOS --output_directory xcov_output`
-at Example/ in the terminal. This will aggregate the coverage, and you can run `open xcov_output/index.html` to see the results.
-
-### Running Sample Apps
-In order to run the sample apps and integration tests, you'll need valid
-`GoogleService-Info.plist` files for those samples. The Firebase Xcode project contains dummy plist
-files without real values, but can be replaced with real plist files. To get your own
-`GoogleService-Info.plist` files:
-
-1. Go to the [Firebase Console](https://console.firebase.google.com/)
-2. Create a new Firebase project, if you don't already have one
-3. For each sample app you want to test, create a new Firebase app with the sample app's bundle
-identifier (e.g. `com.google.Database-Example`)
-4. Download the resulting `GoogleService-Info.plist` and replace the appropriate dummy plist file
-(e.g. in [Example/Database/App/](Example/Database/App/));
-
-Some sample apps like Firebase Messaging ([Example/Messaging/App](Example/Messaging/App)) require
-special Apple capabilities, and you will have to change the sample app to use a unique bundle
-identifier that you can control in your own Apple Developer account.
-
-## Specific Component Instructions
-See the sections below for any special instructions for those components.
-
-### Firebase Auth
-
-If you're doing specific Firebase Auth development, see
-[the Auth Sample README](Example/Auth/README.md) for instructions about
-building and running the FirebaseAuth pod along with various samples and tests.
-
-### Firebase Database
-
-To run the Database Integration tests, make your database authentication rules
-[public](https://firebase.google.com/docs/database/security/quickstart).
-
-### Firebase Storage
-
-To run the Storage Integration tests, follow the instructions in
-[FIRStorageIntegrationTests.m](Example/Storage/Tests/Integration/FIRStorageIntegrationTests.m).
-
-#### Push Notifications
-
-Push notifications can only be delivered to specially provisioned App IDs in the developer portal.
-In order to actually test receiving push notifications, you will need to:
-
-1. Change the bundle identifier of the sample app to something you own in your Apple Developer
-account, and enable that App ID for push notifications.
-2. You'll also need to
-[upload your APNs Provider Authentication Key or certificate to the Firebase Console](https://firebase.google.com/docs/cloud-messaging/ios/certs)
-at **Project Settings > Cloud Messaging > [Your Firebase App]**.
-3. Ensure your iOS device is added to your Apple Developer portal as a test device.
-
-#### iOS Simulator
-
-The iOS Simulator cannot register for remote notifications, and will not receive push notifications.
-In order to receive push notifications, you'll have to follow the steps above and run the app on a
-physical device.
-
-## Community Supported Efforts
-
-We've seen an amazing amount of interest and contributions to improve the Firebase SDKs, and we are
-very grateful!  We'd like to empower as many developers as we can to be able to use Firebase and
-participate in the Firebase community.
-
-### tvOS, macOS, watchOS and Catalyst
-Thanks to contributions from the community, many of Firebase SDKs now compile, run unit tests, and work on
-tvOS, macOS, watchOS and Catalyst.
-
-For tvOS, checkout the [Sample](Example/tvOSSample).
-For watchOS, currently only Messaging and Storage (and their dependencies) have limited support. Checkout the
-[Independent Watch App Sample](Example/watchOSSample).
-
-Keep in mind that macOS, tvOS, watchOS and Catalyst are not officially supported by Firebase, and this
-repository is actively developed primarily for iOS. While we can catch basic unit test issues with
-Travis, there may be some changes where the SDK no longer works as expected on macOS, tvOS or watchOS. If you
-encounter this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues).
-
-During app setup in the console, you may get to a step that mentions something like "Checking if the app
-has communicated with our servers". This relies on Analytics and will not work on macOS/tvOS/watchOS/Catalyst.
-**It's safe to ignore the message and continue**, the rest of the SDKs will work as expected.
-
-To install, add a subset of the following to the Podfile:
-
-```
-pod 'Firebase/ABTesting'     # No watchOS support yet
-pod 'Firebase/Auth'          # No watchOS support yet
-pod 'Firebase/Crashlytics'   # No watchOS support yet
-pod 'Firebase/Database'      # No watchOS support yet
-pod 'Firebase/Firestore'     # No watchOS support yet
-pod 'Firebase/Functions'     # No watchOS support yet
-pod 'Firebase/Messaging'
-pod 'Firebase/RemoteConfig'  # No watchOS support yet
-pod 'Firebase/Storage'
-```
-
-#### Additional Catalyst Notes
-
-* FirebaseAuth and FirebaseMessaging require adding `Keychain Sharing Capability`
-to Build Settings.
-* FirebaseFirestore requires signing the
-[gRPC Resource target](https://github.com/firebase/firebase-ios-sdk/issues/3500#issuecomment-518741681).
-
-## Roadmap
-
-See [Roadmap](ROADMAP.md) for more about the Firebase iOS SDK Open Source
-plans and directions.
-
-## Contributing
-
-See [Contributing](CONTRIBUTING.md) for more information on contributing to the Firebase
-iOS SDK.
-
-## License
-
-The contents of this repository is licensed under the
-[Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0).
-
-Your use of Firebase is governed by the
-[Terms of Service for Firebase Services](https://firebase.google.com/terms/).
-
-[gh-actions]: https://github.com/firebase/firebase-ios-sdk/actions
-[gh-core-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/core/badge.svg
-[gh-datatransport-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/datatransport/badge.svg
-[gh-dynamiclinks-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/dynamiclinks/badge.svg
-[gh-storage-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/storage/badge.svg
-[gh-zip-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/zip/badge.svg
diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRAnalyticsConfiguration.m b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRAnalyticsConfiguration.m
deleted file mode 100644
index 3a7d6de..0000000
--- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRAnalyticsConfiguration.m
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright 2017 Google
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#import <Foundation/Foundation.h>
-
-#import "FirebaseCore/Sources/Private/FIRAnalyticsConfiguration.h"
-
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdeprecated-implementations"
-@implementation FIRAnalyticsConfiguration
-#pragma clang diagnostic pop
-
-+ (FIRAnalyticsConfiguration *)sharedInstance {
-  static FIRAnalyticsConfiguration *sharedInstance = nil;
-  static dispatch_once_t onceToken;
-  dispatch_once(&onceToken, ^{
-    sharedInstance = [[FIRAnalyticsConfiguration alloc] init];
-  });
-  return sharedInstance;
-}
-
-- (void)postNotificationName:(NSString *)name value:(id)value {
-  if (!name.length || !value) {
-    return;
-  }
-  [[NSNotificationCenter defaultCenter] postNotificationName:name
-                                                      object:self
-                                                    userInfo:@{name : value}];
-}
-
-- (void)setAnalyticsCollectionEnabled:(BOOL)analyticsCollectionEnabled {
-  [self setAnalyticsCollectionEnabled:analyticsCollectionEnabled persistSetting:YES];
-}
-
-- (void)setAnalyticsCollectionEnabled:(BOOL)analyticsCollectionEnabled
-                       persistSetting:(BOOL)shouldPersist {
-  // Persist the measurementEnabledState. Use FIRAnalyticsEnabledState values instead of YES/NO.
-  FIRAnalyticsEnabledState analyticsEnabledState =
-      analyticsCollectionEnabled ? kFIRAnalyticsEnabledStateSetYes : kFIRAnalyticsEnabledStateSetNo;
-  if (shouldPersist) {
-    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
-    [userDefaults setObject:@(analyticsEnabledState)
-                     forKey:kFIRAPersistedConfigMeasurementEnabledStateKey];
-    [userDefaults synchronize];
-  }
-
-  [self postNotificationName:kFIRAnalyticsConfigurationSetEnabledNotification
-                       value:@(analyticsCollectionEnabled)];
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRApp.m b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRApp.m
deleted file mode 100644
index 002f93c..0000000
--- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRApp.m
+++ /dev/null
@@ -1,938 +0,0 @@
-// Copyright 2017 Google
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include <sys/utsname.h>
-
-#if __has_include(<UIKit/UIKit.h>)
-#import <UIKit/UIKit.h>
-#endif
-
-#if __has_include(<AppKit/AppKit.h>)
-#import <AppKit/AppKit.h>
-#endif
-
-#import <FirebaseCore/FIRApp.h>
-
-#import "FirebaseCore/Sources/FIRBundleUtil.h"
-#import "FirebaseCore/Sources/FIRVersion.h"
-#import "FirebaseCore/Sources/Private/FIRAnalyticsConfiguration.h"
-#import "FirebaseCore/Sources/Private/FIRAppInternal.h"
-#import "FirebaseCore/Sources/Private/FIRComponentContainerInternal.h"
-#import "FirebaseCore/Sources/Private/FIRConfigurationInternal.h"
-#import "FirebaseCore/Sources/Private/FIRCoreDiagnosticsConnector.h"
-#import "FirebaseCore/Sources/Private/FIRLibrary.h"
-#import "FirebaseCore/Sources/Private/FIRLogger.h"
-#import "FirebaseCore/Sources/Private/FIROptionsInternal.h"
-
-#import <GoogleUtilities/GULAppEnvironmentUtil.h>
-
-#import <objc/runtime.h>
-
-// The kFIRService strings are only here while transitioning CoreDiagnostics from the Analytics
-// pod to a Core dependency. These symbols are not used and should be deleted after the transition.
-NSString *const kFIRServiceAdMob;
-NSString *const kFIRServiceAuth;
-NSString *const kFIRServiceAuthUI;
-NSString *const kFIRServiceCrash;
-NSString *const kFIRServiceDatabase;
-NSString *const kFIRServiceDynamicLinks;
-NSString *const kFIRServiceFirestore;
-NSString *const kFIRServiceFunctions;
-NSString *const kFIRServiceInstanceID;
-NSString *const kFIRServiceInvites;
-NSString *const kFIRServiceMessaging;
-NSString *const kFIRServiceMeasurement;
-NSString *const kFIRServicePerformance;
-NSString *const kFIRServiceRemoteConfig;
-NSString *const kFIRServiceStorage;
-NSString *const kGGLServiceAnalytics;
-NSString *const kGGLServiceSignIn;
-
-NSString *const kFIRDefaultAppName = @"__FIRAPP_DEFAULT";
-NSString *const kFIRAppReadyToConfigureSDKNotification = @"FIRAppReadyToConfigureSDKNotification";
-NSString *const kFIRAppDeleteNotification = @"FIRAppDeleteNotification";
-NSString *const kFIRAppIsDefaultAppKey = @"FIRAppIsDefaultAppKey";
-NSString *const kFIRAppNameKey = @"FIRAppNameKey";
-NSString *const kFIRGoogleAppIDKey = @"FIRGoogleAppIDKey";
-
-NSString *const kFIRGlobalAppDataCollectionEnabledDefaultsKeyFormat =
-    @"/google/firebase/global_data_collection_enabled:%@";
-NSString *const kFIRGlobalAppDataCollectionEnabledPlistKey =
-    @"FirebaseDataCollectionDefaultEnabled";
-
-NSString *const kFIRAppDiagnosticsNotification = @"FIRAppDiagnosticsNotification";
-
-NSString *const kFIRAppDiagnosticsConfigurationTypeKey = @"ConfigType";
-NSString *const kFIRAppDiagnosticsErrorKey = @"Error";
-NSString *const kFIRAppDiagnosticsFIRAppKey = @"FIRApp";
-NSString *const kFIRAppDiagnosticsSDKNameKey = @"SDKName";
-NSString *const kFIRAppDiagnosticsSDKVersionKey = @"SDKVersion";
-NSString *const kFIRAppDiagnosticsApplePlatformPrefix = @"apple-platform";
-
-// Auth internal notification notification and key.
-NSString *const FIRAuthStateDidChangeInternalNotification =
-    @"FIRAuthStateDidChangeInternalNotification";
-NSString *const FIRAuthStateDidChangeInternalNotificationAppKey =
-    @"FIRAuthStateDidChangeInternalNotificationAppKey";
-NSString *const FIRAuthStateDidChangeInternalNotificationTokenKey =
-    @"FIRAuthStateDidChangeInternalNotificationTokenKey";
-NSString *const FIRAuthStateDidChangeInternalNotificationUIDKey =
-    @"FIRAuthStateDidChangeInternalNotificationUIDKey";
-
-/**
- * The URL to download plist files.
- */
-static NSString *const kPlistURL = @"https://console.firebase.google.com/";
-
-/**
- * An array of all classes that registered as `FIRCoreConfigurable` in order to receive lifecycle
- * events from Core.
- */
-static NSMutableArray<Class<FIRLibrary>> *sRegisteredAsConfigurable;
-
-@interface FIRApp ()
-
-#ifdef DEBUG
-@property(nonatomic) BOOL alreadyOutputDataCollectionFlag;
-#endif  // DEBUG
-
-@end
-
-@implementation FIRApp
-
-// This is necessary since our custom getter prevents `_options` from being created.
-@synthesize options = _options;
-
-static NSMutableDictionary *sAllApps;
-static FIRApp *sDefaultApp;
-static NSMutableDictionary *sLibraryVersions;
-static dispatch_once_t sFirebaseUserAgentOnceToken;
-
-+ (void)configure {
-  FIROptions *options = [FIROptions defaultOptions];
-  if (!options) {
-    [NSException raise:kFirebaseCoreErrorDomain
-                format:@"`[FIRApp configure];` (`FirebaseApp.configure()` in Swift) could not find "
-                       @"a valid GoogleService-Info.plist in your project. Please download one "
-                       @"from %@.",
-                       kPlistURL];
-  }
-  [FIRApp configureWithOptions:options];
-#if TARGET_OS_OSX || TARGET_OS_TV
-  FIRLogNotice(kFIRLoggerCore, @"I-COR000028",
-               @"tvOS and macOS SDK support is not part of the official Firebase product. "
-               @"Instead they are community supported. Details at "
-               @"https://github.com/firebase/firebase-ios-sdk/blob/master/README.md.");
-#endif
-}
-
-+ (void)configureWithOptions:(FIROptions *)options {
-  if (!options) {
-    [NSException raise:kFirebaseCoreErrorDomain
-                format:@"Options is nil. Please pass a valid options."];
-  }
-  [FIRApp configureWithName:kFIRDefaultAppName options:options];
-}
-
-+ (NSCharacterSet *)applicationNameAllowedCharacters {
-  static NSCharacterSet *applicationNameAllowedCharacters;
-  static dispatch_once_t onceToken;
-  dispatch_once(&onceToken, ^{
-    NSMutableCharacterSet *allowedNameCharacters = [NSMutableCharacterSet alphanumericCharacterSet];
-    [allowedNameCharacters addCharactersInString:@"-_"];
-    applicationNameAllowedCharacters = [allowedNameCharacters copy];
-  });
-  return applicationNameAllowedCharacters;
-}
-
-+ (void)configureWithName:(NSString *)name options:(FIROptions *)options {
-  if (!name || !options) {
-    [NSException raise:kFirebaseCoreErrorDomain format:@"Neither name nor options can be nil."];
-  }
-  if (name.length == 0) {
-    [NSException raise:kFirebaseCoreErrorDomain format:@"Name cannot be empty."];
-  }
-
-  if ([name isEqualToString:kFIRDefaultAppName]) {
-    if (sDefaultApp) {
-      // The default app already exixts. Handle duplicate `configure` calls and return.
-      [self appWasConfiguredTwice:sDefaultApp usingOptions:options];
-      return;
-    }
-
-    FIRLogDebug(kFIRLoggerCore, @"I-COR000001", @"Configuring the default app.");
-  } else {
-    // Validate the app name and ensure it hasn't been configured already.
-    NSCharacterSet *nameCharacters = [NSCharacterSet characterSetWithCharactersInString:name];
-
-    if (![[self applicationNameAllowedCharacters] isSupersetOfSet:nameCharacters]) {
-      [NSException raise:kFirebaseCoreErrorDomain
-                  format:@"App name can only contain alphanumeric, "
-                         @"hyphen (-), and underscore (_) characters"];
-    }
-
-    @synchronized(self) {
-      if (sAllApps && sAllApps[name]) {
-        // The app already exists. Handle a duplicate `configure` call and return.
-        [self appWasConfiguredTwice:sAllApps[name] usingOptions:options];
-        return;
-      }
-    }
-
-    FIRLogDebug(kFIRLoggerCore, @"I-COR000002", @"Configuring app named %@", name);
-  }
-
-  @synchronized(self) {
-    FIRApp *app = [[FIRApp alloc] initInstanceWithName:name options:options];
-    if (app.isDefaultApp) {
-      sDefaultApp = app;
-    }
-
-    [FIRApp addAppToAppDictionary:app];
-
-    // The FIRApp instance is ready to go, `sDefaultApp` is assigned, other SDKs are now ready to be
-    // instantiated.
-    [app.container instantiateEagerComponents];
-    [FIRApp sendNotificationsToSDKs:app];
-  }
-}
-
-/// Called when `configure` has been called multiple times for the same app. This can either throw
-/// an exception (most cases) or ignore the duplicate configuration in situations where it's allowed
-/// like an extension.
-+ (void)appWasConfiguredTwice:(FIRApp *)app usingOptions:(FIROptions *)options {
-  // Only extensions should potentially be able to call `configure` more than once.
-  if (![GULAppEnvironmentUtil isAppExtension]) {
-    // Throw an exception since this is now an invalid state.
-    if (app.isDefaultApp) {
-      [NSException raise:kFirebaseCoreErrorDomain
-                  format:@"Default app has already been configured."];
-    } else {
-      [NSException raise:kFirebaseCoreErrorDomain
-                  format:@"App named %@ has already been configured.", app.name];
-    }
-  }
-
-  // In an extension, the entry point could be called multiple times. As long as the options are
-  // identical we should allow multiple `configure` calls.
-  if ([options isEqual:app.options]) {
-    // Everything is identical but the extension's lifecycle triggered `configure` twice.
-    // Ignore duplicate calls and return since everything should still be in a valid state.
-    FIRLogDebug(kFIRLoggerCore, @"I-COR000035",
-                @"Ignoring second `configure` call in an extension.");
-    return;
-  } else {
-    [NSException raise:kFirebaseCoreErrorDomain
-                format:@"App named %@ has already been configured.", app.name];
-  }
-}
-
-+ (FIRApp *)defaultApp {
-  if (sDefaultApp) {
-    return sDefaultApp;
-  }
-  FIRLogError(kFIRLoggerCore, @"I-COR000003",
-              @"The default Firebase app has not yet been "
-              @"configured. Add `[FIRApp configure];` (`FirebaseApp.configure()` in Swift) to your "
-              @"application initialization. Read more: https://goo.gl/ctyzm8.");
-  return nil;
-}
-
-+ (FIRApp *)appNamed:(NSString *)name {
-  @synchronized(self) {
-    if (sAllApps) {
-      FIRApp *app = sAllApps[name];
-      if (app) {
-        return app;
-      }
-    }
-    FIRLogError(kFIRLoggerCore, @"I-COR000004", @"App with name %@ does not exist.", name);
-    return nil;
-  }
-}
-
-+ (NSDictionary *)allApps {
-  @synchronized(self) {
-    if (!sAllApps) {
-      FIRLogError(kFIRLoggerCore, @"I-COR000005", @"No app has been configured yet.");
-    }
-    return [sAllApps copy];
-  }
-}
-
-// Public only for tests
-+ (void)resetApps {
-  @synchronized(self) {
-    sDefaultApp = nil;
-    [sAllApps removeAllObjects];
-    sAllApps = nil;
-    [sLibraryVersions removeAllObjects];
-    sLibraryVersions = nil;
-    sFirebaseUserAgentOnceToken = 0;
-  }
-}
-
-- (void)deleteApp:(FIRAppVoidBoolCallback)completion {
-  @synchronized([self class]) {
-    if (sAllApps && sAllApps[self.name]) {
-      FIRLogDebug(kFIRLoggerCore, @"I-COR000006", @"Deleting app named %@", self.name);
-
-      // Remove all registered libraries from the container to avoid creating new instances.
-      [self.container removeAllComponents];
-      // Remove all cached instances from the container before deleting the app.
-      [self.container removeAllCachedInstances];
-
-      [sAllApps removeObjectForKey:self.name];
-      [self clearDataCollectionSwitchFromUserDefaults];
-      if ([self.name isEqualToString:kFIRDefaultAppName]) {
-        sDefaultApp = nil;
-      }
-      NSDictionary *appInfoDict = @{kFIRAppNameKey : self.name};
-      [[NSNotificationCenter defaultCenter] postNotificationName:kFIRAppDeleteNotification
-                                                          object:[self class]
-                                                        userInfo:appInfoDict];
-      completion(YES);
-    } else {
-      FIRLogError(kFIRLoggerCore, @"I-COR000007", @"App does not exist.");
-      completion(NO);
-    }
-  }
-}
-
-+ (void)addAppToAppDictionary:(FIRApp *)app {
-  if (!sAllApps) {
-    sAllApps = [NSMutableDictionary dictionary];
-  }
-  if ([app configureCore]) {
-    sAllApps[app.name] = app;
-  } else {
-    [NSException raise:kFirebaseCoreErrorDomain
-                format:@"Configuration fails. It may be caused by an invalid GOOGLE_APP_ID in "
-                       @"GoogleService-Info.plist or set in the customized options."];
-  }
-}
-
-- (instancetype)initInstanceWithName:(NSString *)name options:(FIROptions *)options {
-  self = [super init];
-  if (self) {
-    _name = [name copy];
-    _options = [options copy];
-    _options.editingLocked = YES;
-    _isDefaultApp = [name isEqualToString:kFIRDefaultAppName];
-    _container = [[FIRComponentContainer alloc] initWithApp:self];
-  }
-  return self;
-}
-
-- (void)dealloc {
-  [[NSNotificationCenter defaultCenter] removeObserver:self];
-}
-
-- (BOOL)configureCore {
-  [self checkExpectedBundleID];
-  if (![self isAppIDValid]) {
-    return NO;
-  }
-
-  [self logCoreTelemetryIfEnabled];
-
-#if TARGET_OS_IOS
-  // Initialize the Analytics once there is a valid options under default app. Analytics should
-  // always initialize first by itself before the other SDKs.
-  if ([self.name isEqualToString:kFIRDefaultAppName]) {
-    Class firAnalyticsClass = NSClassFromString(@"FIRAnalytics");
-    if (firAnalyticsClass) {
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wundeclared-selector"
-      SEL startWithConfigurationSelector = @selector(startWithConfiguration:options:);
-#pragma clang diagnostic pop
-      if ([firAnalyticsClass respondsToSelector:startWithConfigurationSelector]) {
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
-        [firAnalyticsClass performSelector:startWithConfigurationSelector
-                                withObject:[FIRConfiguration sharedInstance].analyticsConfiguration
-                                withObject:_options];
-#pragma clang diagnostic pop
-      }
-    }
-  }
-#endif
-
-  [self subscribeForAppDidBecomeActiveNotifications];
-
-  return YES;
-}
-
-- (FIROptions *)options {
-  return [_options copy];
-}
-
-- (void)setDataCollectionDefaultEnabled:(BOOL)dataCollectionDefaultEnabled {
-#ifdef DEBUG
-  FIRLogDebug(kFIRLoggerCore, @"I-COR000034", @"Explicitly %@ data collection flag.",
-              dataCollectionDefaultEnabled ? @"enabled" : @"disabled");
-  self.alreadyOutputDataCollectionFlag = YES;
-#endif  // DEBUG
-
-  NSString *key =
-      [NSString stringWithFormat:kFIRGlobalAppDataCollectionEnabledDefaultsKeyFormat, self.name];
-  [[NSUserDefaults standardUserDefaults] setBool:dataCollectionDefaultEnabled forKey:key];
-
-  // Core also controls the FirebaseAnalytics flag, so check if the Analytics flags are set
-  // within FIROptions and change the Analytics value if necessary. Analytics only works with the
-  // default app, so return if this isn't the default app.
-  if (!self.isDefaultApp) {
-    return;
-  }
-
-  // Check if the Analytics flag is explicitly set. If so, no further actions are necessary.
-  if ([self.options isAnalyticsCollectionExplicitlySet]) {
-    return;
-  }
-
-  // The Analytics flag has not been explicitly set, so update with the value being set.
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
-  [[FIRAnalyticsConfiguration sharedInstance]
-      setAnalyticsCollectionEnabled:dataCollectionDefaultEnabled
-                     persistSetting:NO];
-#pragma clang diagnostic pop
-}
-
-- (BOOL)isDataCollectionDefaultEnabled {
-  // Check if it's been manually set before in code, and use that as the higher priority value.
-  NSNumber *defaultsObject = [[self class] readDataCollectionSwitchFromUserDefaultsForApp:self];
-  if (defaultsObject != nil) {
-#ifdef DEBUG
-    if (!self.alreadyOutputDataCollectionFlag) {
-      FIRLogDebug(kFIRLoggerCore, @"I-COR000031", @"Data Collection flag is %@ in user defaults.",
-                  [defaultsObject boolValue] ? @"enabled" : @"disabled");
-      self.alreadyOutputDataCollectionFlag = YES;
-    }
-#endif  // DEBUG
-    return [defaultsObject boolValue];
-  }
-
-  // Read the Info.plist to see if the flag is set. If it's not set, it should default to `YES`.
-  // As per the implementation of `readDataCollectionSwitchFromPlist`, it's a cached value and has
-  // no performance impact calling multiple times.
-  NSNumber *collectionEnabledPlistValue = [[self class] readDataCollectionSwitchFromPlist];
-  if (collectionEnabledPlistValue != nil) {
-#ifdef DEBUG
-    if (!self.alreadyOutputDataCollectionFlag) {
-      FIRLogDebug(kFIRLoggerCore, @"I-COR000032", @"Data Collection flag is %@ in plist.",
-                  [collectionEnabledPlistValue boolValue] ? @"enabled" : @"disabled");
-      self.alreadyOutputDataCollectionFlag = YES;
-    }
-#endif  // DEBUG
-    return [collectionEnabledPlistValue boolValue];
-  }
-
-#ifdef DEBUG
-  if (!self.alreadyOutputDataCollectionFlag) {
-    FIRLogDebug(kFIRLoggerCore, @"I-COR000033", @"Data Collection flag is not set.");
-    self.alreadyOutputDataCollectionFlag = YES;
-  }
-#endif  // DEBUG
-  return YES;
-}
-
-#pragma mark - private
-
-+ (void)sendNotificationsToSDKs:(FIRApp *)app {
-  // TODO: Remove this notification once all SDKs are registered with `FIRCoreConfigurable`.
-  NSNumber *isDefaultApp = [NSNumber numberWithBool:app.isDefaultApp];
-  NSDictionary *appInfoDict = @{
-    kFIRAppNameKey : app.name,
-    kFIRAppIsDefaultAppKey : isDefaultApp,
-    kFIRGoogleAppIDKey : app.options.googleAppID
-  };
-  [[NSNotificationCenter defaultCenter] postNotificationName:kFIRAppReadyToConfigureSDKNotification
-                                                      object:self
-                                                    userInfo:appInfoDict];
-
-  // This is the new way of sending information to SDKs.
-  // TODO: Do we want this on a background thread, maybe?
-  @synchronized(self) {
-    for (Class<FIRLibrary> library in sRegisteredAsConfigurable) {
-      [library configureWithApp:app];
-    }
-  }
-}
-
-+ (NSError *)errorForMissingOptions {
-  NSDictionary *errorDict = @{
-    NSLocalizedDescriptionKey :
-        @"Unable to parse GoogleService-Info.plist in order to configure services.",
-    NSLocalizedRecoverySuggestionErrorKey :
-        @"Check formatting and location of GoogleService-Info.plist."
-  };
-  return [NSError errorWithDomain:kFirebaseCoreErrorDomain
-                             code:FIRErrorCodeInvalidPlistFile
-                         userInfo:errorDict];
-}
-
-+ (NSError *)errorForSubspecConfigurationFailureWithDomain:(NSString *)domain
-                                                 errorCode:(FIRErrorCode)code
-                                                   service:(NSString *)service
-                                                    reason:(NSString *)reason {
-  NSString *description =
-      [NSString stringWithFormat:@"Configuration failed for service %@.", service];
-  NSDictionary *errorDict =
-      @{NSLocalizedDescriptionKey : description, NSLocalizedFailureReasonErrorKey : reason};
-  return [NSError errorWithDomain:domain code:code userInfo:errorDict];
-}
-
-+ (NSError *)errorForInvalidAppID {
-  NSDictionary *errorDict = @{
-    NSLocalizedDescriptionKey : @"Unable to validate Google App ID",
-    NSLocalizedRecoverySuggestionErrorKey :
-        @"Check formatting and location of GoogleService-Info.plist or GoogleAppID set in the "
-        @"customized options."
-  };
-  return [NSError errorWithDomain:kFirebaseCoreErrorDomain
-                             code:FIRErrorCodeInvalidAppID
-                         userInfo:errorDict];
-}
-
-+ (BOOL)isDefaultAppConfigured {
-  return (sDefaultApp != nil);
-}
-
-+ (void)registerLibrary:(nonnull NSString *)name withVersion:(nonnull NSString *)version {
-  // Create the set of characters which aren't allowed, only if this feature is used.
-  NSMutableCharacterSet *allowedSet = [NSMutableCharacterSet alphanumericCharacterSet];
-  [allowedSet addCharactersInString:@"-_."];
-  NSCharacterSet *disallowedSet = [allowedSet invertedSet];
-  // Make sure the library name and version strings do not contain unexpected characters, and
-  // add the name/version pair to the dictionary.
-  if ([name rangeOfCharacterFromSet:disallowedSet].location == NSNotFound &&
-      [version rangeOfCharacterFromSet:disallowedSet].location == NSNotFound) {
-    @synchronized(self) {
-      if (!sLibraryVersions) {
-        sLibraryVersions = [[NSMutableDictionary alloc] init];
-      }
-      sLibraryVersions[name] = version;
-    }
-  } else {
-    FIRLogError(kFIRLoggerCore, @"I-COR000027",
-                @"The library name (%@) or version number (%@) contain invalid characters. "
-                @"Only alphanumeric, dash, underscore and period characters are allowed.",
-                name, version);
-  }
-}
-
-+ (void)registerInternalLibrary:(nonnull Class<FIRLibrary>)library
-                       withName:(nonnull NSString *)name
-                    withVersion:(nonnull NSString *)version {
-  // This is called at +load time, keep the work to a minimum.
-
-  // Ensure the class given conforms to the proper protocol.
-  if (![(Class)library conformsToProtocol:@protocol(FIRLibrary)] ||
-      ![(Class)library respondsToSelector:@selector(componentsToRegister)]) {
-    [NSException raise:NSInvalidArgumentException
-                format:@"Class %@ attempted to register components, but it does not conform to "
-                       @"`FIRLibrary or provide a `componentsToRegister:` method.",
-                       library];
-  }
-
-  [FIRComponentContainer registerAsComponentRegistrant:library];
-  if ([(Class)library respondsToSelector:@selector(configureWithApp:)]) {
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-      sRegisteredAsConfigurable = [[NSMutableArray alloc] init];
-    });
-    @synchronized(self) {
-      [sRegisteredAsConfigurable addObject:library];
-    }
-  }
-  [self registerLibrary:name withVersion:version];
-}
-
-+ (NSString *)firebaseUserAgent {
-  @synchronized(self) {
-    dispatch_once(&sFirebaseUserAgentOnceToken, ^{
-      // Report FirebaseCore version for useragent string
-      [FIRApp registerLibrary:@"fire-ios"
-                  withVersion:[NSString stringWithUTF8String:FIRCoreVersionString]];
-
-      NSDictionary<NSString *, id> *info = [[NSBundle mainBundle] infoDictionary];
-      NSString *xcodeVersion = info[@"DTXcodeBuild"];
-      NSString *sdkVersion = info[@"DTSDKBuild"];
-      if (xcodeVersion) {
-        [FIRApp registerLibrary:@"xcode" withVersion:xcodeVersion];
-      }
-      if (sdkVersion) {
-        [FIRApp registerLibrary:@"apple-sdk" withVersion:sdkVersion];
-      }
-
-      NSString *swiftFlagValue = [self hasSwiftRuntime] ? @"true" : @"false";
-      [FIRApp registerLibrary:@"swift" withVersion:swiftFlagValue];
-
-      [FIRApp registerLibrary:kFIRAppDiagnosticsApplePlatformPrefix
-                  withVersion:[self applePlatform]];
-    });
-
-    NSMutableArray<NSString *> *libraries =
-        [[NSMutableArray<NSString *> alloc] initWithCapacity:sLibraryVersions.count];
-    for (NSString *libraryName in sLibraryVersions) {
-      [libraries addObject:[NSString stringWithFormat:@"%@/%@", libraryName,
-                                                      sLibraryVersions[libraryName]]];
-    }
-    [libraries sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
-    return [libraries componentsJoinedByString:@" "];
-  }
-}
-
-+ (BOOL)hasSwiftRuntime {
-  // The class
-  // [Swift._SwiftObject](https://github.com/apple/swift/blob/5eac3e2818eb340b11232aff83edfbd1c307fa03/stdlib/public/runtime/SwiftObject.h#L35)
-  // is a part of Swift runtime, so it should be present if Swift runtime is available.
-
-  BOOL hasSwiftRuntime =
-      objc_lookUpClass("Swift._SwiftObject") != nil ||
-      // Swift object class name before
-      // https://github.com/apple/swift/commit/9637b4a6e11ddca72f5f6dbe528efc7c92f14d01
-      objc_getClass("_TtCs12_SwiftObject") != nil;
-
-  return hasSwiftRuntime;
-}
-
-+ (NSString *)applePlatform {
-  NSString *applePlatform = @"unknown";
-
-  // When a Catalyst app is run on macOS then both `TARGET_OS_MACCATALYST` and `TARGET_OS_IOS` are
-  // `true`, which means the condition list is order-sensitive.
-#if TARGET_OS_MACCATALYST
-  applePlatform = @"maccatalyst";
-#elif TARGET_OS_IOS
-  applePlatform = @"ios";
-#elif TARGET_OS_TV
-  applePlatform = @"tvos";
-#elif TARGET_OS_OSX
-  applePlatform = @"macos";
-#elif TARGET_OS_WATCH
-  applePlatform = @"watchos";
-#endif
-
-  return applePlatform;
-}
-
-- (void)checkExpectedBundleID {
-  NSArray *bundles = [FIRBundleUtil relevantBundles];
-  NSString *expectedBundleID = [self expectedBundleID];
-  // The checking is only done when the bundle ID is provided in the serviceInfo dictionary for
-  // backward compatibility.
-  if (expectedBundleID != nil && ![FIRBundleUtil hasBundleIdentifierPrefix:expectedBundleID
-                                                                 inBundles:bundles]) {
-    FIRLogError(kFIRLoggerCore, @"I-COR000008",
-                @"The project's Bundle ID is inconsistent with "
-                @"either the Bundle ID in '%@.%@', or the Bundle ID in the options if you are "
-                @"using a customized options. To ensure that everything can be configured "
-                @"correctly, you may need to make the Bundle IDs consistent. To continue with this "
-                @"plist file, you may change your app's bundle identifier to '%@'. Or you can "
-                @"download a new configuration file that matches your bundle identifier from %@ "
-                @"and replace the current one.",
-                kServiceInfoFileName, kServiceInfoFileType, expectedBundleID, kPlistURL);
-  }
-}
-
-#pragma mark - private - App ID Validation
-
-/**
- * Validates the format and fingerprint of the app ID contained in GOOGLE_APP_ID in the plist file.
- * This is the main method for validating app ID.
- *
- * @return YES if the app ID fulfills the expected format and fingerprint, NO otherwise.
- */
-- (BOOL)isAppIDValid {
-  NSString *appID = _options.googleAppID;
-  BOOL isValid = [FIRApp validateAppID:appID];
-  if (!isValid) {
-    NSString *expectedBundleID = [self expectedBundleID];
-    FIRLogError(kFIRLoggerCore, @"I-COR000009",
-                @"The GOOGLE_APP_ID either in the plist file "
-                @"'%@.%@' or the one set in the customized options is invalid. If you are using "
-                @"the plist file, use the iOS version of bundle identifier to download the file, "
-                @"and do not manually edit the GOOGLE_APP_ID. You may change your app's bundle "
-                @"identifier to '%@'. Or you can download a new configuration file that matches "
-                @"your bundle identifier from %@ and replace the current one.",
-                kServiceInfoFileName, kServiceInfoFileType, expectedBundleID, kPlistURL);
-  };
-  return isValid;
-}
-
-+ (BOOL)validateAppID:(NSString *)appID {
-  // Failing validation only occurs when we are sure we are looking at a V2 app ID and it does not
-  // have a valid fingerprint, otherwise we just warn about the potential issue.
-  if (!appID.length) {
-    return NO;
-  }
-
-  NSScanner *stringScanner = [NSScanner scannerWithString:appID];
-  stringScanner.charactersToBeSkipped = nil;
-
-  NSString *appIDVersion;
-  if (![stringScanner scanCharactersFromSet:[NSCharacterSet decimalDigitCharacterSet]
-                                 intoString:&appIDVersion]) {
-    return NO;
-  }
-
-  if (![stringScanner scanString:@":" intoString:NULL]) {
-    // appIDVersion must be separated by ":"
-    return NO;
-  }
-
-  NSArray *knownVersions = @[ @"1" ];
-  if (![knownVersions containsObject:appIDVersion]) {
-    // Permit unknown yet properly formatted app ID versions.
-    FIRLogInfo(kFIRLoggerCore, @"I-COR000010", @"Unknown GOOGLE_APP_ID version: %@", appIDVersion);
-    return YES;
-  }
-
-  if (![self validateAppIDFormat:appID withVersion:appIDVersion]) {
-    return NO;
-  }
-
-  if (![self validateAppIDFingerprint:appID withVersion:appIDVersion]) {
-    return NO;
-  }
-
-  return YES;
-}
-
-+ (NSString *)actualBundleID {
-  return [[NSBundle mainBundle] bundleIdentifier];
-}
-
-/**
- * Validates that the format of the app ID string is what is expected based on the supplied version.
- * The version must end in ":".
- *
- * For v1 app ids the format is expected to be
- * '<version #>:<project number>:ios:<fingerprint of bundle id>'.
- *
- * This method does not verify that the contents of the app id are correct, just that they fulfill
- * the expected format.
- *
- * @param appID Contents of GOOGLE_APP_ID from the plist file.
- * @param version Indicates what version of the app id format this string should be.
- * @return YES if provided string fufills the expected format, NO otherwise.
- */
-+ (BOOL)validateAppIDFormat:(NSString *)appID withVersion:(NSString *)version {
-  if (!appID.length || !version.length) {
-    return NO;
-  }
-
-  NSScanner *stringScanner = [NSScanner scannerWithString:appID];
-  stringScanner.charactersToBeSkipped = nil;
-
-  // Skip version part
-  // '*<version #>*:<project number>:ios:<fingerprint of bundle id>'
-  if (![stringScanner scanString:version intoString:NULL]) {
-    // The version part is missing or mismatched
-    return NO;
-  }
-
-  // Validate version part (see part between '*' symbols below)
-  // '<version #>*:*<project number>:ios:<fingerprint of bundle id>'
-  if (![stringScanner scanString:@":" intoString:NULL]) {
-    // appIDVersion must be separated by ":"
-    return NO;
-  }
-
-  // Validate version part (see part between '*' symbols below)
-  // '<version #>:*<project number>*:ios:<fingerprint of bundle id>'.
-  NSInteger projectNumber = NSNotFound;
-  if (![stringScanner scanInteger:&projectNumber]) {
-    // NO project number found.
-    return NO;
-  }
-
-  // Validate version part (see part between '*' symbols below)
-  // '<version #>:<project number>*:*ios:<fingerprint of bundle id>'.
-  if (![stringScanner scanString:@":" intoString:NULL]) {
-    // The project number must be separated by ":"
-    return NO;
-  }
-
-  // Validate version part (see part between '*' symbols below)
-  // '<version #>:<project number>:*ios*:<fingerprint of bundle id>'.
-  NSString *platform;
-  if (![stringScanner scanUpToString:@":" intoString:&platform]) {
-    return NO;
-  }
-
-  if (![platform isEqualToString:@"ios"]) {
-    // The platform must be @"ios"
-    return NO;
-  }
-
-  // Validate version part (see part between '*' symbols below)
-  // '<version #>:<project number>:ios*:*<fingerprint of bundle id>'.
-  if (![stringScanner scanString:@":" intoString:NULL]) {
-    // The platform must be separated by ":"
-    return NO;
-  }
-
-  // Validate version part (see part between '*' symbols below)
-  // '<version #>:<project number>:ios:*<fingerprint of bundle id>*'.
-  unsigned long long fingerprint = NSNotFound;
-  if (![stringScanner scanHexLongLong:&fingerprint]) {
-    // Fingerprint part is missing
-    return NO;
-  }
-
-  if (!stringScanner.isAtEnd) {
-    // There are not allowed characters in the fingerprint part
-    return NO;
-  }
-
-  return YES;
-}
-
-/**
- * Validates that the fingerprint of the app ID string is what is expected based on the supplied
- * version.
- *
- * Note that the v1 hash algorithm is not permitted on the client and cannot be fully validated.
- *
- * @param appID Contents of GOOGLE_APP_ID from the plist file.
- * @param version Indicates what version of the app id format this string should be.
- * @return YES if provided string fufills the expected fingerprint and the version is known, NO
- *         otherwise.
- */
-+ (BOOL)validateAppIDFingerprint:(NSString *)appID withVersion:(NSString *)version {
-  // Extract the supplied fingerprint from the supplied app ID.
-  // This assumes the app ID format is the same for all known versions below. If the app ID format
-  // changes in future versions, the tokenizing of the app ID format will need to take into account
-  // the version of the app ID.
-  NSArray *components = [appID componentsSeparatedByString:@":"];
-  if (components.count != 4) {
-    return NO;
-  }
-
-  NSString *suppliedFingerprintString = components[3];
-  if (!suppliedFingerprintString.length) {
-    return NO;
-  }
-
-  uint64_t suppliedFingerprint;
-  NSScanner *scanner = [NSScanner scannerWithString:suppliedFingerprintString];
-  if (![scanner scanHexLongLong:&suppliedFingerprint]) {
-    return NO;
-  }
-
-  if ([version isEqual:@"1"]) {
-    // The v1 hash algorithm is not permitted on the client so the actual hash cannot be validated.
-    return YES;
-  }
-
-  // Unknown version.
-  return NO;
-}
-
-- (NSString *)expectedBundleID {
-  return _options.bundleID;
-}
-
-// end App ID validation
-
-#pragma mark - Reading From Plist & User Defaults
-
-/**
- * Clears the data collection switch from the standard NSUserDefaults for easier testing and
- * readability.
- */
-- (void)clearDataCollectionSwitchFromUserDefaults {
-  NSString *key =
-      [NSString stringWithFormat:kFIRGlobalAppDataCollectionEnabledDefaultsKeyFormat, self.name];
-  [[NSUserDefaults standardUserDefaults] removeObjectForKey:key];
-}
-
-/**
- * Reads the data collection switch from the standard NSUserDefaults for easier testing and
- * readability.
- */
-+ (nullable NSNumber *)readDataCollectionSwitchFromUserDefaultsForApp:(FIRApp *)app {
-  // Read the object in user defaults, and only return if it's an NSNumber.
-  NSString *key =
-      [NSString stringWithFormat:kFIRGlobalAppDataCollectionEnabledDefaultsKeyFormat, app.name];
-  id collectionEnabledDefaultsObject = [[NSUserDefaults standardUserDefaults] objectForKey:key];
-  if ([collectionEnabledDefaultsObject isKindOfClass:[NSNumber class]]) {
-    return collectionEnabledDefaultsObject;
-  }
-
-  return nil;
-}
-
-/**
- * Reads the data collection switch from the Info.plist for easier testing and readability. Will
- * only read once from the plist and return the cached value.
- */
-+ (nullable NSNumber *)readDataCollectionSwitchFromPlist {
-  static NSNumber *collectionEnabledPlistObject;
-  static dispatch_once_t onceToken;
-  dispatch_once(&onceToken, ^{
-    // Read the data from the `Info.plist`, only assign it if it's there and an NSNumber.
-    id plistValue = [[NSBundle mainBundle]
-        objectForInfoDictionaryKey:kFIRGlobalAppDataCollectionEnabledPlistKey];
-    if (plistValue && [plistValue isKindOfClass:[NSNumber class]]) {
-      collectionEnabledPlistObject = (NSNumber *)plistValue;
-    }
-  });
-
-  return collectionEnabledPlistObject;
-}
-
-#pragma mark - Sending Logs
-
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wunused-parameter"
-- (void)sendLogsWithServiceName:(NSString *)serviceName
-                        version:(NSString *)version
-                          error:(NSError *)error {
-  // Do nothing. Please remove calls to this method.
-}
-#pragma clang diagnostic pop
-
-#pragma mark - App Life Cycle
-
-- (void)subscribeForAppDidBecomeActiveNotifications {
-#if TARGET_OS_IOS || TARGET_OS_TV
-  NSNotificationName notificationName = UIApplicationDidBecomeActiveNotification;
-#elif TARGET_OS_OSX
-  NSNotificationName notificationName = NSApplicationDidBecomeActiveNotification;
-#endif
-
-#if !TARGET_OS_WATCH
-  [[NSNotificationCenter defaultCenter] addObserver:self
-                                           selector:@selector(appDidBecomeActive:)
-                                               name:notificationName
-                                             object:nil];
-#endif
-}
-
-- (void)appDidBecomeActive:(NSNotification *)notification {
-  [self logCoreTelemetryIfEnabled];
-}
-
-- (void)logCoreTelemetryIfEnabled {
-  if ([self isDataCollectionDefaultEnabled]) {
-    [FIRCoreDiagnosticsConnector logCoreTelemetryWithOptions:_options];
-  }
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRAppAssociationRegistration.m b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRAppAssociationRegistration.m
deleted file mode 100644
index e4125cd..0000000
--- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRAppAssociationRegistration.m
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright 2017 Google
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#import "FirebaseCore/Sources/Private/FIRAppAssociationRegistration.h"
-
-#import <objc/runtime.h>
-
-@implementation FIRAppAssociationRegistration
-
-+ (nullable id)registeredObjectWithHost:(id)host
-                                    key:(NSString *)key
-                          creationBlock:(id _Nullable (^)(void))creationBlock {
-  @synchronized(self) {
-    SEL dictKey = @selector(registeredObjectWithHost:key:creationBlock:);
-    NSMutableDictionary<NSString *, id> *objectsByKey = objc_getAssociatedObject(host, dictKey);
-    if (!objectsByKey) {
-      objectsByKey = [[NSMutableDictionary alloc] init];
-      objc_setAssociatedObject(host, dictKey, objectsByKey, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
-    }
-    id obj = objectsByKey[key];
-    NSValue *creationBlockBeingCalled = [NSValue valueWithPointer:dictKey];
-    if (obj) {
-      if ([creationBlockBeingCalled isEqual:obj]) {
-        [NSException raise:@"Reentering registeredObjectWithHost:key:creationBlock: not allowed"
-                    format:@"host: %@ key: %@", host, key];
-      }
-      return obj;
-    }
-    objectsByKey[key] = creationBlockBeingCalled;
-    obj = creationBlock();
-    objectsByKey[key] = obj;
-    return obj;
-  }
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRBundleUtil.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRBundleUtil.h
deleted file mode 100644
index d9475dd..0000000
--- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRBundleUtil.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-/**
- * This class provides utilities for accessing resources in bundles.
- */
-@interface FIRBundleUtil : NSObject
-
-/**
- * Finds all relevant bundles, starting with [NSBundle mainBundle].
- */
-+ (NSArray *)relevantBundles;
-
-/**
- * Reads the options dictionary from one of the provided bundles.
- *
- * @param resourceName The resource name, e.g. @"GoogleService-Info".
- * @param fileType The file type (extension), e.g. @"plist".
- * @param bundles The bundles to expect, in priority order. See also
- * +[FIRBundleUtil relevantBundles].
- */
-+ (NSString *)optionsDictionaryPathWithResourceName:(NSString *)resourceName
-                                        andFileType:(NSString *)fileType
-                                          inBundles:(NSArray *)bundles;
-
-/**
- * Finds URL schemes defined in all relevant bundles, starting with those from
- * [NSBundle mainBundle].
- */
-+ (NSArray *)relevantURLSchemes;
-
-/**
- * Checks if any of the given bundles have a matching bundle identifier prefix (removing extension
- * suffixes).
- */
-+ (BOOL)hasBundleIdentifierPrefix:(NSString *)bundleIdentifier inBundles:(NSArray *)bundles;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRBundleUtil.m b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRBundleUtil.m
deleted file mode 100644
index b858f14..0000000
--- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRBundleUtil.m
+++ /dev/null
@@ -1,75 +0,0 @@
-// Copyright 2017 Google
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#import "FirebaseCore/Sources/FIRBundleUtil.h"
-
-#import <GoogleUtilities/GULAppEnvironmentUtil.h>
-
-@implementation FIRBundleUtil
-
-+ (NSArray *)relevantBundles {
-  return @[ [NSBundle mainBundle], [NSBundle bundleForClass:[self class]] ];
-}
-
-+ (NSString *)optionsDictionaryPathWithResourceName:(NSString *)resourceName
-                                        andFileType:(NSString *)fileType
-                                          inBundles:(NSArray *)bundles {
-  // Loop through all bundles to find the config dict.
-  for (NSBundle *bundle in bundles) {
-    NSString *path = [bundle pathForResource:resourceName ofType:fileType];
-    // Use the first one we find.
-    if (path) {
-      return path;
-    }
-  }
-  return nil;
-}
-
-+ (NSArray *)relevantURLSchemes {
-  NSMutableArray *result = [[NSMutableArray alloc] init];
-  for (NSBundle *bundle in [[self class] relevantBundles]) {
-    NSArray *urlTypes = [bundle objectForInfoDictionaryKey:@"CFBundleURLTypes"];
-    for (NSDictionary *urlType in urlTypes) {
-      [result addObjectsFromArray:urlType[@"CFBundleURLSchemes"]];
-    }
-  }
-  return result;
-}
-
-+ (BOOL)hasBundleIdentifierPrefix:(NSString *)bundleIdentifier inBundles:(NSArray *)bundles {
-  for (NSBundle *bundle in bundles) {
-    // This allows app extensions that have the app's bundle as their prefix to pass this test.
-    NSString *applicationBundleIdentifier =
-        [GULAppEnvironmentUtil isAppExtension]
-            ? [self bundleIdentifierByRemovingLastPartFrom:bundle.bundleIdentifier]
-            : bundle.bundleIdentifier;
-
-    if ([applicationBundleIdentifier isEqualToString:bundleIdentifier]) {
-      return YES;
-    }
-  }
-  return NO;
-}
-
-+ (NSString *)bundleIdentifierByRemovingLastPartFrom:(NSString *)bundleIdentifier {
-  NSString *bundleIDComponentsSeparator = @".";
-
-  NSMutableArray<NSString *> *bundleIDComponents =
-      [[bundleIdentifier componentsSeparatedByString:bundleIDComponentsSeparator] mutableCopy];
-  [bundleIDComponents removeLastObject];
-
-  return [bundleIDComponents componentsJoinedByString:bundleIDComponentsSeparator];
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRComponent.m b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRComponent.m
deleted file mode 100644
index 9c1fbed..0000000
--- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRComponent.m
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright 2018 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FirebaseCore/Sources/Private/FIRComponent.h"
-
-#import "FirebaseCore/Sources/Private/FIRComponentContainer.h"
-#import "FirebaseCore/Sources/Private/FIRDependency.h"
-
-@interface FIRComponent ()
-
-- (instancetype)initWithProtocol:(Protocol *)protocol
-             instantiationTiming:(FIRInstantiationTiming)instantiationTiming
-                    dependencies:(NSArray<FIRDependency *> *)dependencies
-                   creationBlock:(FIRComponentCreationBlock)creationBlock;
-
-@end
-
-@implementation FIRComponent
-
-+ (instancetype)componentWithProtocol:(Protocol *)protocol
-                        creationBlock:(FIRComponentCreationBlock)creationBlock {
-  return [[FIRComponent alloc] initWithProtocol:protocol
-                            instantiationTiming:FIRInstantiationTimingLazy
-                                   dependencies:@[]
-                                  creationBlock:creationBlock];
-}
-
-+ (instancetype)componentWithProtocol:(Protocol *)protocol
-                  instantiationTiming:(FIRInstantiationTiming)instantiationTiming
-                         dependencies:(NSArray<FIRDependency *> *)dependencies
-                        creationBlock:(FIRComponentCreationBlock)creationBlock {
-  return [[FIRComponent alloc] initWithProtocol:protocol
-                            instantiationTiming:instantiationTiming
-                                   dependencies:dependencies
-                                  creationBlock:creationBlock];
-}
-
-- (instancetype)initWithProtocol:(Protocol *)protocol
-             instantiationTiming:(FIRInstantiationTiming)instantiationTiming
-                    dependencies:(NSArray<FIRDependency *> *)dependencies
-                   creationBlock:(FIRComponentCreationBlock)creationBlock {
-  self = [super init];
-  if (self) {
-    _protocol = protocol;
-    _instantiationTiming = instantiationTiming;
-    _dependencies = [dependencies copy];
-    _creationBlock = creationBlock;
-  }
-  return self;
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRComponentContainer.m b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRComponentContainer.m
deleted file mode 100644
index bbe8878..0000000
--- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRComponentContainer.m
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * Copyright 2018 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FirebaseCore/Sources/Private/FIRComponentContainer.h"
-
-#import "FirebaseCore/Sources/Private/FIRAppInternal.h"
-#import "FirebaseCore/Sources/Private/FIRComponent.h"
-#import "FirebaseCore/Sources/Private/FIRLibrary.h"
-#import "FirebaseCore/Sources/Private/FIRLogger.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface FIRComponentContainer ()
-
-/// The dictionary of components that are registered for a particular app. The key is an `NSString`
-/// of the protocol.
-@property(nonatomic, strong) NSMutableDictionary<NSString *, FIRComponentCreationBlock> *components;
-
-/// Cached instances of components that requested to be cached.
-@property(nonatomic, strong) NSMutableDictionary<NSString *, id> *cachedInstances;
-
-/// Protocols of components that have requested to be eagerly instantiated.
-@property(nonatomic, strong, nullable) NSMutableArray<Protocol *> *eagerProtocolsToInstantiate;
-
-@end
-
-@implementation FIRComponentContainer
-
-// Collection of all classes that register to provide components.
-static NSMutableSet<Class> *sFIRComponentRegistrants;
-
-#pragma mark - Public Registration
-
-+ (void)registerAsComponentRegistrant:(Class<FIRLibrary>)klass {
-  static dispatch_once_t onceToken;
-  dispatch_once(&onceToken, ^{
-    sFIRComponentRegistrants = [[NSMutableSet<Class> alloc] init];
-  });
-
-  [self registerAsComponentRegistrant:klass inSet:sFIRComponentRegistrants];
-}
-
-+ (void)registerAsComponentRegistrant:(Class<FIRLibrary>)klass
-                                inSet:(NSMutableSet<Class> *)allRegistrants {
-  [allRegistrants addObject:klass];
-}
-
-#pragma mark - Internal Initialization
-
-- (instancetype)initWithApp:(FIRApp *)app {
-  return [self initWithApp:app registrants:sFIRComponentRegistrants];
-}
-
-- (instancetype)initWithApp:(FIRApp *)app registrants:(NSMutableSet<Class> *)allRegistrants {
-  self = [super init];
-  if (self) {
-    _app = app;
-    _cachedInstances = [NSMutableDictionary<NSString *, id> dictionary];
-    _components = [NSMutableDictionary<NSString *, FIRComponentCreationBlock> dictionary];
-
-    [self populateComponentsFromRegisteredClasses:allRegistrants forApp:app];
-  }
-  return self;
-}
-
-- (void)populateComponentsFromRegisteredClasses:(NSSet<Class> *)classes forApp:(FIRApp *)app {
-  // Keep track of any components that need to eagerly instantiate after all components are added.
-  self.eagerProtocolsToInstantiate = [[NSMutableArray alloc] init];
-
-  // Loop through the verified component registrants and populate the components array.
-  for (Class<FIRLibrary> klass in classes) {
-    // Loop through all the components being registered and store them as appropriate.
-    // Classes which do not provide functionality should use a dummy FIRComponentRegistrant
-    // protocol.
-    for (FIRComponent *component in [klass componentsToRegister]) {
-      // Check if the component has been registered before, and error out if so.
-      NSString *protocolName = NSStringFromProtocol(component.protocol);
-      if (self.components[protocolName]) {
-        FIRLogError(kFIRLoggerCore, @"I-COR000029",
-                    @"Attempted to register protocol %@, but it already has an implementation.",
-                    protocolName);
-        continue;
-      }
-
-      // Store the creation block for later usage.
-      self.components[protocolName] = component.creationBlock;
-
-      // Queue any protocols that should be eagerly instantiated. Don't instantiate them yet
-      // because they could depend on other components that haven't been added to the components
-      // array yet.
-      BOOL shouldInstantiateEager =
-          (component.instantiationTiming == FIRInstantiationTimingAlwaysEager);
-      BOOL shouldInstantiateDefaultEager =
-          (component.instantiationTiming == FIRInstantiationTimingEagerInDefaultApp &&
-           [app isDefaultApp]);
-      if (shouldInstantiateEager || shouldInstantiateDefaultEager) {
-        [self.eagerProtocolsToInstantiate addObject:component.protocol];
-      }
-    }
-  }
-}
-
-#pragma mark - Instance Creation
-
-- (void)instantiateEagerComponents {
-  // After all components are registered, instantiate the ones that are requesting eager
-  // instantiation.
-  @synchronized(self) {
-    for (Protocol *protocol in self.eagerProtocolsToInstantiate) {
-      // Get an instance for the protocol, which will instantiate it since it couldn't have been
-      // cached yet. Ignore the instance coming back since we don't need it.
-      __unused id unusedInstance = [self instanceForProtocol:protocol];
-    }
-
-    // All eager instantiation is complete, clear the stored property now.
-    self.eagerProtocolsToInstantiate = nil;
-  }
-}
-
-/// Instantiate an instance of a class that conforms to the specified protocol.
-/// This will:
-///   - Call the block to create an instance if possible,
-///   - Validate that the instance returned conforms to the protocol it claims to,
-///   - Cache the instance if the block requests it
-///
-/// Note that this method assumes the caller already has @sychronized on self.
-- (nullable id)instantiateInstanceForProtocol:(Protocol *)protocol
-                                    withBlock:(FIRComponentCreationBlock)creationBlock {
-  if (!creationBlock) {
-    return nil;
-  }
-
-  // Create an instance using the creation block.
-  BOOL shouldCache = NO;
-  id instance = creationBlock(self, &shouldCache);
-  if (!instance) {
-    return nil;
-  }
-
-  // An instance was created, validate that it conforms to the protocol it claims to.
-  NSString *protocolName = NSStringFromProtocol(protocol);
-  if (![instance conformsToProtocol:protocol]) {
-    FIRLogError(kFIRLoggerCore, @"I-COR000030",
-                @"An instance conforming to %@ was requested, but the instance provided does not "
-                @"conform to the protocol",
-                protocolName);
-  }
-
-  // The instance is ready to be returned, but check if it should be cached first before returning.
-  if (shouldCache) {
-    self.cachedInstances[protocolName] = instance;
-  }
-
-  return instance;
-}
-
-#pragma mark - Internal Retrieval
-
-- (nullable id)instanceForProtocol:(Protocol *)protocol {
-  // Check if there is a cached instance, and return it if so.
-  NSString *protocolName = NSStringFromProtocol(protocol);
-
-  id cachedInstance;
-  @synchronized(self) {
-    cachedInstance = self.cachedInstances[protocolName];
-    if (!cachedInstance) {
-      // Use the creation block to instantiate an instance and return it.
-      FIRComponentCreationBlock creationBlock = self.components[protocolName];
-      cachedInstance = [self instantiateInstanceForProtocol:protocol withBlock:creationBlock];
-    }
-  }
-  return cachedInstance;
-}
-
-#pragma mark - Lifecycle
-
-- (void)removeAllCachedInstances {
-  @synchronized(self) {
-    // Loop through the cache and notify each instance that is a maintainer to clean up after
-    // itself.
-    for (id instance in self.cachedInstances.allValues) {
-      if ([instance conformsToProtocol:@protocol(FIRComponentLifecycleMaintainer)] &&
-          [instance respondsToSelector:@selector(appWillBeDeleted:)]) {
-        [instance appWillBeDeleted:self.app];
-      }
-    }
-
-    // Empty the cache.
-    [self.cachedInstances removeAllObjects];
-  }
-}
-
-- (void)removeAllComponents {
-  @synchronized(self) {
-    [self.components removeAllObjects];
-  }
-}
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRComponentType.m b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRComponentType.m
deleted file mode 100644
index 6410f2e..0000000
--- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRComponentType.m
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright 2018 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FirebaseCore/Sources/Private/FIRComponentType.h"
-
-#import "FirebaseCore/Sources/Private/FIRComponentContainerInternal.h"
-
-@implementation FIRComponentType
-
-+ (id)instanceForProtocol:(Protocol *)protocol inContainer:(FIRComponentContainer *)container {
-  // Forward the call to the container.
-  return [container instanceForProtocol:protocol];
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRConfiguration.m b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRConfiguration.m
deleted file mode 100644
index a1c9f4a..0000000
--- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRConfiguration.m
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2017 Google
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#import "FirebaseCore/Sources/Private/FIRConfigurationInternal.h"
-
-#import "FirebaseCore/Sources/Private/FIRAnalyticsConfiguration.h"
-
-extern void FIRSetLoggerLevel(FIRLoggerLevel loggerLevel);
-
-@implementation FIRConfiguration
-
-+ (instancetype)sharedInstance {
-  static FIRConfiguration *sharedInstance = nil;
-  static dispatch_once_t onceToken;
-  dispatch_once(&onceToken, ^{
-    sharedInstance = [[FIRConfiguration alloc] init];
-  });
-  return sharedInstance;
-}
-
-- (instancetype)init {
-  self = [super init];
-  if (self) {
-    _analyticsConfiguration = [FIRAnalyticsConfiguration sharedInstance];
-  }
-  return self;
-}
-
-- (void)setLoggerLevel:(FIRLoggerLevel)loggerLevel {
-  NSAssert(loggerLevel <= FIRLoggerLevelMax && loggerLevel >= FIRLoggerLevelMin,
-           @"Invalid logger level, %ld", (long)loggerLevel);
-  FIRSetLoggerLevel(loggerLevel);
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRCoreDiagnosticsConnector.m b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRCoreDiagnosticsConnector.m
deleted file mode 100644
index 4981ca1..0000000
--- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRCoreDiagnosticsConnector.m
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FirebaseCore/Sources/Private/FIRCoreDiagnosticsConnector.h"
-
-#import <FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsInterop.h>
-
-#import <FirebaseCore/FIROptions.h>
-
-#import "FirebaseCore/Sources/Private/FIRAppInternal.h"
-#import "FirebaseCore/Sources/Private/FIRDiagnosticsData.h"
-#import "FirebaseCore/Sources/Private/FIROptionsInternal.h"
-
-// Define the interop class symbol declared as an extern in FIRCoreDiagnosticsInterop.
-Class<FIRCoreDiagnosticsInterop> FIRCoreDiagnosticsImplementation;
-
-@implementation FIRCoreDiagnosticsConnector
-
-+ (void)initialize {
-  if (!FIRCoreDiagnosticsImplementation) {
-    FIRCoreDiagnosticsImplementation = NSClassFromString(@"FIRCoreDiagnostics");
-    if (FIRCoreDiagnosticsImplementation) {
-      NSAssert([FIRCoreDiagnosticsImplementation
-                   conformsToProtocol:@protocol(FIRCoreDiagnosticsInterop)],
-               @"If FIRCoreDiagnostics is implemented, it must conform to the interop protocol.");
-      NSAssert(
-          [FIRCoreDiagnosticsImplementation respondsToSelector:@selector(sendDiagnosticsData:)],
-          @"If FIRCoreDiagnostics is implemented, it must implement +sendDiagnosticsData.");
-    }
-  }
-}
-
-+ (void)logCoreTelemetryWithOptions:(FIROptions *)options {
-  if (FIRCoreDiagnosticsImplementation) {
-    FIRDiagnosticsData *diagnosticsData = [[FIRDiagnosticsData alloc] init];
-    [diagnosticsData insertValue:@(YES) forKey:kFIRCDIsDataCollectionDefaultEnabledKey];
-    [diagnosticsData insertValue:[FIRApp firebaseUserAgent] forKey:kFIRCDFirebaseUserAgentKey];
-    [diagnosticsData insertValue:@(FIRConfigTypeCore) forKey:kFIRCDConfigurationTypeKey];
-    [diagnosticsData insertValue:options.googleAppID forKey:kFIRCDGoogleAppIDKey];
-    [diagnosticsData insertValue:options.bundleID forKey:kFIRCDBundleIDKey];
-    [diagnosticsData insertValue:@(options.usingOptionsFromDefaultPlist)
-                          forKey:kFIRCDUsingOptionsFromDefaultPlistKey];
-    [diagnosticsData insertValue:options.libraryVersionID forKey:kFIRCDLibraryVersionIDKey];
-    [FIRCoreDiagnosticsImplementation sendDiagnosticsData:diagnosticsData];
-  }
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRDependency.m b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRDependency.m
deleted file mode 100644
index e1e2578..0000000
--- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRDependency.m
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2018 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FirebaseCore/Sources/Private/FIRDependency.h"
-
-@interface FIRDependency ()
-
-- (instancetype)initWithProtocol:(Protocol *)protocol isRequired:(BOOL)required;
-
-@end
-
-@implementation FIRDependency
-
-+ (instancetype)dependencyWithProtocol:(Protocol *)protocol {
-  return [[self alloc] initWithProtocol:protocol isRequired:YES];
-}
-
-+ (instancetype)dependencyWithProtocol:(Protocol *)protocol isRequired:(BOOL)required {
-  return [[self alloc] initWithProtocol:protocol isRequired:required];
-}
-
-- (instancetype)initWithProtocol:(Protocol *)protocol isRequired:(BOOL)required {
-  self = [super init];
-  if (self) {
-    _protocol = protocol;
-    _isRequired = required;
-  }
-  return self;
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRDiagnosticsData.m b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRDiagnosticsData.m
deleted file mode 100644
index bbe0561..0000000
--- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRDiagnosticsData.m
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FirebaseCore/Sources/Private/FIRDiagnosticsData.h"
-
-#import <FirebaseCore/FIRApp.h>
-
-#import "FirebaseCore/Sources/Private/FIRAppInternal.h"
-#import "FirebaseCore/Sources/Private/FIROptionsInternal.h"
-
-@implementation FIRDiagnosticsData {
-  /** Backing ivar for the diagnosticObjects property. */
-  NSMutableDictionary<NSString *, id> *_diagnosticObjects;
-}
-
-- (instancetype)init {
-  self = [super init];
-  if (self) {
-    _diagnosticObjects = [[NSMutableDictionary alloc] init];
-  }
-  return self;
-}
-
-- (void)insertValue:(nullable id)value forKey:(NSString *)key {
-  if (key) {
-    _diagnosticObjects[key] = value;
-  }
-}
-
-#pragma mark - FIRCoreDiagnosticsData
-
-- (NSDictionary<NSString *, id> *)diagnosticObjects {
-  if (!_diagnosticObjects[kFIRCDllAppsCountKey]) {
-    _diagnosticObjects[kFIRCDllAppsCountKey] = @([FIRApp allApps].count);
-  }
-  if (!_diagnosticObjects[kFIRCDIsDataCollectionDefaultEnabledKey]) {
-    _diagnosticObjects[kFIRCDIsDataCollectionDefaultEnabledKey] =
-        @([[FIRApp defaultApp] isDataCollectionDefaultEnabled]);
-  }
-  if (!_diagnosticObjects[kFIRCDFirebaseUserAgentKey]) {
-    _diagnosticObjects[kFIRCDFirebaseUserAgentKey] = [FIRApp firebaseUserAgent];
-  }
-  return _diagnosticObjects;
-}
-
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wunused-parameter"
-- (void)setDiagnosticObjects:(NSDictionary<NSString *, id> *)diagnosticObjects {
-  NSAssert(NO, @"Please use -insertValue:forKey:");
-}
-#pragma clang diagnostic pop
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRErrors.m b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRErrors.m
deleted file mode 100644
index 104eeb8..0000000
--- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRErrors.m
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright 2017 Google
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#import "FirebaseCore/Sources/Private/FIRErrors.h"
-
-NSString *const kFirebaseErrorDomain = @"com.firebase";
-NSString *const kFirebaseConfigErrorDomain = @"com.firebase.config";
-NSString *const kFirebaseCoreErrorDomain = @"com.firebase.core";
-NSString *const kFirebasePerfErrorDomain = @"com.firebase.perf";
-NSString *const kFirebaseStorageErrorDomain = @"com.firebase.storage";
diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRHeartbeatInfo.m b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRHeartbeatInfo.m
deleted file mode 100644
index 277b0f7..0000000
--- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRHeartbeatInfo.m
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright 2019 Google
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#import "FirebaseCore/Sources/Private/FIRHeartbeatInfo.h"
-#import <GoogleUtilities/GULHeartbeatDateStorage.h>
-#import <GoogleUtilities/GULLogger.h>
-
-const static long secondsInDay = 86400;
-@implementation FIRHeartbeatInfo : NSObject
-
-/** Updates the storage with the heartbeat information corresponding to this tag.
- * @param heartbeatTag Tag which could either be sdk specific tag or the global tag.
- * @return Boolean representing whether the heartbeat needs to be sent for this tag or not.
- */
-+ (BOOL)updateIfNeededHeartbeatDateForTag:(NSString *)heartbeatTag {
-  @synchronized(self) {
-    NSString *const kHeartbeatStorageFile = @"HEARTBEAT_INFO_STORAGE";
-    GULHeartbeatDateStorage *dataStorage =
-        [[GULHeartbeatDateStorage alloc] initWithFileName:kHeartbeatStorageFile];
-    NSDate *heartbeatTime = [dataStorage heartbeatDateForTag:heartbeatTag];
-    NSDate *currentDate = [NSDate date];
-    if (heartbeatTime != nil) {
-      NSTimeInterval secondsBetween = [currentDate timeIntervalSinceDate:heartbeatTime];
-      if (secondsBetween < secondsInDay) {
-        return false;
-      }
-    }
-    return [dataStorage setHearbeatDate:currentDate forTag:heartbeatTag];
-  }
-}
-
-+ (FIRHeartbeatInfoCode)heartbeatCodeForTag:(NSString *)heartbeatTag {
-  NSString *globalTag = @"GLOBAL";
-  BOOL isSdkHeartbeatNeeded = [FIRHeartbeatInfo updateIfNeededHeartbeatDateForTag:heartbeatTag];
-  BOOL isGlobalHeartbeatNeeded = [FIRHeartbeatInfo updateIfNeededHeartbeatDateForTag:globalTag];
-  if (!isSdkHeartbeatNeeded && !isGlobalHeartbeatNeeded) {
-    // Both sdk and global heartbeat not needed.
-    return FIRHeartbeatInfoCodeNone;
-  } else if (isSdkHeartbeatNeeded && !isGlobalHeartbeatNeeded) {
-    // Only SDK heartbeat needed.
-    return FIRHeartbeatInfoCodeSDK;
-  } else if (!isSdkHeartbeatNeeded && isGlobalHeartbeatNeeded) {
-    // Only global heartbeat needed.
-    return FIRHeartbeatInfoCodeGlobal;
-  } else {
-    // Both sdk and global heartbeat are needed.
-    return FIRHeartbeatInfoCodeCombined;
-  }
-}
-@end
diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRLogger.m b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRLogger.m
deleted file mode 100644
index ba2ee1f..0000000
--- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRLogger.m
+++ /dev/null
@@ -1,179 +0,0 @@
-// Copyright 2017 Google
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#import "FirebaseCore/Sources/Private/FIRLogger.h"
-
-#import <FirebaseCore/FIRLoggerLevel.h>
-#import <GoogleUtilities/GULAppEnvironmentUtil.h>
-#import <GoogleUtilities/GULLogger.h>
-
-#import "FirebaseCore/Sources/FIRVersion.h"
-
-FIRLoggerService kFIRLoggerCore = @"[Firebase/Core]";
-
-// All the FIRLoggerService definitions should be migrated to clients. Do not add new ones!
-FIRLoggerService kFIRLoggerABTesting = @"[Firebase/ABTesting]";
-FIRLoggerService kFIRLoggerAdMob = @"[Firebase/AdMob]";
-FIRLoggerService kFIRLoggerAnalytics = @"[Firebase/Analytics]";
-FIRLoggerService kFIRLoggerAuth = @"[Firebase/Auth]";
-FIRLoggerService kFIRLoggerCrash = @"[Firebase/Crash]";
-FIRLoggerService kFIRLoggerMLKit = @"[Firebase/MLKit]";
-FIRLoggerService kFIRLoggerPerf = @"[Firebase/Performance]";
-FIRLoggerService kFIRLoggerRemoteConfig = @"[Firebase/RemoteConfig]";
-
-/// Arguments passed on launch.
-NSString *const kFIRDisableDebugModeApplicationArgument = @"-FIRDebugDisabled";
-NSString *const kFIREnableDebugModeApplicationArgument = @"-FIRDebugEnabled";
-NSString *const kFIRLoggerForceSDTERRApplicationArgument = @"-FIRLoggerForceSTDERR";
-
-/// Key for the debug mode bit in NSUserDefaults.
-NSString *const kFIRPersistedDebugModeKey = @"/google/firebase/debug_mode";
-
-/// NSUserDefaults that should be used to store and read variables. If nil, `standardUserDefaults`
-/// will be used.
-static NSUserDefaults *sFIRLoggerUserDefaults;
-
-static dispatch_once_t sFIRLoggerOnceToken;
-
-// The sFIRAnalyticsDebugMode flag is here to support the -FIRDebugEnabled/-FIRDebugDisabled
-// flags used by Analytics. Users who use those flags expect Analytics to log verbosely,
-// while the rest of Firebase logs at the default level. This flag is introduced to support
-// that behavior.
-static BOOL sFIRAnalyticsDebugMode;
-
-#ifdef DEBUG
-/// The regex pattern for the message code.
-static NSString *const kMessageCodePattern = @"^I-[A-Z]{3}[0-9]{6}$";
-static NSRegularExpression *sMessageCodeRegex;
-#endif
-
-void FIRLoggerInitializeASL() {
-  dispatch_once(&sFIRLoggerOnceToken, ^{
-    // Register Firebase Version with GULLogger.
-    GULLoggerRegisterVersion(FIRVersionString);
-
-    // Override the aslOptions to ASL_OPT_STDERR if the override argument is passed in.
-    NSArray *arguments = [NSProcessInfo processInfo].arguments;
-    BOOL overrideSTDERR = [arguments containsObject:kFIRLoggerForceSDTERRApplicationArgument];
-
-    // Use the standard NSUserDefaults if it hasn't been explicitly set.
-    if (sFIRLoggerUserDefaults == nil) {
-      sFIRLoggerUserDefaults = [NSUserDefaults standardUserDefaults];
-    }
-
-    BOOL forceDebugMode = NO;
-    BOOL debugMode = [sFIRLoggerUserDefaults boolForKey:kFIRPersistedDebugModeKey];
-    if ([arguments containsObject:kFIRDisableDebugModeApplicationArgument]) {  // Default mode
-      [sFIRLoggerUserDefaults removeObjectForKey:kFIRPersistedDebugModeKey];
-    } else if ([arguments containsObject:kFIREnableDebugModeApplicationArgument] ||
-               debugMode) {  // Debug mode
-      [sFIRLoggerUserDefaults setBool:YES forKey:kFIRPersistedDebugModeKey];
-      forceDebugMode = YES;
-    }
-    GULLoggerInitializeASL();
-    if (overrideSTDERR) {
-      GULLoggerEnableSTDERR();
-    }
-    if (forceDebugMode) {
-      GULLoggerForceDebug();
-    }
-  });
-}
-
-__attribute__((no_sanitize("thread"))) void FIRSetAnalyticsDebugMode(BOOL analyticsDebugMode) {
-  sFIRAnalyticsDebugMode = analyticsDebugMode;
-}
-
-void FIRSetLoggerLevel(FIRLoggerLevel loggerLevel) {
-  FIRLoggerInitializeASL();
-  GULSetLoggerLevel((GULLoggerLevel)loggerLevel);
-}
-
-#ifdef DEBUG
-void FIRResetLogger() {
-  extern void GULResetLogger(void);
-  sFIRLoggerOnceToken = 0;
-  [sFIRLoggerUserDefaults removeObjectForKey:kFIRPersistedDebugModeKey];
-  sFIRLoggerUserDefaults = nil;
-  GULResetLogger();
-}
-
-void FIRSetLoggerUserDefaults(NSUserDefaults *defaults) {
-  sFIRLoggerUserDefaults = defaults;
-}
-#endif
-
-/**
- * Check if the level is high enough to be loggable.
- *
- * Analytics can override the log level with an intentional race condition.
- * Add the attribute to get a clean thread sanitizer run.
- */
-__attribute__((no_sanitize("thread"))) BOOL FIRIsLoggableLevel(FIRLoggerLevel loggerLevel,
-                                                               BOOL analyticsComponent) {
-  FIRLoggerInitializeASL();
-  if (sFIRAnalyticsDebugMode && analyticsComponent) {
-    return YES;
-  }
-  return GULIsLoggableLevel((GULLoggerLevel)loggerLevel);
-}
-
-void FIRLogBasic(FIRLoggerLevel level,
-                 FIRLoggerService service,
-                 NSString *messageCode,
-                 NSString *message,
-                 va_list args_ptr) {
-  FIRLoggerInitializeASL();
-  GULLogBasic((GULLoggerLevel)level, service,
-              sFIRAnalyticsDebugMode && [kFIRLoggerAnalytics isEqualToString:service], messageCode,
-              message, args_ptr);
-}
-
-/**
- * Generates the logging functions using macros.
- *
- * Calling FIRLogError(kFIRLoggerCore, @"I-COR000001", @"Configure %@ failed.", @"blah") shows:
- * yyyy-mm-dd hh:mm:ss.SSS sender[PID] <Error> [Firebase/Core][I-COR000001] Configure blah failed.
- * Calling FIRLogDebug(kFIRLoggerCore, @"I-COR000001", @"Configure succeed.") shows:
- * yyyy-mm-dd hh:mm:ss.SSS sender[PID] <Debug> [Firebase/Core][I-COR000001] Configure succeed.
- */
-#define FIR_LOGGING_FUNCTION(level)                                                             \
-  void FIRLog##level(FIRLoggerService service, NSString *messageCode, NSString *message, ...) { \
-    va_list args_ptr;                                                                           \
-    va_start(args_ptr, message);                                                                \
-    FIRLogBasic(FIRLoggerLevel##level, service, messageCode, message, args_ptr);                \
-    va_end(args_ptr);                                                                           \
-  }
-
-FIR_LOGGING_FUNCTION(Error)
-FIR_LOGGING_FUNCTION(Warning)
-FIR_LOGGING_FUNCTION(Notice)
-FIR_LOGGING_FUNCTION(Info)
-FIR_LOGGING_FUNCTION(Debug)
-
-#undef FIR_MAKE_LOGGER
-
-#pragma mark - FIRLoggerWrapper
-
-@implementation FIRLoggerWrapper
-
-+ (void)logWithLevel:(FIRLoggerLevel)level
-         withService:(FIRLoggerService)service
-            withCode:(NSString *)messageCode
-         withMessage:(NSString *)message
-            withArgs:(va_list)args {
-  FIRLogBasic(level, service, messageCode, message, args);
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIROptions.m b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIROptions.m
deleted file mode 100644
index d185330..0000000
--- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIROptions.m
+++ /dev/null
@@ -1,490 +0,0 @@
-// Copyright 2017 Google
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#import "FirebaseCore/Sources/FIRBundleUtil.h"
-#import "FirebaseCore/Sources/FIRVersion.h"
-#import "FirebaseCore/Sources/Private/FIRAppInternal.h"
-#import "FirebaseCore/Sources/Private/FIRLogger.h"
-#import "FirebaseCore/Sources/Private/FIROptionsInternal.h"
-
-// Keys for the strings in the plist file.
-NSString *const kFIRAPIKey = @"API_KEY";
-NSString *const kFIRTrackingID = @"TRACKING_ID";
-NSString *const kFIRGoogleAppID = @"GOOGLE_APP_ID";
-NSString *const kFIRClientID = @"CLIENT_ID";
-NSString *const kFIRGCMSenderID = @"GCM_SENDER_ID";
-NSString *const kFIRAndroidClientID = @"ANDROID_CLIENT_ID";
-NSString *const kFIRDatabaseURL = @"DATABASE_URL";
-NSString *const kFIRStorageBucket = @"STORAGE_BUCKET";
-// The key to locate the expected bundle identifier in the plist file.
-NSString *const kFIRBundleID = @"BUNDLE_ID";
-// The key to locate the project identifier in the plist file.
-NSString *const kFIRProjectID = @"PROJECT_ID";
-
-NSString *const kFIRIsMeasurementEnabled = @"IS_MEASUREMENT_ENABLED";
-NSString *const kFIRIsAnalyticsCollectionEnabled = @"FIREBASE_ANALYTICS_COLLECTION_ENABLED";
-NSString *const kFIRIsAnalyticsCollectionDeactivated = @"FIREBASE_ANALYTICS_COLLECTION_DEACTIVATED";
-
-NSString *const kFIRIsAnalyticsEnabled = @"IS_ANALYTICS_ENABLED";
-NSString *const kFIRIsSignInEnabled = @"IS_SIGNIN_ENABLED";
-
-// Library version ID formatted like:
-// @"5"     // Major version (one or more digits)
-// @"04"    // Minor version (exactly 2 digits)
-// @"01"    // Build number (exactly 2 digits)
-// @"000";  // Fixed "000"
-NSString *kFIRLibraryVersionID;
-
-// Plist file name.
-NSString *const kServiceInfoFileName = @"GoogleService-Info";
-// Plist file type.
-NSString *const kServiceInfoFileType = @"plist";
-
-// Exception raised from attempting to modify a FIROptions after it's been copied to a FIRApp.
-NSString *const kFIRExceptionBadModification =
-    @"Attempted to modify options after it's set on FIRApp. Please modify all properties before "
-    @"initializing FIRApp.";
-
-@interface FIROptions ()
-
-/**
- * This property maintains the actual configuration key-value pairs.
- */
-@property(nonatomic, readwrite) NSMutableDictionary *optionsDictionary;
-
-/**
- * Calls `analyticsOptionsDictionaryWithInfoDictionary:` using [NSBundle mainBundle].infoDictionary.
- * It combines analytics options from both the infoDictionary and the GoogleService-Info.plist.
- * Values which are present in the main plist override values from the GoogleService-Info.plist.
- */
-@property(nonatomic, readonly) NSDictionary *analyticsOptionsDictionary;
-
-/**
- * Combination of analytics options from both the infoDictionary and the GoogleService-Info.plist.
- * Values which are present in the infoDictionary override values from the GoogleService-Info.plist.
- */
-- (NSDictionary *)analyticsOptionsDictionaryWithInfoDictionary:(NSDictionary *)infoDictionary;
-
-/**
- * Throw exception if editing is locked when attempting to modify an option.
- */
-- (void)checkEditingLocked;
-
-@end
-
-@implementation FIROptions {
-  /// Backing variable for self.analyticsOptionsDictionary.
-  NSDictionary *_analyticsOptionsDictionary;
-}
-
-static FIROptions *sDefaultOptions = nil;
-static NSDictionary *sDefaultOptionsDictionary = nil;
-
-#pragma mark - Public only for internal class methods
-
-+ (FIROptions *)defaultOptions {
-  if (sDefaultOptions != nil) {
-    return sDefaultOptions;
-  }
-
-  NSDictionary *defaultOptionsDictionary = [self defaultOptionsDictionary];
-  if (defaultOptionsDictionary == nil) {
-    return nil;
-  }
-
-  sDefaultOptions = [[FIROptions alloc] initInternalWithOptionsDictionary:defaultOptionsDictionary];
-  return sDefaultOptions;
-}
-
-#pragma mark - Private class methods
-
-+ (NSDictionary *)defaultOptionsDictionary {
-  if (sDefaultOptionsDictionary != nil) {
-    return sDefaultOptionsDictionary;
-  }
-  NSString *plistFilePath = [FIROptions plistFilePathWithName:kServiceInfoFileName];
-  if (plistFilePath == nil) {
-    return nil;
-  }
-  sDefaultOptionsDictionary = [NSDictionary dictionaryWithContentsOfFile:plistFilePath];
-  if (sDefaultOptionsDictionary == nil) {
-    FIRLogError(kFIRLoggerCore, @"I-COR000011",
-                @"The configuration file is not a dictionary: "
-                @"'%@.%@'.",
-                kServiceInfoFileName, kServiceInfoFileType);
-  }
-  return sDefaultOptionsDictionary;
-}
-
-// Returns the path of the plist file with a given file name.
-+ (NSString *)plistFilePathWithName:(NSString *)fileName {
-  NSArray *bundles = [FIRBundleUtil relevantBundles];
-  NSString *plistFilePath =
-      [FIRBundleUtil optionsDictionaryPathWithResourceName:fileName
-                                               andFileType:kServiceInfoFileType
-                                                 inBundles:bundles];
-  if (plistFilePath == nil) {
-    FIRLogError(kFIRLoggerCore, @"I-COR000012", @"Could not locate configuration file: '%@.%@'.",
-                fileName, kServiceInfoFileType);
-  }
-  return plistFilePath;
-}
-
-+ (void)resetDefaultOptions {
-  sDefaultOptions = nil;
-  sDefaultOptionsDictionary = nil;
-}
-
-#pragma mark - Private instance methods
-
-- (instancetype)initInternalWithOptionsDictionary:(NSDictionary *)optionsDictionary {
-  self = [super init];
-  if (self) {
-    _optionsDictionary = [optionsDictionary mutableCopy];
-    _usingOptionsFromDefaultPlist = YES;
-  }
-  return self;
-}
-
-- (id)copyWithZone:(NSZone *)zone {
-  FIROptions *newOptions = [[[self class] allocWithZone:zone] init];
-  if (newOptions) {
-    newOptions.optionsDictionary = self.optionsDictionary;
-    newOptions.deepLinkURLScheme = self.deepLinkURLScheme;
-    newOptions.appGroupID = self.appGroupID;
-    newOptions.editingLocked = self.isEditingLocked;
-    newOptions.usingOptionsFromDefaultPlist = self.usingOptionsFromDefaultPlist;
-  }
-  return newOptions;
-}
-
-#pragma mark - Public instance methods
-
-- (instancetype)initWithContentsOfFile:(NSString *)plistPath {
-  self = [super init];
-  if (self) {
-    if (plistPath == nil) {
-      FIRLogError(kFIRLoggerCore, @"I-COR000013", @"The plist file path is nil.");
-      return nil;
-    }
-    _optionsDictionary = [[NSDictionary dictionaryWithContentsOfFile:plistPath] mutableCopy];
-    if (_optionsDictionary == nil) {
-      FIRLogError(kFIRLoggerCore, @"I-COR000014",
-                  @"The configuration file at %@ does not exist or "
-                  @"is not a well-formed plist file.",
-                  plistPath);
-      return nil;
-    }
-    // TODO: Do we want to validate the dictionary here? It says we do that already in
-    // the public header.
-  }
-  return self;
-}
-
-- (instancetype)initWithGoogleAppID:(NSString *)googleAppID GCMSenderID:(NSString *)GCMSenderID {
-  self = [super init];
-  if (self) {
-    NSMutableDictionary *mutableOptionsDict = [NSMutableDictionary dictionary];
-    [mutableOptionsDict setValue:googleAppID forKey:kFIRGoogleAppID];
-    [mutableOptionsDict setValue:GCMSenderID forKey:kFIRGCMSenderID];
-    [mutableOptionsDict setValue:[[NSBundle mainBundle] bundleIdentifier] forKey:kFIRBundleID];
-    self.optionsDictionary = mutableOptionsDict;
-  }
-  return self;
-}
-
-- (NSString *)APIKey {
-  return self.optionsDictionary[kFIRAPIKey];
-}
-
-- (void)checkEditingLocked {
-  if (self.isEditingLocked) {
-    [NSException raise:kFirebaseCoreErrorDomain format:kFIRExceptionBadModification];
-  }
-}
-
-- (void)setAPIKey:(NSString *)APIKey {
-  [self checkEditingLocked];
-  _optionsDictionary[kFIRAPIKey] = [APIKey copy];
-}
-
-- (NSString *)clientID {
-  return self.optionsDictionary[kFIRClientID];
-}
-
-- (void)setClientID:(NSString *)clientID {
-  [self checkEditingLocked];
-  _optionsDictionary[kFIRClientID] = [clientID copy];
-}
-
-- (NSString *)trackingID {
-  return self.optionsDictionary[kFIRTrackingID];
-}
-
-- (void)setTrackingID:(NSString *)trackingID {
-  [self checkEditingLocked];
-  _optionsDictionary[kFIRTrackingID] = [trackingID copy];
-}
-
-- (NSString *)GCMSenderID {
-  return self.optionsDictionary[kFIRGCMSenderID];
-}
-
-- (void)setGCMSenderID:(NSString *)GCMSenderID {
-  [self checkEditingLocked];
-  _optionsDictionary[kFIRGCMSenderID] = [GCMSenderID copy];
-}
-
-- (NSString *)projectID {
-  return self.optionsDictionary[kFIRProjectID];
-}
-
-- (void)setProjectID:(NSString *)projectID {
-  [self checkEditingLocked];
-  _optionsDictionary[kFIRProjectID] = [projectID copy];
-}
-
-- (NSString *)androidClientID {
-  return self.optionsDictionary[kFIRAndroidClientID];
-}
-
-- (void)setAndroidClientID:(NSString *)androidClientID {
-  [self checkEditingLocked];
-  _optionsDictionary[kFIRAndroidClientID] = [androidClientID copy];
-}
-
-- (NSString *)googleAppID {
-  return self.optionsDictionary[kFIRGoogleAppID];
-}
-
-- (void)setGoogleAppID:(NSString *)googleAppID {
-  [self checkEditingLocked];
-  _optionsDictionary[kFIRGoogleAppID] = [googleAppID copy];
-}
-
-- (NSString *)libraryVersionID {
-  static dispatch_once_t onceToken;
-  dispatch_once(&onceToken, ^{
-    // The unit tests are set up to catch anything that does not properly convert.
-    NSString *version = [NSString stringWithUTF8String:FIRCoreVersionString];
-    NSArray *components = [version componentsSeparatedByString:@"."];
-    NSString *major = [components objectAtIndex:0];
-    NSString *minor = [NSString stringWithFormat:@"%02d", [[components objectAtIndex:1] intValue]];
-    NSString *patch = [NSString stringWithFormat:@"%02d", [[components objectAtIndex:2] intValue]];
-    kFIRLibraryVersionID = [NSString stringWithFormat:@"%@%@%@000", major, minor, patch];
-  });
-  return kFIRLibraryVersionID;
-}
-
-- (void)setLibraryVersionID:(NSString *)libraryVersionID {
-  _optionsDictionary[kFIRLibraryVersionID] = [libraryVersionID copy];
-}
-
-- (NSString *)databaseURL {
-  return self.optionsDictionary[kFIRDatabaseURL];
-}
-
-- (void)setDatabaseURL:(NSString *)databaseURL {
-  [self checkEditingLocked];
-
-  _optionsDictionary[kFIRDatabaseURL] = [databaseURL copy];
-}
-
-- (NSString *)storageBucket {
-  return self.optionsDictionary[kFIRStorageBucket];
-}
-
-- (void)setStorageBucket:(NSString *)storageBucket {
-  [self checkEditingLocked];
-  _optionsDictionary[kFIRStorageBucket] = [storageBucket copy];
-}
-
-- (void)setDeepLinkURLScheme:(NSString *)deepLinkURLScheme {
-  [self checkEditingLocked];
-  _deepLinkURLScheme = [deepLinkURLScheme copy];
-}
-
-- (NSString *)bundleID {
-  return self.optionsDictionary[kFIRBundleID];
-}
-
-- (void)setBundleID:(NSString *)bundleID {
-  [self checkEditingLocked];
-  _optionsDictionary[kFIRBundleID] = [bundleID copy];
-}
-
-- (void)setAppGroupID:(NSString *)appGroupID {
-  [self checkEditingLocked];
-  _appGroupID = [appGroupID copy];
-}
-
-#pragma mark - Equality
-
-- (BOOL)isEqual:(id)object {
-  if (!object || ![object isKindOfClass:[FIROptions class]]) {
-    return NO;
-  }
-
-  return [self isEqualToOptions:(FIROptions *)object];
-}
-
-- (BOOL)isEqualToOptions:(FIROptions *)options {
-  // Skip any non-FIROptions classes.
-  if (![options isKindOfClass:[FIROptions class]]) {
-    return NO;
-  }
-
-  // Check the internal dictionary and custom properties for differences.
-  if (![options.optionsDictionary isEqualToDictionary:self.optionsDictionary]) {
-    return NO;
-  }
-
-  // Validate extra properties not contained in the dictionary. Only validate it if one of the
-  // objects has the property set.
-  if ((options.deepLinkURLScheme != nil || self.deepLinkURLScheme != nil) &&
-      ![options.deepLinkURLScheme isEqualToString:self.deepLinkURLScheme]) {
-    return NO;
-  }
-
-  if ((options.appGroupID != nil || self.appGroupID != nil) &&
-      ![options.appGroupID isEqualToString:self.appGroupID]) {
-    return NO;
-  }
-
-  // Validate the Analytics options haven't changed with the Info.plist.
-  if (![options.analyticsOptionsDictionary isEqualToDictionary:self.analyticsOptionsDictionary]) {
-    return NO;
-  }
-
-  // We don't care about the `editingLocked` or `usingOptionsFromDefaultPlist` properties since
-  // those relate to lifecycle and construction, we only care if the contents of the options
-  // themselves are equal.
-  return YES;
-}
-
-- (NSUInteger)hash {
-  // This is strongly recommended for any object that implements a custom `isEqual:` method to
-  // ensure that dictionary and set behavior matches other `isEqual:` checks.
-  // Note: `self.analyticsOptionsDictionary` was left out here since it solely relies on the
-  // contents of the main bundle's `Info.plist`. We should avoid reading that file and the contents
-  // should be identical.
-  return self.optionsDictionary.hash ^ self.deepLinkURLScheme.hash ^ self.appGroupID.hash;
-}
-
-#pragma mark - Internal instance methods
-
-- (NSDictionary *)analyticsOptionsDictionaryWithInfoDictionary:(NSDictionary *)infoDictionary {
-  if (_analyticsOptionsDictionary == nil) {
-    NSMutableDictionary *tempAnalyticsOptions = [[NSMutableDictionary alloc] init];
-    NSArray *measurementKeys = @[
-      kFIRIsMeasurementEnabled, kFIRIsAnalyticsCollectionEnabled,
-      kFIRIsAnalyticsCollectionDeactivated
-    ];
-    for (NSString *key in measurementKeys) {
-      id value = infoDictionary[key] ?: self.optionsDictionary[key] ?: nil;
-      if (!value) {
-        continue;
-      }
-      tempAnalyticsOptions[key] = value;
-    }
-    _analyticsOptionsDictionary = tempAnalyticsOptions;
-  }
-  return _analyticsOptionsDictionary;
-}
-
-- (NSDictionary *)analyticsOptionsDictionary {
-  return [self analyticsOptionsDictionaryWithInfoDictionary:[NSBundle mainBundle].infoDictionary];
-}
-
-/**
- * Whether or not Measurement was enabled. Measurement is enabled unless explicitly disabled in
- * GoogleService-Info.plist. This uses the old plist flag IS_MEASUREMENT_ENABLED, which should still
- * be supported.
- */
-- (BOOL)isMeasurementEnabled {
-  if (self.isAnalyticsCollectionDeactivated) {
-    return NO;
-  }
-  NSNumber *value = self.analyticsOptionsDictionary[kFIRIsMeasurementEnabled];
-  if (value == nil) {
-    // TODO: This could probably be cleaned up since FIROptions shouldn't know about FIRApp or have
-    //       to check if it's the default app. The FIROptions instance can't be modified after
-    //       `+configure` is called, so it's not a good place to copy it either in case the flag is
-    //       changed at runtime.
-
-    // If no values are set for Analytics, fall back to the global collection switch in FIRApp.
-    // Analytics only supports the default FIRApp, so check that first.
-    if (![FIRApp isDefaultAppConfigured]) {
-      return NO;
-    }
-
-    // Fall back to the default app's collection switch when the key is not in the dictionary.
-    return [FIRApp defaultApp].isDataCollectionDefaultEnabled;
-  }
-  return [value boolValue];
-}
-
-- (BOOL)isAnalyticsCollectionExplicitlySet {
-  // If it's de-activated, it classifies as explicity set. If not, it's not a good enough indication
-  // that the developer wants FirebaseAnalytics enabled so continue checking.
-  if (self.isAnalyticsCollectionDeactivated) {
-    return YES;
-  }
-
-  // Check if the current Analytics flag is set.
-  id collectionEnabledObject = self.analyticsOptionsDictionary[kFIRIsAnalyticsCollectionEnabled];
-  if (collectionEnabledObject && [collectionEnabledObject isKindOfClass:[NSNumber class]]) {
-    // It doesn't matter what the value is, it's explicitly set.
-    return YES;
-  }
-
-  // Check if the old measurement flag is set.
-  id measurementEnabledObject = self.analyticsOptionsDictionary[kFIRIsMeasurementEnabled];
-  if (measurementEnabledObject && [measurementEnabledObject isKindOfClass:[NSNumber class]]) {
-    // It doesn't matter what the value is, it's explicitly set.
-    return YES;
-  }
-
-  // No flags are set to explicitly enable or disable FirebaseAnalytics.
-  return NO;
-}
-
-- (BOOL)isAnalyticsCollectionEnabled {
-  if (self.isAnalyticsCollectionDeactivated) {
-    return NO;
-  }
-  NSNumber *value = self.analyticsOptionsDictionary[kFIRIsAnalyticsCollectionEnabled];
-  if (value == nil) {
-    return self.isMeasurementEnabled;  // Fall back to older plist flag.
-  }
-  return [value boolValue];
-}
-
-- (BOOL)isAnalyticsCollectionDeactivated {
-  NSNumber *value = self.analyticsOptionsDictionary[kFIRIsAnalyticsCollectionDeactivated];
-  if (value == nil) {
-    return NO;  // Analytics Collection is not deactivated when the key is not in the dictionary.
-  }
-  return [value boolValue];
-}
-
-- (BOOL)isAnalyticsEnabled {
-  return [self.optionsDictionary[kFIRIsAnalyticsEnabled] boolValue];
-}
-
-- (BOOL)isSignInEnabled {
-  return [self.optionsDictionary[kFIRIsSignInEnabled] boolValue];
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRVersion.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRVersion.h
deleted file mode 100644
index 226efb1..0000000
--- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRVersion.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-/** The version of the Firebase SDK. */
-FOUNDATION_EXPORT const char *const FIRVersionString;
-
-/** The version of the FirebaseCore Component. */
-FOUNDATION_EXPORT const char *const FIRCoreVersionString;
diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRVersion.m b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRVersion.m
deleted file mode 100644
index ec0f6ba..0000000
--- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRVersion.m
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef Firebase_VERSION
-#error "Firebase_VERSION is not defined: add -DFirebase_VERSION=... to the build invocation"
-#endif
-
-#ifndef FIRCore_VERSION
-#error "FIRCore_VERSION is not defined: add -DFIRCore_VERSION=... to the build invocation"
-#endif
-
-// The following two macros supply the incantation so that the C
-// preprocessor does not try to parse the version as a floating
-// point number. See
-// https://www.guyrutenberg.com/2008/12/20/expanding-macros-into-string-constants-in-c/
-#define STR(x) STR_EXPAND(x)
-#define STR_EXPAND(x) #x
-
-const char *const FIRVersionString = (const char *const)STR(Firebase_VERSION);
-const char *const FIRCoreVersionString = (const char *const)STR(FIRCore_VERSION);
diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRAnalyticsConfiguration.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRAnalyticsConfiguration.h
deleted file mode 100644
index 6429ac7..0000000
--- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRAnalyticsConfiguration.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-/// Values stored in analyticsEnabledState. Never alter these constants since they must match with
-/// values persisted to disk.
-typedef NS_ENUM(int64_t, FIRAnalyticsEnabledState) {
-  // 0 is the default value for keys not found stored in persisted config, so it cannot represent
-  // kFIRAnalyticsEnabledStateSetNo. It must represent kFIRAnalyticsEnabledStateNotSet.
-  kFIRAnalyticsEnabledStateNotSet = 0,
-  kFIRAnalyticsEnabledStateSetYes = 1,
-  kFIRAnalyticsEnabledStateSetNo = 2,
-};
-
-/// The user defaults key for the persisted measurementEnabledState value. FIRAPersistedConfig reads
-/// measurementEnabledState using this same key.
-static NSString *const kFIRAPersistedConfigMeasurementEnabledStateKey =
-    @"/google/measurement/measurement_enabled_state";
-
-static NSString *const kFIRAnalyticsConfigurationSetEnabledNotification =
-    @"FIRAnalyticsConfigurationSetEnabledNotification";
-static NSString *const kFIRAnalyticsConfigurationSetMinimumSessionIntervalNotification =
-    @"FIRAnalyticsConfigurationSetMinimumSessionIntervalNotification";
-static NSString *const kFIRAnalyticsConfigurationSetSessionTimeoutIntervalNotification =
-    @"FIRAnalyticsConfigurationSetSessionTimeoutIntervalNotification";
-
-@interface FIRAnalyticsConfiguration : NSObject
-
-/// Returns the shared instance of FIRAnalyticsConfiguration.
-+ (FIRAnalyticsConfiguration *)sharedInstance;
-
-// Sets whether analytics collection is enabled for this app on this device. This setting is
-// persisted across app sessions. By default it is enabled.
-- (void)setAnalyticsCollectionEnabled:(BOOL)analyticsCollectionEnabled;
-
-/// Sets whether analytics collection is enabled for this app on this device, and a flag to persist
-/// the value or not. The setting should not be persisted if being set by the global data collection
-/// flag.
-- (void)setAnalyticsCollectionEnabled:(BOOL)analyticsCollectionEnabled
-                       persistSetting:(BOOL)shouldPersist;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRAppAssociationRegistration.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRAppAssociationRegistration.h
deleted file mode 100644
index 3fc69c6..0000000
--- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRAppAssociationRegistration.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-//  TODO: Remove this once Auth moves over to Core's instance registration system.
-/** @class FIRAppAssociationRegistration
-    @brief Manages object associations as a singleton-dependent: At most one object is
-        registered for any given host/key pair, and the object shall be created on-the-fly when
-        asked for.
- */
-@interface FIRAppAssociationRegistration<ObjectType> : NSObject
-
-/** @fn registeredObjectWithHost:key:creationBlock:
-    @brief Retrieves the registered object with a particular host and key.
-    @param host The host object.
-    @param key The key to specify the registered object on the host.
-    @param creationBlock The block to return the object to be registered if not already.
-        The block is executed immediately before this method returns if it is executed at all.
-        It can also be executed multiple times across different method invocations if previous
-        execution of the block returns @c nil.
-    @return The registered object for the host/key pair, or @c nil if no object is registered
-        and @c creationBlock returns @c nil.
-    @remarks The method is thread-safe but non-reentrant in the sense that attempting to call this
-        method again within the @c creationBlock with the same host/key pair raises an exception.
-        The registered object is retained by the host.
- */
-+ (nullable ObjectType)registeredObjectWithHost:(id)host
-                                            key:(NSString *)key
-                                  creationBlock:(ObjectType _Nullable (^)(void))creationBlock;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRAppInternal.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRAppInternal.h
deleted file mode 100644
index ad1a186..0000000
--- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRAppInternal.h
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <FirebaseCore/FIRApp.h>
-#import <FirebaseCore/FIRErrors.h>
-
-@class FIRComponentContainer;
-@protocol FIRLibrary;
-
-/**
- * The internal interface to FIRApp. This is meant for first-party integrators, who need to receive
- * FIRApp notifications, log info about the success or failure of their configuration, and access
- * other internal functionality of FIRApp.
- *
- * TODO(b/28296561): Restructure this header.
- */
-NS_ASSUME_NONNULL_BEGIN
-
-typedef NS_ENUM(NSInteger, FIRConfigType) {
-  FIRConfigTypeCore = 1,
-  FIRConfigTypeSDK = 2,
-};
-
-extern NSString *const kFIRDefaultAppName;
-extern NSString *const kFIRAppReadyToConfigureSDKNotification;
-extern NSString *const kFIRAppDeleteNotification;
-extern NSString *const kFIRAppIsDefaultAppKey;
-extern NSString *const kFIRAppNameKey;
-extern NSString *const kFIRGoogleAppIDKey;
-
-/**
- * The format string for the User Defaults key used for storing the data collection enabled flag.
- * This includes formatting to append the Firebase App's name.
- */
-extern NSString *const kFIRGlobalAppDataCollectionEnabledDefaultsKeyFormat;
-
-/**
- * The plist key used for storing the data collection enabled flag.
- */
-extern NSString *const kFIRGlobalAppDataCollectionEnabledPlistKey;
-
-/**
- * A notification fired containing diagnostic information when SDK errors occur.
- */
-extern NSString *const kFIRAppDiagnosticsNotification;
-
-/** @var FIRAuthStateDidChangeInternalNotification
- @brief The name of the @c NSNotificationCenter notification which is posted when the auth state
- changes (e.g. a new token has been produced, a user logs in or out). The object parameter of
- the notification is a dictionary possibly containing the key:
- @c FIRAuthStateDidChangeInternalNotificationTokenKey (the new access token.) If it does not
- contain this key it indicates a sign-out event took place.
- */
-extern NSString *const FIRAuthStateDidChangeInternalNotification;
-
-/** @var FIRAuthStateDidChangeInternalNotificationTokenKey
- @brief A key present in the dictionary object parameter of the
- @c FIRAuthStateDidChangeInternalNotification notification. The value associated with this
- key will contain the new access token.
- */
-extern NSString *const FIRAuthStateDidChangeInternalNotificationTokenKey;
-
-/** @var FIRAuthStateDidChangeInternalNotificationAppKey
- @brief A key present in the dictionary object parameter of the
- @c FIRAuthStateDidChangeInternalNotification notification. The value associated with this
- key will contain the FIRApp associated with the auth instance.
- */
-extern NSString *const FIRAuthStateDidChangeInternalNotificationAppKey;
-
-/** @var FIRAuthStateDidChangeInternalNotificationUIDKey
- @brief A key present in the dictionary object parameter of the
- @c FIRAuthStateDidChangeInternalNotification notification. The value associated with this
- key will contain the new user's UID (or nil if there is no longer a user signed in).
- */
-extern NSString *const FIRAuthStateDidChangeInternalNotificationUIDKey;
-
-@interface FIRApp ()
-
-/**
- * A flag indicating if this is the default app (has the default app name).
- */
-@property(nonatomic, readonly) BOOL isDefaultApp;
-
-/*
- * The container of interop SDKs for this app.
- */
-@property(nonatomic) FIRComponentContainer *container;
-
-/**
- * Creates an error for failing to configure a subspec service. This method is called by each
- * FIRApp notification listener.
- */
-+ (NSError *)errorForSubspecConfigurationFailureWithDomain:(NSString *)domain
-                                                 errorCode:(FIRErrorCode)code
-                                                   service:(NSString *)service
-                                                    reason:(NSString *)reason;
-/**
- * Checks if the default app is configured without trying to configure it.
- */
-+ (BOOL)isDefaultAppConfigured;
-
-/**
- * Registers a given third-party library with the given version number to be reported for
- * analytics.
- *
- * @param name Name of the library.
- * @param version Version of the library.
- */
-+ (void)registerLibrary:(nonnull NSString *)name withVersion:(nonnull NSString *)version;
-
-/**
- * Registers a given internal library with the given version number to be reported for
- * analytics.
- *
- * @param library Optional parameter for component registration.
- * @param name Name of the library.
- * @param version Version of the library.
- */
-+ (void)registerInternalLibrary:(nonnull Class<FIRLibrary>)library
-                       withName:(nonnull NSString *)name
-                    withVersion:(nonnull NSString *)version;
-
-/**
- * A concatenated string representing all the third-party libraries and version numbers.
- */
-+ (NSString *)firebaseUserAgent;
-
-/**
- * Used by each SDK to send logs about SDK configuration status to Clearcut.
- *
- * @note This API is a no-op, please remove calls to it.
- */
-- (void)sendLogsWithServiceName:(NSString *)serviceName
-                        version:(NSString *)version
-                          error:(NSError *)error;
-
-/**
- * Can be used by the unit tests in eack SDK to reset FIRApp. This method is thread unsafe.
- */
-+ (void)resetApps;
-
-/**
- * Can be used by the unit tests in each SDK to set customized options.
- */
-- (instancetype)initInstanceWithName:(NSString *)name options:(FIROptions *)options;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponent.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponent.h
deleted file mode 100644
index cb51ee7..0000000
--- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponent.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright 2018 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@class FIRApp;
-@class FIRComponentContainer;
-
-NS_ASSUME_NONNULL_BEGIN
-
-/// Provides a system to clean up cached instances returned from the component system.
-NS_SWIFT_NAME(ComponentLifecycleMaintainer)
-@protocol FIRComponentLifecycleMaintainer
-/// The associated app will be deleted, clean up any resources as they are about to be deallocated.
-- (void)appWillBeDeleted:(FIRApp *)app;
-@end
-
-typedef _Nullable id (^FIRComponentCreationBlock)(FIRComponentContainer *container,
-                                                  BOOL *isCacheable)
-    NS_SWIFT_NAME(ComponentCreationBlock);
-
-@class FIRDependency;
-
-/// Describes the timing of instantiation. Note: new components should default to lazy unless there
-/// is a strong reason to be eager.
-typedef NS_ENUM(NSInteger, FIRInstantiationTiming) {
-  FIRInstantiationTimingLazy,
-  FIRInstantiationTimingAlwaysEager,
-  FIRInstantiationTimingEagerInDefaultApp
-} NS_SWIFT_NAME(InstantiationTiming);
-
-/// A component that can be used from other Firebase SDKs.
-NS_SWIFT_NAME(Component)
-@interface FIRComponent : NSObject
-
-/// The protocol describing functionality provided from the Component.
-@property(nonatomic, strong, readonly) Protocol *protocol;
-
-/// The timing of instantiation.
-@property(nonatomic, readonly) FIRInstantiationTiming instantiationTiming;
-
-/// An array of dependencies for the component.
-@property(nonatomic, copy, readonly) NSArray<FIRDependency *> *dependencies;
-
-/// A block to instantiate an instance of the component with the appropriate dependencies.
-@property(nonatomic, copy, readonly) FIRComponentCreationBlock creationBlock;
-
-// There's an issue with long NS_SWIFT_NAMES that causes compilation to fail, disable clang-format
-// for the next two methods.
-// clang-format off
-
-/// Creates a component with no dependencies that will be lazily initialized.
-+ (instancetype)componentWithProtocol:(Protocol *)protocol
-                        creationBlock:(FIRComponentCreationBlock)creationBlock
-NS_SWIFT_NAME(init(_:creationBlock:));
-
-/// Creates a component to be registered with the component container.
-///
-/// @param protocol - The protocol describing functionality provided by the component.
-/// @param instantiationTiming - When the component should be initialized. Use .lazy unless there's
-///                              a good reason to be instantiated earlier.
-/// @param dependencies - Any dependencies the `implementingClass` has, optional or required.
-/// @param creationBlock - A block to instantiate the component with a container, and if
-/// @return A component that can be registered with the component container.
-+ (instancetype)componentWithProtocol:(Protocol *)protocol
-                  instantiationTiming:(FIRInstantiationTiming)instantiationTiming
-                         dependencies:(NSArray<FIRDependency *> *)dependencies
-                        creationBlock:(FIRComponentCreationBlock)creationBlock
-NS_SWIFT_NAME(init(_:instantiationTiming:dependencies:creationBlock:));
-
-// clang-format on
-
-/// Unavailable.
-- (instancetype)init NS_UNAVAILABLE;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponentContainer.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponentContainer.h
deleted file mode 100644
index 8dfab9c..0000000
--- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponentContainer.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2018 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#import <Foundation/Foundation.h>
-
-#import <FirebaseCore/FIRComponentType.h>
-#import <FirebaseCore/FIRLibrary.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-/// A type-safe macro to retrieve a component from a container. This should be used to retrieve
-/// components instead of using the container directly.
-#define FIR_COMPONENT(type, container) \
-  [FIRComponentType<id<type>> instanceForProtocol:@protocol(type) inContainer:container]
-
-@class FIRApp;
-
-/// A container that holds different components that are registered via the
-/// `registerAsComponentRegistrant:` call. These classes should conform to `FIRComponentRegistrant`
-/// in order to properly register components for Core.
-NS_SWIFT_NAME(FirebaseComponentContainer)
-@interface FIRComponentContainer : NSObject
-
-/// A weak reference to the app that an instance of the container belongs to.
-@property(nonatomic, weak, readonly) FIRApp *app;
-
-/// Unavailable. Use the `container` property on `FIRApp`.
-- (instancetype)init NS_UNAVAILABLE;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponentContainerInternal.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponentContainerInternal.h
deleted file mode 100644
index bf39bc6..0000000
--- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponentContainerInternal.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright 2018 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#import <Foundation/Foundation.h>
-
-#import <FirebaseCore/FIRComponent.h>
-#import <FirebaseCore/FIRComponentContainer.h>
-
-@class FIRApp;
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface FIRComponentContainer (Private)
-
-/// Initializes a container for a given app. This should only be called by the app itself.
-- (instancetype)initWithApp:(FIRApp *)app;
-
-/// Retrieves an instance that conforms to the specified protocol. This will return `nil` if the
-/// protocol wasn't registered, or if the instance couldn't be instantiated for the provided app.
-- (nullable id)instanceForProtocol:(Protocol *)protocol NS_SWIFT_NAME(instance(for:));
-
-/// Instantiates all the components that have registered as "eager" after initialization.
-- (void)instantiateEagerComponents;
-
-/// Remove all of the cached instances stored and allow them to clean up after themselves.
-- (void)removeAllCachedInstances;
-
-/// Removes all the components. After calling this method no new instances will be created.
-- (void)removeAllComponents;
-
-/// Register a class to provide components for the interoperability system. The class should conform
-/// to `FIRComponentRegistrant` and provide an array of `FIRComponent` objects.
-+ (void)registerAsComponentRegistrant:(Class<FIRLibrary>)klass;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponentType.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponentType.h
deleted file mode 100644
index 6f2aca7..0000000
--- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponentType.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2018 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@class FIRComponentContainer;
-
-NS_ASSUME_NONNULL_BEGIN
-
-/// Do not use directly. A placeholder type in order to provide a macro that will warn users of
-/// mis-matched protocols.
-NS_SWIFT_NAME(ComponentType)
-@interface FIRComponentType<__covariant T> : NSObject
-
-/// Do not use directly. A factory method to retrieve an instance that provides a specific
-/// functionality.
-+ (T)instanceForProtocol:(Protocol *)protocol inContainer:(FIRComponentContainer *)container;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRConfigurationInternal.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRConfigurationInternal.h
deleted file mode 100644
index 0d1a36f..0000000
--- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRConfigurationInternal.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <FirebaseCore/FIRConfiguration.h>
-
-@class FIRAnalyticsConfiguration;
-
-@interface FIRConfiguration ()
-
-/**
- * The configuration class for Firebase Analytics. This should be removed once the logic for
- * enabling and disabling Analytics is moved to Analytics.
- */
-@property(nonatomic, readwrite) FIRAnalyticsConfiguration *analyticsConfiguration;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRCoreDiagnosticsConnector.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRCoreDiagnosticsConnector.h
deleted file mode 100644
index 76c0c05..0000000
--- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRCoreDiagnosticsConnector.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@class FIRDiagnosticsData;
-@class FIROptions;
-
-NS_ASSUME_NONNULL_BEGIN
-
-/** Connects FIRCore with the CoreDiagnostics library. */
-@interface FIRCoreDiagnosticsConnector : NSObject
-
-/** Logs FirebaseCore  related data.
- *
- * @param options The options object containing data to log.
- */
-+ (void)logCoreTelemetryWithOptions:(FIROptions *)options;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRDependency.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRDependency.h
deleted file mode 100644
index 46e9b7e..0000000
--- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRDependency.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright 2018 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-/// A dependency on a specific protocol's functionality.
-NS_SWIFT_NAME(Dependency)
-@interface FIRDependency : NSObject
-
-/// The protocol describing functionality being depended on.
-@property(nonatomic, strong, readonly) Protocol *protocol;
-
-/// A flag to specify if the dependency is required or not.
-@property(nonatomic, readonly) BOOL isRequired;
-
-/// Initializes a dependency that is required. Calls `initWithProtocol:isRequired` with `YES` for
-/// the required parameter.
-/// Creates a required dependency on the specified protocol's functionality.
-+ (instancetype)dependencyWithProtocol:(Protocol *)protocol;
-
-/// Creates a dependency on the specified protocol's functionality and specify if it's required for
-/// the class's functionality.
-+ (instancetype)dependencyWithProtocol:(Protocol *)protocol isRequired:(BOOL)required;
-
-/// Use `dependencyWithProtocol:isRequired:` instead.
-- (instancetype)init NS_UNAVAILABLE;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRDiagnosticsData.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRDiagnosticsData.h
deleted file mode 100644
index ac5ef2c..0000000
--- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRDiagnosticsData.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#import <FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsData.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-/** Implements the FIRCoreDiagnosticsData protocol to log diagnostics data. */
-@interface FIRDiagnosticsData : NSObject <FIRCoreDiagnosticsData>
-
-/** Inserts values into the diagnosticObjects dictionary if the value isn't nil.
- *
- * @param value The value to insert if it's not nil.
- * @param key The key to associate it with.
- */
-- (void)insertValue:(nullable id)value forKey:(NSString *)key;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRErrorCode.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRErrorCode.h
deleted file mode 100644
index f77b3d0..0000000
--- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRErrorCode.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/** Error codes in Firebase error domain. */
-typedef NS_ENUM(NSInteger, FIRErrorCode) {
-  /**
-   * Unknown error.
-   */
-  FIRErrorCodeUnknown = 0,
-  /**
-   * Loading data from the GoogleService-Info.plist file failed. This is a fatal error and should
-   * not be ignored. Further calls to the API will fail and/or possibly cause crashes.
-   */
-  FIRErrorCodeInvalidPlistFile = -100,
-
-  /**
-   * Validating the Google App ID format failed.
-   */
-  FIRErrorCodeInvalidAppID = -101,
-
-  /**
-   * Error code for failing to configure a specific service.
-   */
-  FIRErrorCodeConfigFailed = -114,
-};
diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRErrors.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRErrors.h
deleted file mode 100644
index 19e4732..0000000
--- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRErrors.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#include "FIRErrorCode.h"
-
-extern NSString *const kFirebaseErrorDomain;
-extern NSString *const kFirebaseConfigErrorDomain;
-extern NSString *const kFirebaseCoreErrorDomain;
-extern NSString *const kFirebasePerfErrorDomain;
diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRHeartbeatInfo.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRHeartbeatInfo.h
deleted file mode 100644
index bfff73e..0000000
--- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRHeartbeatInfo.h
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright 2019 Google
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface FIRHeartbeatInfo : NSObject
-
-// Enum representing the different heartbeat codes.
-typedef NS_ENUM(NSInteger, FIRHeartbeatInfoCode) {
-  FIRHeartbeatInfoCodeNone = 0,
-  FIRHeartbeatInfoCodeSDK = 1,
-  FIRHeartbeatInfoCodeGlobal = 2,
-  FIRHeartbeatInfoCodeCombined = 3,
-};
-
-/**
- * Get heartbeat code requred for the sdk.
- * @param heartbeatTag String representing the sdk heartbeat tag.
- * @return Heartbeat code indicating whether or not an sdk/global heartbeat
- * needs to be sent
- */
-+ (FIRHeartbeatInfoCode)heartbeatCodeForTag:(NSString *)heartbeatTag;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRLibrary.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRLibrary.h
deleted file mode 100644
index af9d968..0000000
--- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRLibrary.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright 2018 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef FIRLibrary_h
-#define FIRLibrary_h
-
-#import <Foundation/Foundation.h>
-
-#import <FirebaseCore/FIRComponent.h>
-
-@class FIRApp;
-
-NS_ASSUME_NONNULL_BEGIN
-
-/// Provide an interface to register a library for userAgent logging and availability to others.
-NS_SWIFT_NAME(Library)
-@protocol FIRLibrary
-
-/// Returns one or more FIRComponents that will be registered in
-/// FIRApp and participate in dependency resolution and injection.
-+ (NSArray<FIRComponent *> *)componentsToRegister;
-
-@optional
-/// Implement this method if the library needs notifications for lifecycle events. This method is
-/// called when the developer calls `FirebaseApp.configure()`.
-+ (void)configureWithApp:(FIRApp *)app;
-
-@end
-
-NS_ASSUME_NONNULL_END
-
-#endif /* FIRLibrary_h */
diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRLogger.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRLogger.h
deleted file mode 100644
index 548e389..0000000
--- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRLogger.h
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#import <FirebaseCore/FIRLoggerLevel.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-/**
- * The Firebase services used in Firebase logger.
- */
-typedef NSString *const FIRLoggerService;
-
-extern FIRLoggerService kFIRLoggerABTesting;
-extern FIRLoggerService kFIRLoggerAdMob;
-extern FIRLoggerService kFIRLoggerAnalytics;
-extern FIRLoggerService kFIRLoggerAuth;
-extern FIRLoggerService kFIRLoggerCrash;
-extern FIRLoggerService kFIRLoggerCore;
-extern FIRLoggerService kFIRLoggerMLKit;
-extern FIRLoggerService kFIRLoggerPerf;
-extern FIRLoggerService kFIRLoggerRemoteConfig;
-
-/**
- * The key used to store the logger's error count.
- */
-extern NSString *const kFIRLoggerErrorCountKey;
-
-/**
- * The key used to store the logger's warning count.
- */
-extern NSString *const kFIRLoggerWarningCountKey;
-
-#ifdef __cplusplus
-extern "C" {
-#endif  // __cplusplus
-
-/**
- * Enables or disables Analytics debug mode.
- * If set to YES, the logging level for Analytics will be set to FIRLoggerLevelDebug.
- * Enabling the debug mode has no effect if the app is running from App Store.
- * (required) analytics debug mode flag.
- */
-void FIRSetAnalyticsDebugMode(BOOL analyticsDebugMode);
-
-/**
- * Changes the default logging level of FIRLoggerLevelNotice to a user-specified level.
- * The default level cannot be set above FIRLoggerLevelNotice if the app is running from App Store.
- * (required) log level (one of the FIRLoggerLevel enum values).
- */
-void FIRSetLoggerLevel(FIRLoggerLevel loggerLevel);
-
-/**
- * Checks if the specified logger level is loggable given the current settings.
- * (required) log level (one of the FIRLoggerLevel enum values).
- * (required) whether or not this function is called from the Analytics component.
- */
-BOOL FIRIsLoggableLevel(FIRLoggerLevel loggerLevel, BOOL analyticsComponent);
-
-/**
- * Logs a message to the Xcode console and the device log. If running from AppStore, will
- * not log any messages with a level higher than FIRLoggerLevelNotice to avoid log spamming.
- * (required) log level (one of the FIRLoggerLevel enum values).
- * (required) service name of type FIRLoggerService.
- * (required) message code starting with "I-" which means iOS, followed by a capitalized
- *            three-character service identifier and a six digit integer message ID that is unique
- *            within the service.
- *            An example of the message code is @"I-COR000001".
- * (required) message string which can be a format string.
- * (optional) variable arguments list obtained from calling va_start, used when message is a format
- *            string.
- */
-extern void FIRLogBasic(FIRLoggerLevel level,
-                        FIRLoggerService service,
-                        NSString *messageCode,
-                        NSString *message,
-// On 64-bit simulators, va_list is not a pointer, so cannot be marked nullable
-// See: http://stackoverflow.com/q/29095469
-#if __LP64__ && TARGET_OS_SIMULATOR || TARGET_OS_OSX
-                        va_list args_ptr
-#else
-                        va_list _Nullable args_ptr
-#endif
-);
-
-/**
- * The following functions accept the following parameters in order:
- * (required) service name of type FIRLoggerService.
- * (required) message code starting from "I-" which means iOS, followed by a capitalized
- *            three-character service identifier and a six digit integer message ID that is unique
- *            within the service.
- *            An example of the message code is @"I-COR000001".
- *            See go/firebase-log-proposal for details.
- * (required) message string which can be a format string.
- * (optional) the list of arguments to substitute into the format string.
- * Example usage:
- * FIRLogError(kFIRLoggerCore, @"I-COR000001", @"Configuration of %@ failed.", app.name);
- */
-extern void FIRLogError(FIRLoggerService service, NSString *messageCode, NSString *message, ...)
-    NS_FORMAT_FUNCTION(3, 4);
-extern void FIRLogWarning(FIRLoggerService service, NSString *messageCode, NSString *message, ...)
-    NS_FORMAT_FUNCTION(3, 4);
-extern void FIRLogNotice(FIRLoggerService service, NSString *messageCode, NSString *message, ...)
-    NS_FORMAT_FUNCTION(3, 4);
-extern void FIRLogInfo(FIRLoggerService service, NSString *messageCode, NSString *message, ...)
-    NS_FORMAT_FUNCTION(3, 4);
-extern void FIRLogDebug(FIRLoggerService service, NSString *messageCode, NSString *message, ...)
-    NS_FORMAT_FUNCTION(3, 4);
-
-#ifdef __cplusplus
-}  // extern "C"
-#endif  // __cplusplus
-
-@interface FIRLoggerWrapper : NSObject
-
-/**
- * Objective-C wrapper for FIRLogBasic to allow weak linking to FIRLogger
- * (required) log level (one of the FIRLoggerLevel enum values).
- * (required) service name of type FIRLoggerService.
- * (required) message code starting with "I-" which means iOS, followed by a capitalized
- *            three-character service identifier and a six digit integer message ID that is unique
- *            within the service.
- *            An example of the message code is @"I-COR000001".
- * (required) message string which can be a format string.
- * (optional) variable arguments list obtained from calling va_start, used when message is a format
- *            string.
- */
-
-+ (void)logWithLevel:(FIRLoggerLevel)level
-         withService:(FIRLoggerService)service
-            withCode:(NSString *)messageCode
-         withMessage:(NSString *)message
-            withArgs:(va_list)args;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIROptionsInternal.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIROptionsInternal.h
deleted file mode 100644
index 0660a3c..0000000
--- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIROptionsInternal.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <FirebaseCore/FIROptions.h>
-
-/**
- * Keys for the strings in the plist file.
- */
-extern NSString *const kFIRAPIKey;
-extern NSString *const kFIRTrackingID;
-extern NSString *const kFIRGoogleAppID;
-extern NSString *const kFIRClientID;
-extern NSString *const kFIRGCMSenderID;
-extern NSString *const kFIRAndroidClientID;
-extern NSString *const kFIRDatabaseURL;
-extern NSString *const kFIRStorageBucket;
-extern NSString *const kFIRBundleID;
-extern NSString *const kFIRProjectID;
-
-/**
- * Keys for the plist file name
- */
-extern NSString *const kServiceInfoFileName;
-
-extern NSString *const kServiceInfoFileType;
-
-/**
- * This header file exposes the initialization of FIROptions to internal use.
- */
-@interface FIROptions ()
-
-/**
- * resetDefaultOptions and initInternalWithOptionsDictionary: are exposed only for unit tests.
- */
-+ (void)resetDefaultOptions;
-
-/**
- * Initializes the options with dictionary. The above strings are the keys of the dictionary.
- * This is the designated initializer.
- */
-- (instancetype)initInternalWithOptionsDictionary:(NSDictionary *)serviceInfoDictionary;
-
-/**
- * defaultOptions and defaultOptionsDictionary are exposed in order to be used in FIRApp and
- * other first party services.
- */
-+ (FIROptions *)defaultOptions;
-
-+ (NSDictionary *)defaultOptionsDictionary;
-
-/**
- * Indicates whether or not Analytics collection was explicitly enabled via a plist flag or at
- * runtime.
- */
-@property(nonatomic, readonly) BOOL isAnalyticsCollectionExplicitlySet;
-
-/**
- * Whether or not Analytics Collection was enabled. Analytics Collection is enabled unless
- * explicitly disabled in GoogleService-Info.plist.
- */
-@property(nonatomic, readonly) BOOL isAnalyticsCollectionEnabled;
-
-/**
- * Whether or not Analytics Collection was completely disabled. If YES, then
- * isAnalyticsCollectionEnabled will be NO.
- */
-@property(nonatomic, readonly) BOOL isAnalyticsCollectionDeactivated;
-
-/**
- * The version ID of the client library, e.g. @"1100000".
- */
-@property(nonatomic, readonly, copy) NSString *libraryVersionID;
-
-/**
- * The flag indicating whether this object was constructed with the values in the default plist
- * file.
- */
-@property(nonatomic) BOOL usingOptionsFromDefaultPlist;
-
-/**
- * Whether or not Measurement was enabled. Measurement is enabled unless explicitly disabled in
- * GoogleService-Info.plist.
- */
-@property(nonatomic, readonly) BOOL isMeasurementEnabled;
-
-/**
- * Whether or not Analytics was enabled in the developer console.
- */
-@property(nonatomic, readonly) BOOL isAnalyticsEnabled;
-
-/**
- * Whether or not SignIn was enabled in the developer console.
- */
-@property(nonatomic, readonly) BOOL isSignInEnabled;
-
-/**
- * Whether or not editing is locked. This should occur after FIROptions has been set on a FIRApp.
- */
-@property(nonatomic, getter=isEditingLocked) BOOL editingLocked;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Public/FIRApp.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Public/FIRApp.h
deleted file mode 100644
index f5578c6..0000000
--- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Public/FIRApp.h
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@class FIROptions;
-
-NS_ASSUME_NONNULL_BEGIN
-
-/** A block that takes a BOOL and has no return value. */
-typedef void (^FIRAppVoidBoolCallback)(BOOL success) NS_SWIFT_NAME(FirebaseAppVoidBoolCallback);
-
-/**
- * The entry point of Firebase SDKs.
- *
- * Initialize and configure FIRApp using +[FIRApp configure]
- * or other customized ways as shown below.
- *
- * The logging system has two modes: default mode and debug mode. In default mode, only logs with
- * log level Notice, Warning and Error will be sent to device. In debug mode, all logs will be sent
- * to device. The log levels that Firebase uses are consistent with the ASL log levels.
- *
- * Enable debug mode by passing the -FIRDebugEnabled argument to the application. You can add this
- * argument in the application's Xcode scheme. When debug mode is enabled via -FIRDebugEnabled,
- * further executions of the application will also be in debug mode. In order to return to default
- * mode, you must explicitly disable the debug mode with the application argument -FIRDebugDisabled.
- *
- * It is also possible to change the default logging level in code by calling setLoggerLevel: on
- * the FIRConfiguration interface.
- */
-NS_SWIFT_NAME(FirebaseApp)
-@interface FIRApp : NSObject
-
-/**
- * Configures a default Firebase app. Raises an exception if any configuration step fails. The
- * default app is named "__FIRAPP_DEFAULT". This method should be called after the app is launched
- * and before using Firebase services. This method should be called from the main thread and
- * contains synchronous file I/O (reading GoogleService-Info.plist from disk).
- */
-+ (void)configure;
-
-/**
- * Configures the default Firebase app with the provided options. The default app is named
- * "__FIRAPP_DEFAULT". Raises an exception if any configuration step fails. This method should be
- * called from the main thread.
- *
- * @param options The Firebase application options used to configure the service.
- */
-+ (void)configureWithOptions:(FIROptions *)options NS_SWIFT_NAME(configure(options:));
-
-/**
- * Configures a Firebase app with the given name and options. Raises an exception if any
- * configuration step fails. This method should be called from the main thread.
- *
- * @param name The application's name given by the developer. The name should should only contain
-               Letters, Numbers and Underscore.
- * @param options The Firebase application options used to configure the services.
- */
-// clang-format off
-+ (void)configureWithName:(NSString *)name
-                  options:(FIROptions *)options NS_SWIFT_NAME(configure(name:options:));
-// clang-format on
-
-/**
- * Returns the default app, or nil if the default app does not exist.
- */
-+ (nullable FIRApp *)defaultApp NS_SWIFT_NAME(app());
-
-/**
- * Returns a previously created FIRApp instance with the given name, or nil if no such app exists.
- * This method is thread safe.
- */
-+ (nullable FIRApp *)appNamed:(NSString *)name NS_SWIFT_NAME(app(name:));
-
-/**
- * Returns the set of all extant FIRApp instances, or nil if there are no FIRApp instances. This
- * method is thread safe.
- */
-@property(class, readonly, nullable) NSDictionary<NSString *, FIRApp *> *allApps;
-
-/**
- * Cleans up the current FIRApp, freeing associated data and returning its name to the pool for
- * future use. This method is thread safe.
- */
-- (void)deleteApp:(FIRAppVoidBoolCallback)completion;
-
-/**
- * FIRApp instances should not be initialized directly. Call +[FIRApp configure],
- * +[FIRApp configureWithOptions:], or +[FIRApp configureWithNames:options:] directly.
- */
-- (instancetype)init NS_UNAVAILABLE;
-
-/**
- * Gets the name of this app.
- */
-@property(nonatomic, copy, readonly) NSString *name;
-
-/**
- * Gets a copy of the options for this app. These are non-modifiable.
- */
-@property(nonatomic, copy, readonly) FIROptions *options;
-
-/**
- * Gets or sets whether automatic data collection is enabled for all products. Defaults to `YES`
- * unless `FirebaseDataCollectionDefaultEnabled` is set to `NO` in your app's Info.plist. This value
- * is persisted across runs of the app so that it can be set once when users have consented to
- * collection.
- */
-@property(nonatomic, readwrite, getter=isDataCollectionDefaultEnabled)
-    BOOL dataCollectionDefaultEnabled;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Public/FIRConfiguration.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Public/FIRConfiguration.h
deleted file mode 100644
index 8de3b07..0000000
--- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Public/FIRConfiguration.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#import <FirebaseCore/FIRLoggerLevel.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-/**
- * This interface provides global level properties that the developer can tweak.
- */
-NS_SWIFT_NAME(FirebaseConfiguration)
-@interface FIRConfiguration : NSObject
-
-/** Returns the shared configuration object. */
-@property(class, nonatomic, readonly) FIRConfiguration *sharedInstance NS_SWIFT_NAME(shared);
-
-/**
- * Sets the logging level for internal Firebase logging. Firebase will only log messages
- * that are logged at or below loggerLevel. The messages are logged both to the Xcode
- * console and to the device's log. Note that if an app is running from AppStore, it will
- * never log above FIRLoggerLevelNotice even if loggerLevel is set to a higher (more verbose)
- * setting.
- *
- * @param loggerLevel The maximum logging level. The default level is set to FIRLoggerLevelNotice.
- */
-- (void)setLoggerLevel:(FIRLoggerLevel)loggerLevel;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Public/FIRLoggerLevel.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Public/FIRLoggerLevel.h
deleted file mode 100644
index dca3aa0..0000000
--- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Public/FIRLoggerLevel.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// Note that importing GULLoggerLevel.h will lead to a non-modular header
-// import error.
-
-/**
- * The log levels used by internal logging.
- */
-typedef NS_ENUM(NSInteger, FIRLoggerLevel) {
-  /** Error level, matches ASL_LEVEL_ERR. */
-  FIRLoggerLevelError = 3,
-  /** Warning level, matches ASL_LEVEL_WARNING. */
-  FIRLoggerLevelWarning = 4,
-  /** Notice level, matches ASL_LEVEL_NOTICE. */
-  FIRLoggerLevelNotice = 5,
-  /** Info level, matches ASL_LEVEL_INFO. */
-  FIRLoggerLevelInfo = 6,
-  /** Debug level, matches ASL_LEVEL_DEBUG. */
-  FIRLoggerLevelDebug = 7,
-  /** Minimum log level. */
-  FIRLoggerLevelMin = FIRLoggerLevelError,
-  /** Maximum log level. */
-  FIRLoggerLevelMax = FIRLoggerLevelDebug
-} NS_SWIFT_NAME(FirebaseLoggerLevel);
diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Public/FIROptions.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Public/FIROptions.h
deleted file mode 100644
index 67fbe5b..0000000
--- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Public/FIROptions.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-/**
- * This class provides constant fields of Google APIs.
- */
-NS_SWIFT_NAME(FirebaseOptions)
-@interface FIROptions : NSObject <NSCopying>
-
-/**
- * Returns the default options. The first time this is called it synchronously reads
- * GoogleService-Info.plist from disk.
- */
-+ (nullable FIROptions *)defaultOptions NS_SWIFT_NAME(defaultOptions());
-
-/**
- * An iOS API key used for authenticating requests from your app, e.g.
- * @"AIzaSyDdVgKwhZl0sTTTLZ7iTmt1r3N2cJLnaDk", used to identify your app to Google servers.
- */
-@property(nonatomic, copy, nullable) NSString *APIKey NS_SWIFT_NAME(apiKey);
-
-/**
- * The bundle ID for the application. Defaults to `[[NSBundle mainBundle] bundleID]` when not set
- * manually or in a plist.
- */
-@property(nonatomic, copy) NSString *bundleID;
-
-/**
- * The OAuth2 client ID for iOS application used to authenticate Google users, for example
- * @"12345.apps.googleusercontent.com", used for signing in with Google.
- */
-@property(nonatomic, copy, nullable) NSString *clientID;
-
-/**
- * The tracking ID for Google Analytics, e.g. @"UA-12345678-1", used to configure Google Analytics.
- */
-@property(nonatomic, copy, nullable) NSString *trackingID;
-
-/**
- * The Project Number from the Google Developer's console, for example @"012345678901", used to
- * configure Google Cloud Messaging.
- */
-@property(nonatomic, copy) NSString *GCMSenderID NS_SWIFT_NAME(gcmSenderID);
-
-/**
- * The Project ID from the Firebase console, for example @"abc-xyz-123".
- */
-@property(nonatomic, copy, nullable) NSString *projectID;
-
-/**
- * The Android client ID used in Google AppInvite when an iOS app has its Android version, for
- * example @"12345.apps.googleusercontent.com".
- */
-@property(nonatomic, copy, nullable) NSString *androidClientID;
-
-/**
- * The Google App ID that is used to uniquely identify an instance of an app.
- */
-@property(nonatomic, copy) NSString *googleAppID;
-
-/**
- * The database root URL, e.g. @"http://abc-xyz-123.firebaseio.com".
- */
-@property(nonatomic, copy, nullable) NSString *databaseURL;
-
-/**
- * The URL scheme used to set up Durable Deep Link service.
- */
-@property(nonatomic, copy, nullable) NSString *deepLinkURLScheme;
-
-/**
- * The Google Cloud Storage bucket name, e.g. @"abc-xyz-123.storage.firebase.com".
- */
-@property(nonatomic, copy, nullable) NSString *storageBucket;
-
-/**
- * The App Group identifier to share data between the application and the application extensions.
- * The App Group must be configured in the application and on the Apple Developer Portal. Default
- * value `nil`.
- */
-@property(nonatomic, copy, nullable) NSString *appGroupID;
-
-/**
- * Initializes a customized instance of FIROptions from the file at the given plist file path. This
- * will read the file synchronously from disk.
- * For example,
- * NSString *filePath =
- *     [[NSBundle mainBundle] pathForResource:@"GoogleService-Info" ofType:@"plist"];
- * FIROptions *options = [[FIROptions alloc] initWithContentsOfFile:filePath];
- * Returns nil if the plist file does not exist or is invalid.
- */
-- (nullable instancetype)initWithContentsOfFile:(NSString *)plistPath;
-
-/**
- * Initializes a customized instance of FIROptions with required fields. Use the mutable properties
- * to modify fields for configuring specific services.
- */
-// clang-format off
-- (instancetype)initWithGoogleAppID:(NSString *)googleAppID
-                        GCMSenderID:(NSString *)GCMSenderID
-    NS_SWIFT_NAME(init(googleAppID:gcmSenderID:));
-// clang-format on
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Public/FirebaseCore.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Public/FirebaseCore.h
deleted file mode 100644
index 95119ae..0000000
--- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Public/FirebaseCore.h
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FIRApp.h"
-#import "FIRConfiguration.h"
-#import "FIRLoggerLevel.h"
-#import "FIROptions.h"
diff --git a/assign5/openTok/Pods/FirebaseCore/LICENSE b/assign5/openTok/Pods/FirebaseCore/LICENSE
deleted file mode 100644
index d645695..0000000
--- a/assign5/openTok/Pods/FirebaseCore/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
diff --git a/assign5/openTok/Pods/FirebaseCore/README.md b/assign5/openTok/Pods/FirebaseCore/README.md
deleted file mode 100644
index b04a270..0000000
--- a/assign5/openTok/Pods/FirebaseCore/README.md
+++ /dev/null
@@ -1,282 +0,0 @@
-# Firebase iOS Open Source Development
- [![Actions Status][gh-auth-badge]][gh-actions]
- [![Actions Status][gh-core-badge]][gh-actions]
- [![Actions Status][gh-datatransport-badge]][gh-actions]
- [![Actions Status][gh-dynamiclinks-badge]][gh-actions]
- [![Actions Status][gh-firebasepod-badge]][gh-actions]
- [![Actions Status][gh-firestore-badge]][gh-actions]
- [![Actions Status][gh-interop-badge]][gh-actions]
- [![Actions Status][gh-messaging-badge]][gh-actions]
- [![Actions Status][gh-storage-badge]][gh-actions]
- [![Actions Status][gh-symbolcollision-badge]][gh-actions]
- [![Actions Status][gh-zip-badge]][gh-actions]
- [![Travis](https://travis-ci.org/firebase/firebase-ios-sdk.svg?branch=master)](https://travis-ci.org/firebase/firebase-ios-sdk)
-
-This repository contains all Firebase iOS SDK source except FirebaseAnalytics,
-FirebasePerformance, and FirebaseML.
-
-The repository also includes GoogleUtilities source. The
-[GoogleUtilities](GoogleUtilities/README.md) pod is
-a set of utilities used by Firebase and other Google products.
-
-Firebase is an app development platform with tools to help you build, grow and
-monetize your app. More information about Firebase can be found at
-[https://firebase.google.com](https://firebase.google.com).
-
-## Installation
-
-See the three subsections for details about three different installation methods.
-1. [Standard pod install](README.md#standard-pod-install)
-1. [Installing from the GitHub repo](README.md#installing-from-github)
-1. [Experimental Carthage](README.md#carthage-ios-only)
-
-### Standard pod install
-
-Go to
-[https://firebase.google.com/docs/ios/setup](https://firebase.google.com/docs/ios/setup).
-
-### Installing from GitHub
-
-For releases starting with 5.0.0, the source for each release is also deployed
-to CocoaPods master and available via standard
-[CocoaPods Podfile syntax](https://guides.cocoapods.org/syntax/podfile.html#pod).
-
-These instructions can be used to access the Firebase repo at other branches,
-tags, or commits.
-
-#### Background
-
-See
-[the Podfile Syntax Reference](https://guides.cocoapods.org/syntax/podfile.html#pod)
-for instructions and options about overriding pod source locations.
-
-#### Accessing Firebase Source Snapshots
-
-All of the official releases are tagged in this repo and available via CocoaPods. To access a local
-source snapshot or unreleased branch, use Podfile directives like the following:
-
-To access FirebaseFirestore via a branch:
-```
-pod 'FirebaseCore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master'
-pod 'FirebaseFirestore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master'
-```
-
-To access FirebaseMessaging via a checked out version of the firebase-ios-sdk repo do:
-
-```
-pod 'FirebaseCore', :path => '/path/to/firebase-ios-sdk'
-pod 'FirebaseMessaging', :path => '/path/to/firebase-ios-sdk'
-```
-
-### Carthage (iOS only)
-
-Instructions for the experimental Carthage distribution are at
-[Carthage](Carthage.md).
-
-### Rome
-
-Instructions for installing binary frameworks via
-[Rome](https://github.com/CocoaPods/Rome) are at [Rome](Rome.md).
-
-### Using Firebase from a Framework or a library
-
-[Using Firebase from a Framework or a library](docs/firebase_in_libraries.md)
-
-## Development
-
-To develop Firebase software in this repository, ensure that you have at least
-the following software:
-
-  * Xcode 10.1 (or later)
-  * CocoaPods 1.7.2 (or later)
-  * [CocoaPods generate](https://github.com/square/cocoapods-generate)
-
-For the pod that you want to develop:
-
-`pod gen Firebase{name here}.podspec --local-sources=./ --auto-open --platforms=ios`
-
-Note: If the CocoaPods cache is out of date, you may need to run
-`pod repo update` before the `pod gen` command.
-
-Note: Set the `--platforms` option to `macos` or `tvos` to develop/test for
-those platforms. Since 10.2, Xcode does not properly handle multi-platform
-CocoaPods workspaces.
-
-Firestore has a self contained Xcode project. See
-[Firestore/README.md](Firestore/README.md).
-
-### Development for Catalyst
-* `pod gen {name here}.podspec --local-sources=./ --auto-open --platforms=ios`
-* Check the Mac box in the App-iOS Build Settings
-* Sign the App in the Settings Signing & Capabilities tab
-* Click Pods in the Project Manager
-* Add Signing to the iOS host app and unit test targets
-* Select the Unit-unit scheme
-* Run it to build and test
-
-### Adding a New Firebase Pod
-
-See [AddNewPod.md](AddNewPod.md).
-
-### Code Formatting
-
-To ensure that the code is formatted consistently, run the script
-[./scripts/style.sh](https://github.com/firebase/firebase-ios-sdk/blob/master/scripts/style.sh)
-before creating a PR.
-
-Travis will verify that any code changes are done in a style compliant way. Install
-`clang-format` and `swiftformat`.
-These commands will get the right versions:
-
-```
-brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/c6f1cbd/Formula/clang-format.rb
-brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/c13eda8/Formula/swiftformat.rb
-```
-
-Note: if you already have a newer version of these installed you may need to
-`brew switch` to this version.
-
-To update this section, find the versions of clang-format and swiftformat.rb to
-match the versions in the CI failure logs
-[here](https://github.com/Homebrew/homebrew-core/tree/master/Formula).
-
-### Running Unit Tests
-
-Select a scheme and press Command-u to build a component and run its unit tests.
-
-#### Viewing Code Coverage (Deprecated)
-
-First, make sure that [xcov](https://github.com/nakiostudio/xcov) is installed with `gem install xcov`.
-
-After running the `AllUnitTests_iOS` scheme in Xcode, execute
-`xcov --workspace Firebase.xcworkspace --scheme AllUnitTests_iOS --output_directory xcov_output`
-at Example/ in the terminal. This will aggregate the coverage, and you can run `open xcov_output/index.html` to see the results.
-
-### Running Sample Apps
-In order to run the sample apps and integration tests, you'll need valid
-`GoogleService-Info.plist` files for those samples. The Firebase Xcode project contains dummy plist
-files without real values, but can be replaced with real plist files. To get your own
-`GoogleService-Info.plist` files:
-
-1. Go to the [Firebase Console](https://console.firebase.google.com/)
-2. Create a new Firebase project, if you don't already have one
-3. For each sample app you want to test, create a new Firebase app with the sample app's bundle
-identifier (e.g. `com.google.Database-Example`)
-4. Download the resulting `GoogleService-Info.plist` and replace the appropriate dummy plist file
-(e.g. in [Example/Database/App/](Example/Database/App/));
-
-Some sample apps like Firebase Messaging ([Example/Messaging/App](Example/Messaging/App)) require
-special Apple capabilities, and you will have to change the sample app to use a unique bundle
-identifier that you can control in your own Apple Developer account.
-
-## Specific Component Instructions
-See the sections below for any special instructions for those components.
-
-### Firebase Auth
-
-If you're doing specific Firebase Auth development, see
-[the Auth Sample README](FirebaseAuth/Tests/Sample/README.md) for instructions about
-building and running the FirebaseAuth pod along with various samples and tests.
-
-### Firebase Database
-
-To run the Database Integration tests, make your database authentication rules
-[public](https://firebase.google.com/docs/database/security/quickstart).
-
-### Firebase Storage
-
-To run the Storage Integration tests, follow the instructions in
-[FIRStorageIntegrationTests.m](FirebaseStorage/Tests/Integration/FIRStorageIntegrationTests.m).
-
-#### Push Notifications
-
-Push notifications can only be delivered to specially provisioned App IDs in the developer portal.
-In order to actually test receiving push notifications, you will need to:
-
-1. Change the bundle identifier of the sample app to something you own in your Apple Developer
-account, and enable that App ID for push notifications.
-2. You'll also need to
-[upload your APNs Provider Authentication Key or certificate to the Firebase Console](https://firebase.google.com/docs/cloud-messaging/ios/certs)
-at **Project Settings > Cloud Messaging > [Your Firebase App]**.
-3. Ensure your iOS device is added to your Apple Developer portal as a test device.
-
-#### iOS Simulator
-
-The iOS Simulator cannot register for remote notifications, and will not receive push notifications.
-In order to receive push notifications, you'll have to follow the steps above and run the app on a
-physical device.
-
-## Community Supported Efforts
-
-We've seen an amazing amount of interest and contributions to improve the Firebase SDKs, and we are
-very grateful!  We'd like to empower as many developers as we can to be able to use Firebase and
-participate in the Firebase community.
-
-### tvOS, macOS, watchOS and Catalyst
-Thanks to contributions from the community, many of Firebase SDKs now compile, run unit tests, and work on
-tvOS, macOS, watchOS and Catalyst.
-
-For tvOS, checkout the [Sample](Example/tvOSSample).
-For watchOS, currently only Messaging and Storage (and their dependencies) have limited support. Checkout the
-[Independent Watch App Sample](Example/watchOSSample).
-
-Keep in mind that macOS, tvOS, watchOS and Catalyst are not officially supported by Firebase, and this
-repository is actively developed primarily for iOS. While we can catch basic unit test issues with
-Travis, there may be some changes where the SDK no longer works as expected on macOS, tvOS or watchOS. If you
-encounter this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues).
-
-During app setup in the console, you may get to a step that mentions something like "Checking if the app
-has communicated with our servers". This relies on Analytics and will not work on macOS/tvOS/watchOS/Catalyst.
-**It's safe to ignore the message and continue**, the rest of the SDKs will work as expected.
-
-To install, add a subset of the following to the Podfile:
-
-```
-pod 'Firebase/ABTesting'     # No watchOS support yet
-pod 'Firebase/Auth'          # No watchOS support yet
-pod 'Firebase/Crashlytics'   # No watchOS support yet
-pod 'Firebase/Database'      # No watchOS support yet
-pod 'Firebase/Firestore'     # No watchOS support yet
-pod 'Firebase/Functions'     # No watchOS support yet
-pod 'Firebase/Messaging'
-pod 'Firebase/RemoteConfig'  # No watchOS support yet
-pod 'Firebase/Storage'
-```
-
-#### Additional Catalyst Notes
-
-* FirebaseAuth and FirebaseMessaging require adding `Keychain Sharing Capability`
-to Build Settings.
-* FirebaseFirestore requires signing the
-[gRPC Resource target](https://github.com/firebase/firebase-ios-sdk/issues/3500#issuecomment-518741681).
-
-## Roadmap
-
-See [Roadmap](ROADMAP.md) for more about the Firebase iOS SDK Open Source
-plans and directions.
-
-## Contributing
-
-See [Contributing](CONTRIBUTING.md) for more information on contributing to the Firebase
-iOS SDK.
-
-## License
-
-The contents of this repository is licensed under the
-[Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0).
-
-Your use of Firebase is governed by the
-[Terms of Service for Firebase Services](https://firebase.google.com/terms/).
-
-[gh-actions]: https://github.com/firebase/firebase-ios-sdk/actions
-[gh-auth-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/auth/badge.svg
-[gh-core-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/core/badge.svg
-[gh-datatransport-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/datatransport/badge.svg
-[gh-dynamiclinks-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/dynamiclinks/badge.svg
-[gh-firebasepod-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firebasepod/badge.svg
-[gh-firestore-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firestore/badge.svg
-[gh-interop-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/interop/badge.svg
-[gh-messaging-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/messaging/badge.svg
-[gh-storage-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/storage/badge.svg
-[gh-symbolcollision-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/symbolcollision/badge.svg
-[gh-zip-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/zip/badge.svg
diff --git a/assign5/openTok/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/FIRCoreDiagnostics.m b/assign5/openTok/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/FIRCoreDiagnostics.m
deleted file mode 100644
index 87d57c4..0000000
--- a/assign5/openTok/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/FIRCoreDiagnostics.m
+++ /dev/null
@@ -1,647 +0,0 @@
-/*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <objc/runtime.h>
-#include <sys/utsname.h>
-
-#import <GoogleDataTransport/GDTCORConsoleLogger.h>
-#import <GoogleDataTransport/GDTCOREvent.h>
-#import <GoogleDataTransport/GDTCORTargets.h>
-#import <GoogleDataTransport/GDTCORTransport.h>
-
-#import <GoogleUtilities/GULAppEnvironmentUtil.h>
-#import <GoogleUtilities/GULHeartbeatDateStorage.h>
-#import <GoogleUtilities/GULLogger.h>
-
-#import <FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsData.h>
-#import <FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsInterop.h>
-
-#import <nanopb/pb.h>
-#import <nanopb/pb_decode.h>
-#import <nanopb/pb_encode.h>
-
-#import "FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.h"
-
-/** The logger service string to use when printing to the console. */
-static GULLoggerService kFIRCoreDiagnostics = @"[FirebaseCoreDiagnostics/FIRCoreDiagnostics]";
-
-#ifdef FIREBASE_BUILD_ZIP_FILE
-static BOOL kUsingZipFile = YES;
-#else   // FIREBASE_BUILD_ZIP_FILE
-static BOOL kUsingZipFile = NO;
-#endif  // FIREBASE_BUILD_ZIP_FILE
-
-#ifdef FIREBASE_BUILD_CARTHAGE
-#define kDeploymentType logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_CARTHAGE
-#elif FIREBASE_BUILD_ZIP_FILE
-#define kDeploymentType logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_ZIP_FILE
-#else
-#define kDeploymentType logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_COCOAPODS
-#endif
-
-static NSString *const kFIRServiceMLVisionOnDeviceAutoML = @"MLVisionOnDeviceAutoML";
-static NSString *const kFIRServiceMLVisionOnDeviceFace = @"MLVisionOnDeviceFace";
-static NSString *const kFIRServiceMLVisionOnDeviceBarcode = @"MLVisionOnDeviceBarcode";
-static NSString *const kFIRServiceMLVisionOnDeviceText = @"MLVisionOnDeviceText";
-static NSString *const kFIRServiceMLVisionOnDeviceLabel = @"MLVisionOnDeviceLabel";
-static NSString *const kFIRServiceMLVisionOnDeviceObjectDetection =
-    @"MLVisionOnDeviceObjectDetection";
-static NSString *const kFIRServiceMLModelInterpreter = @"MLModelInterpreter";
-
-static NSString *const kFIRServiceAdMob = @"AdMob";
-static NSString *const kFIRServiceAuth = @"Auth";
-static NSString *const kFIRServiceAuthUI = @"AuthUI";
-static NSString *const kFIRServiceCrash = @"Crash";
-static NSString *const kFIRServiceDatabase = @"Database";
-static NSString *const kFIRServiceDynamicLinks = @"DynamicLinks";
-static NSString *const kFIRServiceFirestore = @"Firestore";
-static NSString *const kFIRServiceFunctions = @"Functions";
-static NSString *const kFIRServiceIAM = @"InAppMessaging";
-static NSString *const kFIRServiceInstanceID = @"InstanceID";
-static NSString *const kFIRServiceInvites = @"Invites";
-static NSString *const kFIRServiceMessaging = @"Messaging";
-static NSString *const kFIRServiceMeasurement = @"Measurement";
-static NSString *const kFIRServicePerformance = @"Performance";
-static NSString *const kFIRServiceRemoteConfig = @"RemoteConfig";
-static NSString *const kFIRServiceStorage = @"Storage";
-static NSString *const kGGLServiceAnalytics = @"Analytics";
-static NSString *const kGGLServiceSignIn = @"SignIn";
-static NSString *const kFIRAppDiagnosticsConfigurationTypeKey =
-    @"FIRAppDiagnosticsConfigurationTypeKey";
-static NSString *const kFIRAppDiagnosticsFIRAppKey = @"FIRAppDiagnosticsFIRAppKey";
-static NSString *const kFIRAppDiagnosticsSDKNameKey = @"FIRAppDiagnosticsSDKNameKey";
-static NSString *const kFIRAppDiagnosticsSDKVersionKey = @"FIRAppDiagnosticsSDKVersionKey";
-static NSString *const kFIRCoreDiagnosticsHeartbeatTag = @"FIRCoreDiagnostics";
-
-/**
- * The file name to the recent heartbeat date.
- */
-NSString *const kFIRCoreDiagnosticsHeartbeatDateFileName = @"FIREBASE_DIAGNOSTICS_HEARTBEAT_DATE";
-
-/**
- * @note This should implement the GDTCOREventDataObject protocol, but can't because of
- * weak-linking.
- */
-@interface FIRCoreDiagnosticsLog : NSObject
-
-/** The config that will be converted to proto bytes. */
-@property(nonatomic) logs_proto_mobilesdk_ios_ICoreConfiguration config;
-
-@end
-
-@implementation FIRCoreDiagnosticsLog
-
-- (instancetype)initWithConfig:(logs_proto_mobilesdk_ios_ICoreConfiguration)config {
-  self = [super init];
-  if (self) {
-    _config = config;
-  }
-  return self;
-}
-
-// Provided and required by the GDTCOREventDataObject protocol.
-- (NSData *)transportBytes {
-  pb_ostream_t sizestream = PB_OSTREAM_SIZING;
-
-  // Encode 1 time to determine the size.
-  if (!pb_encode(&sizestream, logs_proto_mobilesdk_ios_ICoreConfiguration_fields, &_config)) {
-    GDTCORLogError(GDTCORMCETransportBytesError, @"Error in nanopb encoding for size: %s",
-                   PB_GET_ERROR(&sizestream));
-  }
-
-  // Encode a 2nd time to actually get the bytes from it.
-  size_t bufferSize = sizestream.bytes_written;
-  CFMutableDataRef dataRef = CFDataCreateMutable(CFAllocatorGetDefault(), bufferSize);
-  CFDataSetLength(dataRef, bufferSize);
-  pb_ostream_t ostream = pb_ostream_from_buffer((void *)CFDataGetBytePtr(dataRef), bufferSize);
-  if (!pb_encode(&ostream, logs_proto_mobilesdk_ios_ICoreConfiguration_fields, &_config)) {
-    GDTCORLogError(GDTCORMCETransportBytesError, @"Error in nanopb encoding for bytes: %s",
-                   PB_GET_ERROR(&ostream));
-  }
-  CFDataSetLength(dataRef, ostream.bytes_written);
-
-  return CFBridgingRelease(dataRef);
-}
-
-- (void)dealloc {
-  pb_release(logs_proto_mobilesdk_ios_ICoreConfiguration_fields, &_config);
-}
-
-@end
-
-NS_ASSUME_NONNULL_BEGIN
-
-/** This class produces a protobuf containing diagnostics and usage data to be logged. */
-@interface FIRCoreDiagnostics : NSObject <FIRCoreDiagnosticsInterop>
-
-/** The queue on which all diagnostics collection will occur. */
-@property(nonatomic, readonly) dispatch_queue_t diagnosticsQueue;
-
-/** The transport object used to send data. */
-@property(nonatomic, readonly) GDTCORTransport *transport;
-
-/** The storage to store the date of the last sent heartbeat. */
-@property(nonatomic, readonly) GULHeartbeatDateStorage *heartbeatDateStorage;
-
-@end
-
-NS_ASSUME_NONNULL_END
-
-@implementation FIRCoreDiagnostics
-
-+ (instancetype)sharedInstance {
-  static FIRCoreDiagnostics *sharedInstance;
-  static dispatch_once_t onceToken;
-  dispatch_once(&onceToken, ^{
-    sharedInstance = [[FIRCoreDiagnostics alloc] init];
-  });
-  return sharedInstance;
-}
-
-- (instancetype)init {
-  GDTCORTransport *transport = [[GDTCORTransport alloc] initWithMappingID:@"137"
-                                                             transformers:nil
-                                                                   target:kGDTCORTargetFLL];
-
-  GULHeartbeatDateStorage *dateStorage =
-      [[GULHeartbeatDateStorage alloc] initWithFileName:kFIRCoreDiagnosticsHeartbeatDateFileName];
-
-  return [self initWithTransport:transport heartbeatDateStorage:dateStorage];
-}
-
-/** Initializer for unit tests.
- *
- * @param transport A `GDTCORTransport` instance which that be used to send event.
- * @param heartbeatDateStorage An instanse of date storage to track heartbeat sending.
- * @return Returns the initialized `FIRCoreDiagnostics` instance.
- */
-- (instancetype)initWithTransport:(GDTCORTransport *)transport
-             heartbeatDateStorage:(GULHeartbeatDateStorage *)heartbeatDateStorage {
-  self = [super init];
-  if (self) {
-    _diagnosticsQueue =
-        dispatch_queue_create("com.google.FIRCoreDiagnostics", DISPATCH_QUEUE_SERIAL);
-    _transport = transport;
-    _heartbeatDateStorage = heartbeatDateStorage;
-  }
-  return self;
-}
-
-#pragma mark - Metadata helpers
-
-/** Returns the model of iOS device. Sample platform strings are @"iPhone7,1" for iPhone 6 Plus,
- * @"iPhone7,2" for iPhone 6, etc. Refer to the Hardware strings at
- * https://en.wikipedia.org/wiki/List_of_iOS_devices
- *
- * @return The device model as an NSString.
- */
-+ (NSString *)deviceModel {
-  static NSString *deviceModel = nil;
-  if (deviceModel == nil) {
-    struct utsname systemInfo;
-    uname(&systemInfo);
-    deviceModel = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
-  }
-  return deviceModel;
-}
-
-#pragma mark - nanopb helper functions
-
-/** Callocs a pb_bytes_array and copies the given NSString's bytes into the bytes array.
- *
- * @note Memory needs to be free manually, through pb_free or pb_release.
- * @param string The string to encode as pb_bytes.
- */
-pb_bytes_array_t *FIREncodeString(NSString *string) {
-  NSData *stringBytes = [string dataUsingEncoding:NSUTF8StringEncoding];
-  return FIREncodeData(stringBytes);
-}
-
-/** Callocs a pb_bytes_array and copies the given NSData bytes into the bytes array.
- *
- * @note Memory needs to be free manually, through pb_free or pb_release.
- * @param data The data to copy into the new bytes array.
- */
-pb_bytes_array_t *FIREncodeData(NSData *data) {
-  pb_bytes_array_t *pbBytesArray = calloc(1, PB_BYTES_ARRAY_T_ALLOCSIZE(data.length));
-  if (pbBytesArray != NULL) {
-    [data getBytes:pbBytesArray->bytes length:data.length];
-    pbBytesArray->size = (pb_size_t)data.length;
-  }
-  return pbBytesArray;
-}
-
-/** Maps a service string to the representative nanopb enum.
- *
- * @param serviceString The SDK service string to convert.
- * @return The representative nanopb enum.
- */
-logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType FIRMapFromServiceStringToTypeEnum(
-    NSString *serviceString) {
-  static NSDictionary<NSString *, NSNumber *> *serviceStringToTypeEnum;
-  if (serviceStringToTypeEnum == nil) {
-    serviceStringToTypeEnum = @{
-      kFIRServiceAdMob : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ADMOB),
-      kFIRServiceMessaging : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MESSAGING),
-      kFIRServiceMeasurement :
-          @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MEASUREMENT),
-      kFIRServiceRemoteConfig :
-          @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_REMOTE_CONFIG),
-      kFIRServiceDatabase : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_DATABASE),
-      kFIRServiceDynamicLinks :
-          @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_DYNAMIC_LINKS),
-      kFIRServiceAuth : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_AUTH),
-      kFIRServiceAuthUI : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_AUTH_UI),
-      kFIRServiceFirestore : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_FIRESTORE),
-      kFIRServiceFunctions : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_FUNCTIONS),
-      kFIRServicePerformance :
-          @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_PERFORMANCE),
-      kFIRServiceStorage : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_STORAGE),
-      kFIRServiceMLVisionOnDeviceAutoML :
-          @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_AUTOML),
-      kFIRServiceMLVisionOnDeviceFace :
-          @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_FACE),
-      kFIRServiceMLVisionOnDeviceBarcode :
-          @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_BARCODE),
-      kFIRServiceMLVisionOnDeviceText :
-          @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_TEXT),
-      kFIRServiceMLVisionOnDeviceLabel :
-          @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_LABEL),
-      kFIRServiceMLVisionOnDeviceObjectDetection : @(
-          logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_OBJECT_DETECTION),
-      kFIRServiceMLModelInterpreter :
-          @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_MODEL_INTERPRETER),
-      kGGLServiceAnalytics : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ANALYTICS),
-      kGGLServiceSignIn : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_SIGN_IN),
-      kFIRServiceIAM : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_IN_APP_MESSAGING),
-    };
-  }
-  if (serviceStringToTypeEnum[serviceString] != nil) {
-    return (int32_t)serviceStringToTypeEnum[serviceString].longLongValue;
-  }
-  return logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_UNKNOWN_SDK_SERVICE;
-}
-
-#pragma mark - Proto population functions
-
-/** Populates the given proto with data related to an SDK logDiagnostics call from the
- * diagnosticObjects dictionary.
- *
- * @param config The proto to populate
- * @param diagnosticObjects The dictionary of diagnostics objects.
- */
-void FIRPopulateProtoWithInfoFromUserInfoParams(logs_proto_mobilesdk_ios_ICoreConfiguration *config,
-                                                NSDictionary<NSString *, id> *diagnosticObjects) {
-  NSNumber *configurationType = diagnosticObjects[kFIRCDConfigurationTypeKey];
-  if (configurationType != nil) {
-    switch (configurationType.integerValue) {
-      case logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_CORE:
-        config->configuration_type =
-            logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_CORE;
-        config->has_configuration_type = 1;
-        break;
-      case logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_SDK:
-        config->configuration_type =
-            logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_SDK;
-        config->has_configuration_type = 1;
-        break;
-      default:
-        break;
-    }
-  }
-
-  NSString *sdkName = diagnosticObjects[kFIRCDSdkNameKey];
-  if (sdkName) {
-    config->sdk_name = FIRMapFromServiceStringToTypeEnum(sdkName);
-    config->has_sdk_name = 1;
-  }
-
-  NSString *version = diagnosticObjects[kFIRCDSdkVersionKey];
-  if (version) {
-    config->sdk_version = FIREncodeString(version);
-  }
-}
-
-/** Populates the given proto with data from the calling FIRApp using the given
- * diagnosticObjects dictionary.
- *
- * @param config The proto to populate
- * @param diagnosticObjects The dictionary of diagnostics objects.
- */
-void FIRPopulateProtoWithCommonInfoFromApp(logs_proto_mobilesdk_ios_ICoreConfiguration *config,
-                                           NSDictionary<NSString *, id> *diagnosticObjects) {
-  config->pod_name = logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_FIREBASE;
-  config->has_pod_name = 1;
-
-  if (!diagnosticObjects[kFIRCDllAppsCountKey]) {
-    GDTCORLogError(GDTCORMCEGeneralError, @"%@",
-                   @"App count is a required value in the data dict.");
-  }
-  config->app_count = (int32_t)[diagnosticObjects[kFIRCDllAppsCountKey] integerValue];
-  config->has_app_count = 1;
-
-  NSString *googleAppID = diagnosticObjects[kFIRCDGoogleAppIDKey];
-  if (googleAppID.length) {
-    config->app_id = FIREncodeString(googleAppID);
-  }
-
-  NSString *bundleID = diagnosticObjects[kFIRCDBundleIDKey];
-  if (bundleID.length) {
-    config->bundle_id = FIREncodeString(bundleID);
-  }
-
-  NSString *firebaseUserAgent = diagnosticObjects[kFIRCDFirebaseUserAgentKey];
-  if (firebaseUserAgent.length) {
-    config->platform_info = FIREncodeString(firebaseUserAgent);
-  }
-
-  NSNumber *usingOptionsFromDefaultPlist = diagnosticObjects[kFIRCDUsingOptionsFromDefaultPlistKey];
-  if (usingOptionsFromDefaultPlist != nil) {
-    config->use_default_app = [usingOptionsFromDefaultPlist boolValue];
-    config->has_use_default_app = 1;
-  }
-
-  NSString *libraryVersionID = diagnosticObjects[kFIRCDLibraryVersionIDKey];
-  if (libraryVersionID) {
-    config->icore_version = FIREncodeString(libraryVersionID);
-  }
-
-  NSString *deviceModel = [FIRCoreDiagnostics deviceModel];
-  if (deviceModel.length) {
-    config->device_model = FIREncodeString(deviceModel);
-  }
-
-  NSString *osVersion = [GULAppEnvironmentUtil systemVersion];
-  if (osVersion.length) {
-    config->os_version = FIREncodeString(osVersion);
-  }
-
-  config->using_zip_file = kUsingZipFile;
-  config->has_using_zip_file = 1;
-  config->deployment_type = kDeploymentType;
-  config->has_deployment_type = 1;
-  config->deployed_in_app_store = [GULAppEnvironmentUtil isFromAppStore];
-  config->has_deployed_in_app_store = 1;
-}
-
-/** Populates the given proto with installed services data.
- *
- * @param config The proto to populate
- */
-void FIRPopulateProtoWithInstalledServices(logs_proto_mobilesdk_ios_ICoreConfiguration *config) {
-  NSMutableArray<NSNumber *> *sdkServiceInstalledArray = [NSMutableArray array];
-
-  // AdMob
-  if (NSClassFromString(@"GADBannerView") != nil) {
-    [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceAdMob))];
-  }
-  // CloudMessaging
-  if (NSClassFromString(@"FIRMessaging") != nil) {
-    [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMessaging))];
-  }
-  // RemoteConfig
-  if (NSClassFromString(@"FIRRemoteConfig") != nil) {
-    [sdkServiceInstalledArray
-        addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceRemoteConfig))];
-  }
-  // Measurement/Analtyics
-  if (NSClassFromString(@"FIRAnalytics") != nil) {
-    [sdkServiceInstalledArray
-        addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMeasurement))];
-  }
-  // ML Vision On Device AutoML.
-  if (NSClassFromString(@"FIRVisionOnDeviceAutoMLImageLabelerOptions") != nil) {
-    [sdkServiceInstalledArray
-        addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMLVisionOnDeviceAutoML))];
-  }
-  // ML Vision On Device Face.
-  if (NSClassFromString(@"FIRVisionFaceDetector") != nil &&
-      NSClassFromString(@"GMVFaceDetector") != nil) {
-    [sdkServiceInstalledArray
-        addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMLVisionOnDeviceFace))];
-  }
-  // ML Vision On Device Barcode.
-  if (NSClassFromString(@"FIRVisionBarcodeDetector") != nil &&
-      NSClassFromString(@"GMVBarcodeDetector") != nil) {
-    [sdkServiceInstalledArray
-        addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMLVisionOnDeviceBarcode))];
-  }
-  // ML Vision On Device Text.
-  if (NSClassFromString(@"FIRVisionTextDetector") != nil &&
-      NSClassFromString(@"GMVTextDetector") != nil) {
-    [sdkServiceInstalledArray
-        addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMLVisionOnDeviceText))];
-  }
-  // ML Vision On Device Image Label.
-  if (NSClassFromString(@"FIRVisionLabelDetector") != nil &&
-      NSClassFromString(@"GMVLabelDetector") != nil) {
-    [sdkServiceInstalledArray
-        addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMLVisionOnDeviceLabel))];
-  }
-  // ML Vision On Device Object.
-  if (NSClassFromString(@"FIRVisionObjectDetector") != nil) {
-    [sdkServiceInstalledArray
-        addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMLVisionOnDeviceObjectDetection))];
-  }
-  // ML Model Interpreter
-  if (NSClassFromString(@"FIRCustomModelInterpreter") != nil) {
-    [sdkServiceInstalledArray
-        addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMLModelInterpreter))];
-  }
-  // Database
-  if (NSClassFromString(@"FIRDatabase") != nil) {
-    [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceDatabase))];
-  }
-  // DynamicDeepLink
-  if (NSClassFromString(@"FIRDynamicLinks") != nil) {
-    [sdkServiceInstalledArray
-        addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceDynamicLinks))];
-  }
-  // Auth
-  if (NSClassFromString(@"FIRAuth") != nil) {
-    [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceAuth))];
-  }
-  // AuthUI
-  if (NSClassFromString(@"FUIAuth") != nil) {
-    [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceAuthUI))];
-  }
-  // Firestore
-  if (NSClassFromString(@"FIRFirestore") != nil) {
-    [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceFirestore))];
-  }
-  // Functions
-  if (NSClassFromString(@"FIRFunctions") != nil) {
-    [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceFunctions))];
-  }
-  // Performance
-  if (NSClassFromString(@"FIRPerformance") != nil) {
-    [sdkServiceInstalledArray
-        addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServicePerformance))];
-  }
-  // Storage
-  if (NSClassFromString(@"FIRStorage") != nil) {
-    [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceStorage))];
-  }
-  // SignIn via Google pod
-  if (NSClassFromString(@"GIDSignIn") != nil && NSClassFromString(@"GGLContext") != nil) {
-    [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kGGLServiceSignIn))];
-  }
-  // Analytics via Google pod
-  if (NSClassFromString(@"GAI") != nil && NSClassFromString(@"GGLContext") != nil) {
-    [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kGGLServiceAnalytics))];
-  }
-
-  // In-App Messaging
-  if (NSClassFromString(@"FIRInAppMessaging") != nil) {
-    [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceIAM))];
-  }
-
-  logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType *servicesInstalled =
-      calloc(sdkServiceInstalledArray.count,
-             sizeof(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType));
-  if (servicesInstalled == NULL) {
-    return;
-  }
-  for (NSUInteger i = 0; i < sdkServiceInstalledArray.count; i++) {
-    NSNumber *typeEnum = sdkServiceInstalledArray[i];
-    logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType serviceType =
-        (int32_t)typeEnum.integerValue;
-    servicesInstalled[i] = serviceType;
-  }
-
-  config->sdk_service_installed = servicesInstalled;
-  config->sdk_service_installed_count = (int32_t)sdkServiceInstalledArray.count;
-}
-
-/** Populates the proto with the number of linked frameworks.
- *
- * @param config The proto to populate.
- */
-void FIRPopulateProtoWithNumberOfLinkedFrameworks(
-    logs_proto_mobilesdk_ios_ICoreConfiguration *config) {
-  int numFrameworks = -1;  // Subtract the app binary itself.
-  unsigned int numImages;
-  const char **imageNames = objc_copyImageNames(&numImages);
-  for (unsigned int i = 0; i < numImages; i++) {
-    NSString *imageName = [NSString stringWithUTF8String:imageNames[i]];
-    if ([imageName rangeOfString:@"System/Library"].length != 0        // Apple .frameworks
-        || [imageName rangeOfString:@"Developer/Library"].length != 0  // Xcode debug .frameworks
-        || [imageName rangeOfString:@"usr/lib"].length != 0) {         // Public .dylibs
-      continue;
-    }
-    numFrameworks++;
-  }
-  free(imageNames);
-  config->dynamic_framework_count = numFrameworks;
-  config->has_dynamic_framework_count = 1;
-}
-
-/** Populates the proto with Info.plist values.
- *
- * @param config The proto to populate.
- */
-void FIRPopulateProtoWithInfoPlistValues(logs_proto_mobilesdk_ios_ICoreConfiguration *config) {
-  NSDictionary<NSString *, id> *info = [[NSBundle mainBundle] infoDictionary];
-
-  NSString *xcodeVersion = info[@"DTXcodeBuild"] ?: @"";
-  NSString *sdkVersion = info[@"DTSDKBuild"] ?: @"";
-  NSString *combinedVersions = [NSString stringWithFormat:@"%@-%@", xcodeVersion, sdkVersion];
-  config->apple_framework_version = FIREncodeString(combinedVersions);
-
-  NSString *minVersion = info[@"MinimumOSVersion"];
-  if (minVersion) {
-    config->min_supported_ios_version = FIREncodeString(minVersion);
-  }
-
-  // Apps can turn off swizzling in the Info.plist, check if they've explicitly set the value and
-  // report it. It's enabled by default.
-  NSNumber *appDelegateSwizzledNum = info[@"FirebaseAppDelegateProxyEnabled"];
-  BOOL appDelegateSwizzled = YES;
-  if ([appDelegateSwizzledNum isKindOfClass:[NSNumber class]]) {
-    appDelegateSwizzled = [appDelegateSwizzledNum boolValue];
-  }
-  config->swizzling_enabled = appDelegateSwizzled;
-  config->has_swizzling_enabled = 1;
-}
-
-#pragma mark - FIRCoreDiagnosticsInterop
-
-+ (void)sendDiagnosticsData:(nonnull id<FIRCoreDiagnosticsData>)diagnosticsData {
-  FIRCoreDiagnostics *diagnostics = [FIRCoreDiagnostics sharedInstance];
-  [diagnostics sendDiagnosticsData:diagnosticsData];
-}
-
-- (void)sendDiagnosticsData:(nonnull id<FIRCoreDiagnosticsData>)diagnosticsData {
-  dispatch_async(self.diagnosticsQueue, ^{
-    NSDictionary<NSString *, id> *diagnosticObjects = diagnosticsData.diagnosticObjects;
-    NSNumber *isDataCollectionDefaultEnabled =
-        diagnosticObjects[kFIRCDIsDataCollectionDefaultEnabledKey];
-    if (isDataCollectionDefaultEnabled && ![isDataCollectionDefaultEnabled boolValue]) {
-      return;
-    }
-
-    // Create the proto.
-    logs_proto_mobilesdk_ios_ICoreConfiguration icore_config =
-        logs_proto_mobilesdk_ios_ICoreConfiguration_init_default;
-
-    icore_config.using_gdt = 1;
-    icore_config.has_using_gdt = 1;
-
-    // Populate the proto with information.
-    FIRPopulateProtoWithInfoFromUserInfoParams(&icore_config, diagnosticObjects);
-    FIRPopulateProtoWithCommonInfoFromApp(&icore_config, diagnosticObjects);
-    FIRPopulateProtoWithInstalledServices(&icore_config);
-    FIRPopulateProtoWithNumberOfLinkedFrameworks(&icore_config);
-    FIRPopulateProtoWithInfoPlistValues(&icore_config);
-    [self setHeartbeatFlagIfNeededToConfig:&icore_config];
-
-    // This log object is capable of converting the proto to bytes.
-    FIRCoreDiagnosticsLog *log = [[FIRCoreDiagnosticsLog alloc] initWithConfig:icore_config];
-
-    // Send the log as a telemetry event.
-    GDTCOREvent *event = [self.transport eventForTransport];
-    event.dataObject = (id<GDTCOREventDataObject>)log;
-    [self.transport sendTelemetryEvent:event];
-  });
-}
-
-#pragma mark - Heartbeat
-
-- (void)setHeartbeatFlagIfNeededToConfig:(logs_proto_mobilesdk_ios_ICoreConfiguration *)config {
-  // Check if need to send a heartbeat.
-  NSDate *currentDate = [NSDate date];
-  NSDate *lastCheckin =
-      [self.heartbeatDateStorage heartbeatDateForTag:kFIRCoreDiagnosticsHeartbeatTag];
-  if (lastCheckin) {
-    // Ensure the previous checkin was on a different date in the past.
-    if ([self isDate:currentDate inSameDayOrBeforeThan:lastCheckin]) {
-      return;
-    }
-  }
-
-  // Update heartbeat sent date.
-  [self.heartbeatDateStorage setHearbeatDate:currentDate forTag:kFIRCoreDiagnosticsHeartbeatTag];
-  // Set the flag.
-  config->sdk_name = logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ICORE;
-  config->has_sdk_name = 1;
-}
-
-- (BOOL)isDate:(NSDate *)date1 inSameDayOrBeforeThan:(NSDate *)date2 {
-  return [[NSCalendar currentCalendar] isDate:date1 inSameDayAsDate:date2] ||
-         [date1 compare:date2] == NSOrderedAscending;
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.c b/assign5/openTok/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.c
deleted file mode 100644
index 4b2ac2f..0000000
--- a/assign5/openTok/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* Automatically generated nanopb constant definitions */
-/* Generated by nanopb-0.3.9.3 */
-
-#include "firebasecore.nanopb.h"
-
-/* @@protoc_insertion_point(includes) */
-#if PB_PROTO_HEADER_VERSION != 30
-#error Regenerate this file with the current version of nanopb generator.
-#endif
-
-
-
-const pb_field_t logs_proto_mobilesdk_ios_ICoreConfiguration_fields[22] = {
-    PB_FIELD(  1, UENUM   , OPTIONAL, STATIC  , FIRST, logs_proto_mobilesdk_ios_ICoreConfiguration, configuration_type, configuration_type, 0),
-    PB_FIELD(  7, UENUM   , REPEATED, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, sdk_service_installed, configuration_type, 0),
-    PB_FIELD(  9, BYTES   , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, device_model, sdk_service_installed, 0),
-    PB_FIELD( 10, BYTES   , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, app_id, device_model, 0),
-    PB_FIELD( 12, BYTES   , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, bundle_id, app_id, 0),
-    PB_FIELD( 16, UENUM   , OPTIONAL, STATIC  , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, pod_name, bundle_id, 0),
-    PB_FIELD( 18, BYTES   , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, icore_version, pod_name, 0),
-    PB_FIELD( 19, BYTES   , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, sdk_version, icore_version, 0),
-    PB_FIELD( 20, UENUM   , OPTIONAL, STATIC  , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, sdk_name, sdk_version, 0),
-    PB_FIELD( 21, INT32   , OPTIONAL, STATIC  , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, app_count, sdk_name, 0),
-    PB_FIELD( 22, BYTES   , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, os_version, app_count, 0),
-    PB_FIELD( 24, BYTES   , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, min_supported_ios_version, os_version, 0),
-    PB_FIELD( 25, BOOL    , OPTIONAL, STATIC  , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, use_default_app, min_supported_ios_version, 0),
-    PB_FIELD( 26, BOOL    , OPTIONAL, STATIC  , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, deployed_in_app_store, use_default_app, 0),
-    PB_FIELD( 27, INT32   , OPTIONAL, STATIC  , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, dynamic_framework_count, deployed_in_app_store, 0),
-    PB_FIELD( 28, BYTES   , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, apple_framework_version, dynamic_framework_count, 0),
-    PB_FIELD( 29, BOOL    , OPTIONAL, STATIC  , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, using_zip_file, apple_framework_version, 0),
-    PB_FIELD( 30, UENUM   , OPTIONAL, STATIC  , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, deployment_type, using_zip_file, 0),
-    PB_FIELD( 31, BYTES   , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, platform_info, deployment_type, 0),
-    PB_FIELD( 33, BOOL    , OPTIONAL, STATIC  , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, swizzling_enabled, platform_info, 0),
-    PB_FIELD( 36, BOOL    , OPTIONAL, STATIC  , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, using_gdt, swizzling_enabled, 0),
-    PB_LAST_FIELD
-};
-
-
-
-
-
-
-
-/* @@protoc_insertion_point(eof) */
diff --git a/assign5/openTok/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.h b/assign5/openTok/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.h
deleted file mode 100644
index 3e4c195..0000000
--- a/assign5/openTok/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.h
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* Automatically generated nanopb header */
-/* Generated by nanopb-0.3.9.3 */
-
-#ifndef PB_LOGS_PROTO_MOBILESDK_IOS_FIREBASECORE_NANOPB_H_INCLUDED
-#define PB_LOGS_PROTO_MOBILESDK_IOS_FIREBASECORE_NANOPB_H_INCLUDED
-#include <nanopb/pb.h>
-
-/* @@protoc_insertion_point(includes) */
-#if PB_PROTO_HEADER_VERSION != 30
-#error Regenerate this file with the current version of nanopb generator.
-#endif
-
-
-/* Enum definitions */
-typedef enum _logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType {
-    logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_UNKNOWN_CONFIGURATION_TYPE = 0,
-    logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_CORE = 1,
-    logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_SDK = 2
-} logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType;
-#define _logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_MIN logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_UNKNOWN_CONFIGURATION_TYPE
-#define _logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_MAX logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_SDK
-#define _logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_ARRAYSIZE ((logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType)(logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_SDK+1))
-
-typedef enum _logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType {
-    logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_UNKNOWN_BUILD_TYPE = 0,
-    logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_INTERNAL = 1,
-    logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_EAP = 2,
-    logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_PROD = 3
-} logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType;
-#define _logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_MIN logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_UNKNOWN_BUILD_TYPE
-#define _logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_MAX logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_PROD
-#define _logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_ARRAYSIZE ((logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType)(logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_PROD+1))
-
-typedef enum _logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType {
-    logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_UNKNOWN_SDK_SERVICE = 0,
-    logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ICORE = 1,
-    logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ADMOB = 2,
-    logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_APP_INVITE = 3,
-    logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_SIGN_IN = 5,
-    logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_GCM = 6,
-    logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MAPS = 7,
-    logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_SCION = 8,
-    logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ANALYTICS = 9,
-    logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_APP_INDEXING = 10,
-    logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_CONFIG = 11,
-    logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_DURABLE_DEEP_LINKS = 12,
-    logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_CRASH = 13,
-    logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_AUTH = 14,
-    logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_DATABASE = 15,
-    logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_STORAGE = 16,
-    logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MESSAGING = 17,
-    logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MEASUREMENT = 18,
-    logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_REMOTE_CONFIG = 19,
-    logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_DYNAMIC_LINKS = 20,
-    logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_INVITES = 21,
-    logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_AUTH_UI = 22,
-    logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_FIRESTORE = 23,
-    logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_PERFORMANCE = 24,
-    logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_FACE = 26,
-    logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_BARCODE = 27,
-    logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_TEXT = 28,
-    logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_LABEL = 29,
-    logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_MODEL_INTERPRETER = 30,
-    logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_IN_APP_MESSAGING = 31,
-    logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_FUNCTIONS = 32,
-    logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_NATURAL_LANGUAGE = 33,
-    logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_AUTOML = 34,
-    logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_OBJECT_DETECTION = 35
-} logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType;
-#define _logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MIN logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_UNKNOWN_SDK_SERVICE
-#define _logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MAX logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_OBJECT_DETECTION
-#define _logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ARRAYSIZE ((logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType)(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_OBJECT_DETECTION+1))
-
-typedef enum _logs_proto_mobilesdk_ios_ICoreConfiguration_PodName {
-    logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_UNKNOWN_POD_NAME = 0,
-    logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_GOOGLE = 1,
-    logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_FIREBASE = 2
-} logs_proto_mobilesdk_ios_ICoreConfiguration_PodName;
-#define _logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_MIN logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_UNKNOWN_POD_NAME
-#define _logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_MAX logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_FIREBASE
-#define _logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_ARRAYSIZE ((logs_proto_mobilesdk_ios_ICoreConfiguration_PodName)(logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_FIREBASE+1))
-
-typedef enum _logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType {
-    logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_UNKNOWN = 0,
-    logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_COCOAPODS = 1,
-    logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_ZIP_FILE = 2,
-    logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_CARTHAGE = 3,
-    logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_SPM = 4
-} logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType;
-#define _logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_MIN logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_UNKNOWN
-#define _logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_MAX logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_SPM
-#define _logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_ARRAYSIZE ((logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType)(logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_SPM+1))
-
-/* Struct definitions */
-typedef struct _logs_proto_mobilesdk_ios_ICoreConfiguration {
-    bool has_configuration_type;
-    logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType configuration_type;
-    pb_size_t sdk_service_installed_count;
-    logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType *sdk_service_installed;
-    pb_bytes_array_t *device_model;
-    pb_bytes_array_t *app_id;
-    pb_bytes_array_t *bundle_id;
-    bool has_pod_name;
-    logs_proto_mobilesdk_ios_ICoreConfiguration_PodName pod_name;
-    pb_bytes_array_t *icore_version;
-    pb_bytes_array_t *sdk_version;
-    bool has_sdk_name;
-    logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType sdk_name;
-    bool has_app_count;
-    int32_t app_count;
-    pb_bytes_array_t *os_version;
-    pb_bytes_array_t *min_supported_ios_version;
-    bool has_use_default_app;
-    bool use_default_app;
-    bool has_deployed_in_app_store;
-    bool deployed_in_app_store;
-    bool has_dynamic_framework_count;
-    int32_t dynamic_framework_count;
-    pb_bytes_array_t *apple_framework_version;
-    bool has_using_zip_file;
-    bool using_zip_file;
-    bool has_deployment_type;
-    logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType deployment_type;
-    pb_bytes_array_t *platform_info;
-    bool has_swizzling_enabled;
-    bool swizzling_enabled;
-    bool has_using_gdt;
-    bool using_gdt;
-/* @@protoc_insertion_point(struct:logs_proto_mobilesdk_ios_ICoreConfiguration) */
-} logs_proto_mobilesdk_ios_ICoreConfiguration;
-
-/* Default values for struct fields */
-
-/* Initializer values for message structs */
-#define logs_proto_mobilesdk_ios_ICoreConfiguration_init_default {false, _logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_MIN, 0, NULL, NULL, NULL, NULL, false, _logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_MIN, NULL, NULL, false, _logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MIN, false, 0, NULL, NULL, false, 0, false, 0, false, 0, NULL, false, 0, false, _logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_MIN, NULL, false, 0, false, 0}
-#define logs_proto_mobilesdk_ios_ICoreConfiguration_init_zero {false, _logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_MIN, 0, NULL, NULL, NULL, NULL, false, _logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_MIN, NULL, NULL, false, _logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MIN, false, 0, NULL, NULL, false, 0, false, 0, false, 0, NULL, false, 0, false, _logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_MIN, NULL, false, 0, false, 0}
-
-/* Field tags (for use in manual encoding/decoding) */
-#define logs_proto_mobilesdk_ios_ICoreConfiguration_pod_name_tag 16
-#define logs_proto_mobilesdk_ios_ICoreConfiguration_configuration_type_tag 1
-#define logs_proto_mobilesdk_ios_ICoreConfiguration_icore_version_tag 18
-#define logs_proto_mobilesdk_ios_ICoreConfiguration_sdk_version_tag 19
-#define logs_proto_mobilesdk_ios_ICoreConfiguration_sdk_service_installed_tag 7
-#define logs_proto_mobilesdk_ios_ICoreConfiguration_sdk_name_tag 20
-#define logs_proto_mobilesdk_ios_ICoreConfiguration_device_model_tag 9
-#define logs_proto_mobilesdk_ios_ICoreConfiguration_os_version_tag 22
-#define logs_proto_mobilesdk_ios_ICoreConfiguration_app_id_tag 10
-#define logs_proto_mobilesdk_ios_ICoreConfiguration_bundle_id_tag 12
-#define logs_proto_mobilesdk_ios_ICoreConfiguration_min_supported_ios_version_tag 24
-#define logs_proto_mobilesdk_ios_ICoreConfiguration_use_default_app_tag 25
-#define logs_proto_mobilesdk_ios_ICoreConfiguration_app_count_tag 21
-#define logs_proto_mobilesdk_ios_ICoreConfiguration_deployed_in_app_store_tag 26
-#define logs_proto_mobilesdk_ios_ICoreConfiguration_dynamic_framework_count_tag 27
-#define logs_proto_mobilesdk_ios_ICoreConfiguration_apple_framework_version_tag 28
-#define logs_proto_mobilesdk_ios_ICoreConfiguration_using_zip_file_tag 29
-#define logs_proto_mobilesdk_ios_ICoreConfiguration_deployment_type_tag 30
-#define logs_proto_mobilesdk_ios_ICoreConfiguration_platform_info_tag 31
-#define logs_proto_mobilesdk_ios_ICoreConfiguration_swizzling_enabled_tag 33
-#define logs_proto_mobilesdk_ios_ICoreConfiguration_using_gdt_tag 36
-
-/* Struct field encoding specification for nanopb */
-extern const pb_field_t logs_proto_mobilesdk_ios_ICoreConfiguration_fields[22];
-
-/* Maximum encoded size of messages (where known) */
-/* logs_proto_mobilesdk_ios_ICoreConfiguration_size depends on runtime parameters */
-
-/* Message IDs (where set with "msgid" option) */
-#ifdef PB_MSGID
-
-#define FIREBASECORE_MESSAGES \
-
-
-#endif
-
-/* @@protoc_insertion_point(eof) */
-
-#endif
diff --git a/assign5/openTok/Pods/FirebaseCoreDiagnostics/LICENSE b/assign5/openTok/Pods/FirebaseCoreDiagnostics/LICENSE
deleted file mode 100644
index d645695..0000000
--- a/assign5/openTok/Pods/FirebaseCoreDiagnostics/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
diff --git a/assign5/openTok/Pods/FirebaseCoreDiagnostics/README.md b/assign5/openTok/Pods/FirebaseCoreDiagnostics/README.md
deleted file mode 100644
index b04a270..0000000
--- a/assign5/openTok/Pods/FirebaseCoreDiagnostics/README.md
+++ /dev/null
@@ -1,282 +0,0 @@
-# Firebase iOS Open Source Development
- [![Actions Status][gh-auth-badge]][gh-actions]
- [![Actions Status][gh-core-badge]][gh-actions]
- [![Actions Status][gh-datatransport-badge]][gh-actions]
- [![Actions Status][gh-dynamiclinks-badge]][gh-actions]
- [![Actions Status][gh-firebasepod-badge]][gh-actions]
- [![Actions Status][gh-firestore-badge]][gh-actions]
- [![Actions Status][gh-interop-badge]][gh-actions]
- [![Actions Status][gh-messaging-badge]][gh-actions]
- [![Actions Status][gh-storage-badge]][gh-actions]
- [![Actions Status][gh-symbolcollision-badge]][gh-actions]
- [![Actions Status][gh-zip-badge]][gh-actions]
- [![Travis](https://travis-ci.org/firebase/firebase-ios-sdk.svg?branch=master)](https://travis-ci.org/firebase/firebase-ios-sdk)
-
-This repository contains all Firebase iOS SDK source except FirebaseAnalytics,
-FirebasePerformance, and FirebaseML.
-
-The repository also includes GoogleUtilities source. The
-[GoogleUtilities](GoogleUtilities/README.md) pod is
-a set of utilities used by Firebase and other Google products.
-
-Firebase is an app development platform with tools to help you build, grow and
-monetize your app. More information about Firebase can be found at
-[https://firebase.google.com](https://firebase.google.com).
-
-## Installation
-
-See the three subsections for details about three different installation methods.
-1. [Standard pod install](README.md#standard-pod-install)
-1. [Installing from the GitHub repo](README.md#installing-from-github)
-1. [Experimental Carthage](README.md#carthage-ios-only)
-
-### Standard pod install
-
-Go to
-[https://firebase.google.com/docs/ios/setup](https://firebase.google.com/docs/ios/setup).
-
-### Installing from GitHub
-
-For releases starting with 5.0.0, the source for each release is also deployed
-to CocoaPods master and available via standard
-[CocoaPods Podfile syntax](https://guides.cocoapods.org/syntax/podfile.html#pod).
-
-These instructions can be used to access the Firebase repo at other branches,
-tags, or commits.
-
-#### Background
-
-See
-[the Podfile Syntax Reference](https://guides.cocoapods.org/syntax/podfile.html#pod)
-for instructions and options about overriding pod source locations.
-
-#### Accessing Firebase Source Snapshots
-
-All of the official releases are tagged in this repo and available via CocoaPods. To access a local
-source snapshot or unreleased branch, use Podfile directives like the following:
-
-To access FirebaseFirestore via a branch:
-```
-pod 'FirebaseCore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master'
-pod 'FirebaseFirestore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master'
-```
-
-To access FirebaseMessaging via a checked out version of the firebase-ios-sdk repo do:
-
-```
-pod 'FirebaseCore', :path => '/path/to/firebase-ios-sdk'
-pod 'FirebaseMessaging', :path => '/path/to/firebase-ios-sdk'
-```
-
-### Carthage (iOS only)
-
-Instructions for the experimental Carthage distribution are at
-[Carthage](Carthage.md).
-
-### Rome
-
-Instructions for installing binary frameworks via
-[Rome](https://github.com/CocoaPods/Rome) are at [Rome](Rome.md).
-
-### Using Firebase from a Framework or a library
-
-[Using Firebase from a Framework or a library](docs/firebase_in_libraries.md)
-
-## Development
-
-To develop Firebase software in this repository, ensure that you have at least
-the following software:
-
-  * Xcode 10.1 (or later)
-  * CocoaPods 1.7.2 (or later)
-  * [CocoaPods generate](https://github.com/square/cocoapods-generate)
-
-For the pod that you want to develop:
-
-`pod gen Firebase{name here}.podspec --local-sources=./ --auto-open --platforms=ios`
-
-Note: If the CocoaPods cache is out of date, you may need to run
-`pod repo update` before the `pod gen` command.
-
-Note: Set the `--platforms` option to `macos` or `tvos` to develop/test for
-those platforms. Since 10.2, Xcode does not properly handle multi-platform
-CocoaPods workspaces.
-
-Firestore has a self contained Xcode project. See
-[Firestore/README.md](Firestore/README.md).
-
-### Development for Catalyst
-* `pod gen {name here}.podspec --local-sources=./ --auto-open --platforms=ios`
-* Check the Mac box in the App-iOS Build Settings
-* Sign the App in the Settings Signing & Capabilities tab
-* Click Pods in the Project Manager
-* Add Signing to the iOS host app and unit test targets
-* Select the Unit-unit scheme
-* Run it to build and test
-
-### Adding a New Firebase Pod
-
-See [AddNewPod.md](AddNewPod.md).
-
-### Code Formatting
-
-To ensure that the code is formatted consistently, run the script
-[./scripts/style.sh](https://github.com/firebase/firebase-ios-sdk/blob/master/scripts/style.sh)
-before creating a PR.
-
-Travis will verify that any code changes are done in a style compliant way. Install
-`clang-format` and `swiftformat`.
-These commands will get the right versions:
-
-```
-brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/c6f1cbd/Formula/clang-format.rb
-brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/c13eda8/Formula/swiftformat.rb
-```
-
-Note: if you already have a newer version of these installed you may need to
-`brew switch` to this version.
-
-To update this section, find the versions of clang-format and swiftformat.rb to
-match the versions in the CI failure logs
-[here](https://github.com/Homebrew/homebrew-core/tree/master/Formula).
-
-### Running Unit Tests
-
-Select a scheme and press Command-u to build a component and run its unit tests.
-
-#### Viewing Code Coverage (Deprecated)
-
-First, make sure that [xcov](https://github.com/nakiostudio/xcov) is installed with `gem install xcov`.
-
-After running the `AllUnitTests_iOS` scheme in Xcode, execute
-`xcov --workspace Firebase.xcworkspace --scheme AllUnitTests_iOS --output_directory xcov_output`
-at Example/ in the terminal. This will aggregate the coverage, and you can run `open xcov_output/index.html` to see the results.
-
-### Running Sample Apps
-In order to run the sample apps and integration tests, you'll need valid
-`GoogleService-Info.plist` files for those samples. The Firebase Xcode project contains dummy plist
-files without real values, but can be replaced with real plist files. To get your own
-`GoogleService-Info.plist` files:
-
-1. Go to the [Firebase Console](https://console.firebase.google.com/)
-2. Create a new Firebase project, if you don't already have one
-3. For each sample app you want to test, create a new Firebase app with the sample app's bundle
-identifier (e.g. `com.google.Database-Example`)
-4. Download the resulting `GoogleService-Info.plist` and replace the appropriate dummy plist file
-(e.g. in [Example/Database/App/](Example/Database/App/));
-
-Some sample apps like Firebase Messaging ([Example/Messaging/App](Example/Messaging/App)) require
-special Apple capabilities, and you will have to change the sample app to use a unique bundle
-identifier that you can control in your own Apple Developer account.
-
-## Specific Component Instructions
-See the sections below for any special instructions for those components.
-
-### Firebase Auth
-
-If you're doing specific Firebase Auth development, see
-[the Auth Sample README](FirebaseAuth/Tests/Sample/README.md) for instructions about
-building and running the FirebaseAuth pod along with various samples and tests.
-
-### Firebase Database
-
-To run the Database Integration tests, make your database authentication rules
-[public](https://firebase.google.com/docs/database/security/quickstart).
-
-### Firebase Storage
-
-To run the Storage Integration tests, follow the instructions in
-[FIRStorageIntegrationTests.m](FirebaseStorage/Tests/Integration/FIRStorageIntegrationTests.m).
-
-#### Push Notifications
-
-Push notifications can only be delivered to specially provisioned App IDs in the developer portal.
-In order to actually test receiving push notifications, you will need to:
-
-1. Change the bundle identifier of the sample app to something you own in your Apple Developer
-account, and enable that App ID for push notifications.
-2. You'll also need to
-[upload your APNs Provider Authentication Key or certificate to the Firebase Console](https://firebase.google.com/docs/cloud-messaging/ios/certs)
-at **Project Settings > Cloud Messaging > [Your Firebase App]**.
-3. Ensure your iOS device is added to your Apple Developer portal as a test device.
-
-#### iOS Simulator
-
-The iOS Simulator cannot register for remote notifications, and will not receive push notifications.
-In order to receive push notifications, you'll have to follow the steps above and run the app on a
-physical device.
-
-## Community Supported Efforts
-
-We've seen an amazing amount of interest and contributions to improve the Firebase SDKs, and we are
-very grateful!  We'd like to empower as many developers as we can to be able to use Firebase and
-participate in the Firebase community.
-
-### tvOS, macOS, watchOS and Catalyst
-Thanks to contributions from the community, many of Firebase SDKs now compile, run unit tests, and work on
-tvOS, macOS, watchOS and Catalyst.
-
-For tvOS, checkout the [Sample](Example/tvOSSample).
-For watchOS, currently only Messaging and Storage (and their dependencies) have limited support. Checkout the
-[Independent Watch App Sample](Example/watchOSSample).
-
-Keep in mind that macOS, tvOS, watchOS and Catalyst are not officially supported by Firebase, and this
-repository is actively developed primarily for iOS. While we can catch basic unit test issues with
-Travis, there may be some changes where the SDK no longer works as expected on macOS, tvOS or watchOS. If you
-encounter this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues).
-
-During app setup in the console, you may get to a step that mentions something like "Checking if the app
-has communicated with our servers". This relies on Analytics and will not work on macOS/tvOS/watchOS/Catalyst.
-**It's safe to ignore the message and continue**, the rest of the SDKs will work as expected.
-
-To install, add a subset of the following to the Podfile:
-
-```
-pod 'Firebase/ABTesting'     # No watchOS support yet
-pod 'Firebase/Auth'          # No watchOS support yet
-pod 'Firebase/Crashlytics'   # No watchOS support yet
-pod 'Firebase/Database'      # No watchOS support yet
-pod 'Firebase/Firestore'     # No watchOS support yet
-pod 'Firebase/Functions'     # No watchOS support yet
-pod 'Firebase/Messaging'
-pod 'Firebase/RemoteConfig'  # No watchOS support yet
-pod 'Firebase/Storage'
-```
-
-#### Additional Catalyst Notes
-
-* FirebaseAuth and FirebaseMessaging require adding `Keychain Sharing Capability`
-to Build Settings.
-* FirebaseFirestore requires signing the
-[gRPC Resource target](https://github.com/firebase/firebase-ios-sdk/issues/3500#issuecomment-518741681).
-
-## Roadmap
-
-See [Roadmap](ROADMAP.md) for more about the Firebase iOS SDK Open Source
-plans and directions.
-
-## Contributing
-
-See [Contributing](CONTRIBUTING.md) for more information on contributing to the Firebase
-iOS SDK.
-
-## License
-
-The contents of this repository is licensed under the
-[Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0).
-
-Your use of Firebase is governed by the
-[Terms of Service for Firebase Services](https://firebase.google.com/terms/).
-
-[gh-actions]: https://github.com/firebase/firebase-ios-sdk/actions
-[gh-auth-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/auth/badge.svg
-[gh-core-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/core/badge.svg
-[gh-datatransport-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/datatransport/badge.svg
-[gh-dynamiclinks-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/dynamiclinks/badge.svg
-[gh-firebasepod-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firebasepod/badge.svg
-[gh-firestore-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firestore/badge.svg
-[gh-interop-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/interop/badge.svg
-[gh-messaging-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/messaging/badge.svg
-[gh-storage-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/storage/badge.svg
-[gh-symbolcollision-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/symbolcollision/badge.svg
-[gh-zip-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/zip/badge.svg
diff --git a/assign5/openTok/Pods/FirebaseCoreDiagnosticsInterop/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsData.h b/assign5/openTok/Pods/FirebaseCoreDiagnosticsInterop/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsData.h
deleted file mode 100644
index 69c4072..0000000
--- a/assign5/openTok/Pods/FirebaseCoreDiagnosticsInterop/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsData.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-/** If present, is a BOOL wrapped in an NSNumber. */
-#define kFIRCDIsDataCollectionDefaultEnabledKey @"FIRCDIsDataCollectionDefaultEnabledKey"
-
-/** If present, is an int32_t wrapped in an NSNumber. */
-#define kFIRCDConfigurationTypeKey @"FIRCDConfigurationTypeKey"
-
-/** If present, is an NSString. */
-#define kFIRCDSdkNameKey @"FIRCDSdkNameKey"
-
-/** If present, is an NSString. */
-#define kFIRCDSdkVersionKey @"FIRCDSdkVersionKey"
-
-/** If present, is an int32_t wrapped in an NSNumber. */
-#define kFIRCDllAppsCountKey @"FIRCDllAppsCountKey"
-
-/** If present, is an NSString. */
-#define kFIRCDGoogleAppIDKey @"FIRCDGoogleAppIDKey"
-
-/** If present, is an NSString. */
-#define kFIRCDBundleIDKey @"FIRCDBundleID"
-
-/** If present, is a BOOL wrapped in an NSNumber. */
-#define kFIRCDUsingOptionsFromDefaultPlistKey @"FIRCDUsingOptionsFromDefaultPlistKey"
-
-/** If present, is an NSString. */
-#define kFIRCDLibraryVersionIDKey @"FIRCDLibraryVersionIDKey"
-
-/** If present, is an NSString. */
-#define kFIRCDFirebaseUserAgentKey @"FIRCDFirebaseUserAgentKey"
-
-/** Defines the interface of a data object needed to log diagnostics data. */
-@protocol FIRCoreDiagnosticsData <NSObject>
-
-@required
-
-/** A dictionary containing data (non-exhaustive) to be logged in diagnostics. */
-@property(nonatomic) NSDictionary<NSString *, id> *diagnosticObjects;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/FirebaseCoreDiagnosticsInterop/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsInterop.h b/assign5/openTok/Pods/FirebaseCoreDiagnosticsInterop/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsInterop.h
deleted file mode 100644
index 2b0eb71..0000000
--- a/assign5/openTok/Pods/FirebaseCoreDiagnosticsInterop/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsInterop.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#import "FIRCoreDiagnosticsData.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-/** Allows the interoperation of FirebaseCore and FirebaseCoreDiagnostics. */
-@protocol FIRCoreDiagnosticsInterop <NSObject>
-
-/** Sends the given diagnostics data.
- *
- * @param diagnosticsData The diagnostics data object to send.
- */
-+ (void)sendDiagnosticsData:(id<FIRCoreDiagnosticsData>)diagnosticsData;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/FirebaseCoreDiagnosticsInterop/LICENSE b/assign5/openTok/Pods/FirebaseCoreDiagnosticsInterop/LICENSE
deleted file mode 100644
index d645695..0000000
--- a/assign5/openTok/Pods/FirebaseCoreDiagnosticsInterop/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
diff --git a/assign5/openTok/Pods/FirebaseCoreDiagnosticsInterop/README.md b/assign5/openTok/Pods/FirebaseCoreDiagnosticsInterop/README.md
deleted file mode 100644
index 3ddc8fb..0000000
--- a/assign5/openTok/Pods/FirebaseCoreDiagnosticsInterop/README.md
+++ /dev/null
@@ -1,251 +0,0 @@
-# Firebase iOS Open Source Development [![Build Status](https://travis-ci.org/firebase/firebase-ios-sdk.svg?branch=master)](https://travis-ci.org/firebase/firebase-ios-sdk)
-
-This repository contains a subset of the Firebase iOS SDK source. It currently
-includes FirebaseCore, FirebaseABTesting, FirebaseAuth, FirebaseDatabase,
-FirebaseFirestore, FirebaseFunctions, FirebaseInstanceID, FirebaseInAppMessaging,
-FirebaseInAppMessagingDisplay, FirebaseMessaging, FirebaseRemoteConfig, and
-FirebaseStorage.
-
-The repository also includes GoogleUtilities source. The
-[GoogleUtilities](GoogleUtilities/README.md) pod is
-a set of utilities used by Firebase and other Google products.
-
-Firebase is an app development platform with tools to help you build, grow and
-monetize your app. More information about Firebase can be found at
-[https://firebase.google.com](https://firebase.google.com).
-
-## Installation
-
-See the three subsections for details about three different installation methods.
-1. [Standard pod install](README.md#standard-pod-install)
-1. [Installing from the GitHub repo](README.md#installing-from-github)
-1. [Experimental Carthage](README.md#carthage-ios-only)
-
-### Standard pod install
-
-Go to
-[https://firebase.google.com/docs/ios/setup](https://firebase.google.com/docs/ios/setup).
-
-### Installing from GitHub
-
-For releases starting with 5.0.0, the source for each release is also deployed
-to CocoaPods master and available via standard
-[CocoaPods Podfile syntax](https://guides.cocoapods.org/syntax/podfile.html#pod).
-
-These instructions can be used to access the Firebase repo at other branches,
-tags, or commits.
-
-#### Background
-
-See
-[the Podfile Syntax Reference](https://guides.cocoapods.org/syntax/podfile.html#pod)
-for instructions and options about overriding pod source locations.
-
-#### Accessing Firebase Source Snapshots
-
-All of the official releases are tagged in this repo and available via CocoaPods. To access a local
-source snapshot or unreleased branch, use Podfile directives like the following:
-
-To access FirebaseFirestore via a branch:
-```
-pod 'FirebaseCore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master'
-pod 'FirebaseFirestore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master'
-```
-
-To access FirebaseMessaging via a checked out version of the firebase-ios-sdk repo do:
-
-```
-pod 'FirebaseCore', :path => '/path/to/firebase-ios-sdk'
-pod 'FirebaseMessaging', :path => '/path/to/firebase-ios-sdk'
-```
-
-### Carthage (iOS only)
-
-Instructions for the experimental Carthage distribution are at
-[Carthage](Carthage.md).
-
-### Rome
-
-Instructions for installing binary frameworks via
-[Rome](https://github.com/CocoaPods/Rome) are at [Rome](Rome.md).
-
-## Development
-
-To develop Firebase software in this repository, ensure that you have at least
-the following software:
-
-  * Xcode 10.1 (or later)
-  * CocoaPods 1.7.2 (or later)
-  * [CocoaPods generate](https://github.com/square/cocoapods-generate)
-
-For the pod that you want to develop:
-
-`pod gen Firebase{name here}.podspec --local-sources=./ --auto-open --platforms=ios`
-
-Note: If the CocoaPods cache is out of date, you may need to run
-`pod repo update` before the `pod gen` command.
-
-Note: Set the `--platforms` option to `macos` or `tvos` to develop/test for
-those platforms. Since 10.2, Xcode does not properly handle multi-platform
-CocoaPods workspaces.
-
-Firestore has a self contained Xcode project. See
-[Firestore/README.md](Firestore/README.md).
-
-### Development for Catalyst
-* `pod gen {name here}.podspec --local-sources=./ --auto-open --platforms=ios`
-* Check the Mac box in the App-iOS Build Settings
-* Sign the App in the Settings Signing & Capabilities tab
-* Click Pods in the Project Manager
-* Add Signing to the iOS host app and unit test targets
-* Select the Unit-unit scheme
-* Run it to build and test
-
-### Adding a New Firebase Pod
-
-See [AddNewPod.md](AddNewPod.md).
-
-### Code Formatting
-
-To ensure that the code is formatted consistently, run the script
-[./scripts/style.sh](https://github.com/firebase/firebase-ios-sdk/blob/master/scripts/style.sh)
-before creating a PR.
-
-Travis will verify that any code changes are done in a style compliant way. Install
-`clang-format` and `swiftformat`.
-These commands will get the right versions:
-
-```
-brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/e3496d9/Formula/clang-format.rb
-brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/7963c3d/Formula/swiftformat.rb
-```
-
-Note: if you already have a newer version of these installed you may need to
-`brew switch` to this version.
-
-To update this section, find the versions of clang-format and swiftformat.rb to
-match the versions in the CI failure logs
-[here](https://github.com/Homebrew/homebrew-core/tree/master/Formula).
-
-### Running Unit Tests
-
-Select a scheme and press Command-u to build a component and run its unit tests.
-
-#### Viewing Code Coverage
-
-First, make sure that [xcov](https://github.com/nakiostudio/xcov) is installed with `gem install xcov`.
-
-After running the `AllUnitTests_iOS` scheme in Xcode, execute
-`xcov --workspace Firebase.xcworkspace --scheme AllUnitTests_iOS --output_directory xcov_output`
-at Example/ in the terminal. This will aggregate the coverage, and you can run `open xcov_output/index.html` to see the results.
-
-### Running Sample Apps
-In order to run the sample apps and integration tests, you'll need valid
-`GoogleService-Info.plist` files for those samples. The Firebase Xcode project contains dummy plist
-files without real values, but can be replaced with real plist files. To get your own
-`GoogleService-Info.plist` files:
-
-1. Go to the [Firebase Console](https://console.firebase.google.com/)
-2. Create a new Firebase project, if you don't already have one
-3. For each sample app you want to test, create a new Firebase app with the sample app's bundle
-identifier (e.g. `com.google.Database-Example`)
-4. Download the resulting `GoogleService-Info.plist` and replace the appropriate dummy plist file
-(e.g. in [Example/Database/App/](Example/Database/App/));
-
-Some sample apps like Firebase Messaging ([Example/Messaging/App](Example/Messaging/App)) require
-special Apple capabilities, and you will have to change the sample app to use a unique bundle
-identifier that you can control in your own Apple Developer account.
-
-## Specific Component Instructions
-See the sections below for any special instructions for those components.
-
-### Firebase Auth
-
-If you're doing specific Firebase Auth development, see
-[the Auth Sample README](Example/Auth/README.md) for instructions about
-building and running the FirebaseAuth pod along with various samples and tests.
-
-### Firebase Database
-
-To run the Database Integration tests, make your database authentication rules
-[public](https://firebase.google.com/docs/database/security/quickstart).
-
-### Firebase Storage
-
-To run the Storage Integration tests, follow the instructions in
-[FIRStorageIntegrationTests.m](Example/Storage/Tests/Integration/FIRStorageIntegrationTests.m).
-
-#### Push Notifications
-
-Push notifications can only be delivered to specially provisioned App IDs in the developer portal.
-In order to actually test receiving push notifications, you will need to:
-
-1. Change the bundle identifier of the sample app to something you own in your Apple Developer
-account, and enable that App ID for push notifications.
-2. You'll also need to
-[upload your APNs Provider Authentication Key or certificate to the Firebase Console](https://firebase.google.com/docs/cloud-messaging/ios/certs)
-at **Project Settings > Cloud Messaging > [Your Firebase App]**.
-3. Ensure your iOS device is added to your Apple Developer portal as a test device.
-
-#### iOS Simulator
-
-The iOS Simulator cannot register for remote notifications, and will not receive push notifications.
-In order to receive push notifications, you'll have to follow the steps above and run the app on a
-physical device.
-
-## Community Supported Efforts
-
-We've seen an amazing amount of interest and contributions to improve the Firebase SDKs, and we are
-very grateful!  We'd like to empower as many developers as we can to be able to use Firebase and
-participate in the Firebase community.
-
-### tvOS, macOS, and Catalyst
-Thanks to contributions from the community, FirebaseABTesting, FirebaseAuth, FirebaseCore,
-FirebaseDatabase, FirebaseMessaging, FirebaseFirestore,
-FirebaseFunctions, FirebaseRemoteConfig, and FirebaseStorage now compile, run unit tests, and work on
-tvOS, macOS, and Catalyst.
-
-For tvOS, checkout the [Sample](Example/tvOSSample).
-
-Keep in mind that macOS, Catalyst and tvOS are not officially supported by Firebase, and this
-repository is actively developed primarily for iOS. While we can catch basic unit test issues with
-Travis, there may be some changes where the SDK no longer works as expected on macOS or tvOS. If you
-encounter this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues).
-
-To install, add a subset of the following to the Podfile:
-
-```
-pod 'Firebase/ABTesting'
-pod 'Firebase/Auth'
-pod 'Firebase/Database'
-pod 'Firebase/Firestore'
-pod 'Firebase/Functions'
-pod 'Firebase/Messaging'
-pod 'Firebase/RemoteConfig'
-pod 'Firebase/Storage'
-```
-
-#### Additional Catalyst Notes
-
-* FirebaseAuth and FirebaseMessaging require adding `Keychain Sharing Capability`
-to Build Settings.
-* FirebaseFirestore requires signing the
-[gRPC Resource target](https://github.com/firebase/firebase-ios-sdk/issues/3500#issuecomment-518741681).
-
-## Roadmap
-
-See [Roadmap](ROADMAP.md) for more about the Firebase iOS SDK Open Source
-plans and directions.
-
-## Contributing
-
-See [Contributing](CONTRIBUTING.md) for more information on contributing to the Firebase
-iOS SDK.
-
-## License
-
-The contents of this repository is licensed under the
-[Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0).
-
-Your use of Firebase is governed by the
-[Terms of Service for Firebase Services](https://firebase.google.com/terms/).
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDataSnapshot.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDataSnapshot.m
deleted file mode 100644
index c1d48ec..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDataSnapshot.m
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FIRDataSnapshot.h"
-#import "FChildrenNode.h"
-#import "FIRDataSnapshot_Private.h"
-#import "FIRDatabaseReference.h"
-#import "FTransformedEnumerator.h"
-#import "FValidation.h"
-
-@interface FIRDataSnapshot ()
-@property(nonatomic, strong) FIRDatabaseReference *ref;
-@end
-
-@implementation FIRDataSnapshot
-
-- (id)initWithRef:(FIRDatabaseReference *)ref indexedNode:(FIndexedNode *)node {
-    self = [super init];
-    if (self != nil) {
-        self->_ref = ref;
-        self->_node = node;
-    }
-    return self;
-}
-
-- (id)value {
-    return [self.node.node val];
-}
-
-- (id)valueInExportFormat {
-    return [self.node.node valForExport:YES];
-}
-
-- (FIRDataSnapshot *)childSnapshotForPath:(NSString *)childPathString {
-    [FValidation validateFrom:@"child:" validPathString:childPathString];
-    FPath *childPath = [[FPath alloc] initWith:childPathString];
-    FIRDatabaseReference *childRef = [self.ref child:childPathString];
-
-    id<FNode> childNode = [self.node.node getChild:childPath];
-    return [[FIRDataSnapshot alloc]
-        initWithRef:childRef
-        indexedNode:[FIndexedNode indexedNodeWithNode:childNode]];
-}
-
-- (BOOL)hasChild:(NSString *)childPathString {
-    [FValidation validateFrom:@"hasChild:" validPathString:childPathString];
-    FPath *childPath = [[FPath alloc] initWith:childPathString];
-    return ![[self.node.node getChild:childPath] isEmpty];
-}
-
-- (id)priority {
-    id<FNode> priority = [self.node.node getPriority];
-    return priority.val;
-}
-
-- (BOOL)hasChildren {
-    if ([self.node.node isLeafNode]) {
-        return false;
-    } else {
-        return ![self.node.node isEmpty];
-    }
-}
-
-- (BOOL)exists {
-    return ![self.node.node isEmpty];
-}
-
-- (NSString *)key {
-    return [self.ref key];
-}
-
-- (NSUInteger)childrenCount {
-    return [self.node.node numChildren];
-}
-
-- (NSEnumerator<FIRDataSnapshot *> *)children {
-    return [[FTransformedEnumerator alloc]
-        initWithEnumerator:self.node.childEnumerator
-              andTransform:^id(FNamedNode *node) {
-                FIRDatabaseReference *childRef = [self.ref child:node.name];
-                return [[FIRDataSnapshot alloc]
-                    initWithRef:childRef
-                    indexedNode:[FIndexedNode indexedNodeWithNode:node.node]];
-              }];
-}
-
-- (NSString *)description {
-    return
-        [NSString stringWithFormat:@"Snap (%@) %@", self.key, self.node.node];
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabase.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabase.m
deleted file mode 100644
index 8957336..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabase.m
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#import <FirebaseAuthInterop/FIRAuthInterop.h>
-#import <FirebaseCore/FIRAppInternal.h>
-#import <FirebaseCore/FIRComponent.h>
-#import <FirebaseCore/FIRComponentContainer.h>
-#import <FirebaseCore/FIRDependency.h>
-#import <FirebaseCore/FIRLogger.h>
-#import <FirebaseCore/FIROptions.h>
-
-#import "FIRDatabase.h"
-#import "FIRDatabaseComponent.h"
-#import "FIRDatabaseConfig_Private.h"
-#import "FIRDatabaseQuery_Private.h"
-#import "FIRDatabaseReference_Private.h"
-#import "FIRDatabase_Private.h"
-#import "FRepoInfo.h"
-#import "FValidation.h"
-
-@implementation FIRDatabase
-
-// The STR and STR_EXPAND macro allow a numeric version passed to he compiler
-// driver with a -D to be treated as a string instead of an invalid floating
-// point value.
-#define STR(x) STR_EXPAND(x)
-#define STR_EXPAND(x) #x
-static const char *FIREBASE_SEMVER = (const char *)STR(FIRDatabase_VERSION);
-
-+ (FIRDatabase *)database {
-    if (![FIRApp isDefaultAppConfigured]) {
-        [NSException raise:@"FIRAppNotConfigured"
-                    format:@"Failed to get default Firebase Database instance. "
-                           @"Must call `[FIRApp "
-                           @"configure]` (`FirebaseApp.configure()` in Swift) "
-                           @"before using "
-                           @"Firebase Database."];
-    }
-    return [FIRDatabase databaseForApp:[FIRApp defaultApp]];
-}
-
-+ (FIRDatabase *)databaseWithURL:(NSString *)url {
-    FIRApp *app = [FIRApp defaultApp];
-    if (app == nil) {
-        [NSException
-             raise:@"FIRAppNotConfigured"
-            format:
-                @"Failed to get default Firebase Database instance. "
-                @"Must call `[FIRApp configure]` (`FirebaseApp.configure()` in "
-                @"Swift) before using Firebase Database."];
-    }
-    return [FIRDatabase databaseForApp:app URL:url];
-}
-
-+ (FIRDatabase *)databaseForApp:(FIRApp *)app {
-    if (app == nil) {
-        [NSException raise:@"InvalidFIRApp"
-                    format:@"nil FIRApp instance passed to databaseForApp."];
-    }
-    return [FIRDatabase databaseForApp:app URL:app.options.databaseURL];
-}
-
-+ (FIRDatabase *)databaseForApp:(FIRApp *)app URL:(NSString *)url {
-    if (app == nil) {
-        [NSException raise:@"InvalidFIRApp"
-                    format:@"nil FIRApp instance passed to databaseForApp."];
-    }
-    if (url == nil) {
-        [NSException raise:@"MissingDatabaseURL"
-                    format:@"Failed to get FirebaseDatabase instance: "
-                           @"Specify DatabaseURL within FIRApp or from your "
-                           @"databaseForApp:URL: call."];
-    }
-    id<FIRDatabaseProvider> provider =
-        FIR_COMPONENT(FIRDatabaseProvider, app.container);
-    return [provider databaseForApp:app URL:url];
-}
-
-+ (NSString *)buildVersion {
-    // TODO: Restore git hash when build moves back to git
-    return [NSString stringWithFormat:@"%s_%s", FIREBASE_SEMVER, __DATE__];
-}
-
-+ (FIRDatabase *)createDatabaseForTests:(FRepoInfo *)repoInfo
-                                 config:(FIRDatabaseConfig *)config {
-    FIRDatabase *db = [[FIRDatabase alloc] initWithApp:nil
-                                              repoInfo:repoInfo
-                                                config:config];
-    [db ensureRepo];
-    return db;
-}
-
-+ (NSString *)sdkVersion {
-    return [NSString stringWithUTF8String:FIREBASE_SEMVER];
-}
-
-+ (void)setLoggingEnabled:(BOOL)enabled {
-    [FUtilities setLoggingEnabled:enabled];
-    FFLog(@"I-RDB024001", @"BUILD Version: %@", [FIRDatabase buildVersion]);
-}
-
-- (id)initWithApp:(FIRApp *)app
-         repoInfo:(FRepoInfo *)info
-           config:(FIRDatabaseConfig *)config {
-    self = [super init];
-    if (self != nil) {
-        self->_repoInfo = info;
-        self->_config = config;
-        self->_app = app;
-    }
-    return self;
-}
-
-- (FIRDatabaseReference *)reference {
-    [self ensureRepo];
-
-    return [[FIRDatabaseReference alloc] initWithRepo:self.repo
-                                                 path:[FPath empty]];
-}
-
-- (FIRDatabaseReference *)referenceWithPath:(NSString *)path {
-    [self ensureRepo];
-
-    [FValidation validateFrom:@"referenceWithPath" validRootPathString:path];
-    FPath *childPath = [[FPath alloc] initWith:path];
-    return [[FIRDatabaseReference alloc] initWithRepo:self.repo path:childPath];
-}
-
-- (FIRDatabaseReference *)referenceFromURL:(NSString *)databaseUrl {
-    [self ensureRepo];
-
-    if (databaseUrl == nil) {
-        [NSException raise:@"InvalidDatabaseURL"
-                    format:@"Invalid nil url passed to referenceFromURL:"];
-    }
-    FParsedUrl *parsedUrl = [FUtilities parseUrl:databaseUrl];
-    [FValidation validateFrom:@"referenceFromURL:" validURL:parsedUrl];
-    if (![parsedUrl.repoInfo.host isEqualToString:_repoInfo.host]) {
-        [NSException
-             raise:@"InvalidDatabaseURL"
-            format:
-                @"Invalid URL (%@) passed to getReference(). URL was expected "
-                 "to match configured Database URL: %@",
-                databaseUrl, [self reference].URL];
-    }
-    return [[FIRDatabaseReference alloc] initWithRepo:self.repo
-                                                 path:parsedUrl.path];
-}
-
-- (void)purgeOutstandingWrites {
-    [self ensureRepo];
-
-    dispatch_async([FIRDatabaseQuery sharedQueue], ^{
-      [self.repo purgeOutstandingWrites];
-    });
-}
-
-- (void)goOnline {
-    [self ensureRepo];
-
-    dispatch_async([FIRDatabaseQuery sharedQueue], ^{
-      [self.repo resume];
-    });
-}
-
-- (void)goOffline {
-    [self ensureRepo];
-
-    dispatch_async([FIRDatabaseQuery sharedQueue], ^{
-      [self.repo interrupt];
-    });
-}
-
-- (void)setPersistenceEnabled:(BOOL)persistenceEnabled {
-    [self assertUnfrozen:@"setPersistenceEnabled"];
-    self->_config.persistenceEnabled = persistenceEnabled;
-}
-
-- (BOOL)persistenceEnabled {
-    return self->_config.persistenceEnabled;
-}
-
-- (void)setPersistenceCacheSizeBytes:(NSUInteger)persistenceCacheSizeBytes {
-    [self assertUnfrozen:@"setPersistenceCacheSizeBytes"];
-    self->_config.persistenceCacheSizeBytes = persistenceCacheSizeBytes;
-}
-
-- (NSUInteger)persistenceCacheSizeBytes {
-    return self->_config.persistenceCacheSizeBytes;
-}
-
-- (void)setCallbackQueue:(dispatch_queue_t)callbackQueue {
-    [self assertUnfrozen:@"setCallbackQueue"];
-    self->_config.callbackQueue = callbackQueue;
-}
-
-- (dispatch_queue_t)callbackQueue {
-    return self->_config.callbackQueue;
-}
-
-- (void)assertUnfrozen:(NSString *)methodName {
-    if (self.repo != nil) {
-        [NSException
-             raise:@"FIRDatabaseAlreadyInUse"
-            format:@"Calls to %@ must be made before any other usage of "
-                    "FIRDatabase instance.",
-                   methodName];
-    }
-}
-
-- (void)ensureRepo {
-    if (self.repo == nil) {
-        self.repo = [FRepoManager createRepo:self.repoInfo
-                                      config:self.config
-                                    database:self];
-    }
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabaseComponent.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabaseComponent.h
deleted file mode 100644
index 9d8bdb2..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabaseComponent.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright 2018 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@class FIRApp;
-@class FIRDatabase;
-
-NS_ASSUME_NONNULL_BEGIN
-
-/// This protocol is used in the interop registration process to register an
-/// instance provider for individual FIRApps.
-@protocol FIRDatabaseProvider
-
-/// Gets a FirebaseDatabase instance for the specified URL, using the specified
-/// FirebaseApp.
-- (FIRDatabase *)databaseForApp:(FIRApp *)app URL:(NSString *)url;
-
-@end
-
-/// A concrete implementation for FIRDatabaseProvider to create Database
-/// instances.
-@interface FIRDatabaseComponent : NSObject <FIRDatabaseProvider>
-
-/// The FIRApp that instances will be set up with.
-@property(nonatomic, weak, readonly) FIRApp *app;
-
-/// Unavailable, use `databaseForApp:URL:` instead.
-- (instancetype)init NS_UNAVAILABLE;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabaseComponent.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabaseComponent.m
deleted file mode 100644
index 8e44778..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabaseComponent.m
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * Copyright 2018 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FIRDatabaseComponent.h"
-
-#import "FIRDatabaseConfig_Private.h"
-#import "FIRDatabase_Private.h"
-#import "FRepoManager.h"
-
-#import <FirebaseAuthInterop/FIRAuthInterop.h>
-#import <FirebaseCore/FIRAppInternal.h>
-#import <FirebaseCore/FIRComponent.h>
-#import <FirebaseCore/FIRComponentContainer.h>
-#import <FirebaseCore/FIRDependency.h>
-#import <FirebaseCore/FIRLibrary.h>
-#import <FirebaseCore/FIROptions.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-/** A NSMutableDictionary of FirebaseApp name and FRepoInfo to FirebaseDatabase
- * instance. */
-typedef NSMutableDictionary<NSString *, FIRDatabase *> FIRDatabaseDictionary;
-
-@interface FIRDatabaseComponent () <FIRComponentLifecycleMaintainer, FIRLibrary>
-@property(nonatomic) FIRDatabaseDictionary *instances;
-/// Internal intializer.
-- (instancetype)initWithApp:(FIRApp *)app;
-@end
-
-@implementation FIRDatabaseComponent
-
-#pragma mark - Initialization
-
-- (instancetype)initWithApp:(FIRApp *)app {
-    self = [super init];
-    if (self) {
-        _app = app;
-        _instances = [NSMutableDictionary dictionary];
-    }
-    return self;
-}
-
-#pragma mark - Lifecycle
-
-+ (void)load {
-    [FIRApp registerInternalLibrary:(Class<FIRLibrary>)self
-                           withName:@"fire-db"
-                        withVersion:[FIRDatabase sdkVersion]];
-}
-
-#pragma mark - FIRComponentRegistrant
-
-+ (NSArray<FIRComponent *> *)componentsToRegister {
-    FIRDependency *authDep =
-        [FIRDependency dependencyWithProtocol:@protocol(FIRAuthInterop)
-                                   isRequired:NO];
-    FIRComponentCreationBlock creationBlock =
-        ^id _Nullable(FIRComponentContainer *container, BOOL *isCacheable) {
-        *isCacheable = YES;
-        return [[FIRDatabaseComponent alloc] initWithApp:container.app];
-    };
-    FIRComponent *databaseProvider =
-        [FIRComponent componentWithProtocol:@protocol(FIRDatabaseProvider)
-                        instantiationTiming:FIRInstantiationTimingLazy
-                               dependencies:@[ authDep ]
-                              creationBlock:creationBlock];
-    return @[ databaseProvider ];
-}
-
-#pragma mark - Instance management.
-
-- (void)appWillBeDeleted:(FIRApp *)app {
-    NSString *appName = app.name;
-    if (appName == nil) {
-        return;
-    }
-    FIRDatabaseDictionary *instances = [self instances];
-    @synchronized(instances) {
-        // Clean up the deleted instance in an effort to remove any resources
-        // still in use. Note: Any leftover instances of this exact database
-        // will be invalid.
-        for (FIRDatabase *database in [instances allValues]) {
-            [FRepoManager disposeRepos:database.config];
-        }
-        [instances removeAllObjects];
-    }
-}
-
-#pragma mark - FIRDatabaseProvider Conformance
-
-- (FIRDatabase *)databaseForApp:(FIRApp *)app URL:(NSString *)url {
-    if (app == nil) {
-        [NSException raise:@"InvalidFIRApp"
-                    format:@"nil FIRApp instance passed to databaseForApp."];
-    }
-
-    if (url == nil) {
-        [NSException raise:@"MissingDatabaseURL"
-                    format:@"Failed to get FirebaseDatabase instance: "
-                            "Specify DatabaseURL within FIRApp or from your "
-                            "databaseForApp:URL: call."];
-    }
-
-    NSURL *databaseUrl = [NSURL URLWithString:url];
-
-    if (databaseUrl == nil) {
-        [NSException raise:@"InvalidDatabaseURL"
-                    format:@"The Database URL '%@' cannot be parsed. "
-                            "Specify a valid DatabaseURL within FIRApp or from "
-                            "your databaseForApp:URL: call.",
-                           databaseUrl];
-    } else if (![databaseUrl.path isEqualToString:@""] &&
-               ![databaseUrl.path isEqualToString:@"/"]) {
-        [NSException
-             raise:@"InvalidDatabaseURL"
-            format:@"Configured Database URL '%@' is invalid. It should point "
-                    "to the root of a Firebase Database but it includes a "
-                    "path: %@",
-                   databaseUrl, databaseUrl.path];
-    }
-
-    FIRDatabaseDictionary *instances = [self instances];
-    @synchronized(instances) {
-        FParsedUrl *parsedUrl =
-            [FUtilities parseUrl:databaseUrl.absoluteString];
-        NSString *urlIndex =
-            [NSString stringWithFormat:@"%@:%@", parsedUrl.repoInfo.host,
-                                       [parsedUrl.path toString]];
-        FIRDatabase *database = instances[urlIndex];
-        if (!database) {
-            id<FAuthTokenProvider> authTokenProvider = [FAuthTokenProvider
-                authTokenProviderWithAuth:FIR_COMPONENT(FIRAuthInterop,
-                                                        app.container)];
-
-            // If this is the default app, don't set the session persistence key
-            // so that we use our default ("default") instead of the FIRApp
-            // default ("[DEFAULT]") so that we preserve the default location
-            // used by the legacy Firebase SDK.
-            NSString *sessionIdentifier = @"default";
-            if (![FIRApp isDefaultAppConfigured] ||
-                app != [FIRApp defaultApp]) {
-                sessionIdentifier = app.name;
-            }
-
-            FIRDatabaseConfig *config = [[FIRDatabaseConfig alloc]
-                initWithSessionIdentifier:sessionIdentifier
-                        authTokenProvider:authTokenProvider];
-            database = [[FIRDatabase alloc] initWithApp:app
-                                               repoInfo:parsedUrl.repoInfo
-                                                 config:config];
-            instances[urlIndex] = database;
-        }
-
-        return database;
-    }
-}
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabaseConfig.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabaseConfig.h
deleted file mode 100644
index 85399f9..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabaseConfig.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@protocol FAuthTokenProvider;
-
-NS_ASSUME_NONNULL_BEGIN
-
-/**
- * TODO: Merge FIRDatabaseConfig into FIRDatabase.
- */
-@interface FIRDatabaseConfig : NSObject
-
-- (id)initWithSessionIdentifier:(NSString *)identifier
-              authTokenProvider:(id<FAuthTokenProvider>)authTokenProvider;
-
-/**
- * By default the Firebase Database client will keep data in memory while your
- * application is running, but not when it is restarted. By setting this value
- * to YES, the data will be persisted to on-device (disk) storage and will thus
- * be available again when the app is restarted (even when there is no network
- * connectivity at that time). Note that this property must be set before
- * creating your first FIRDatabaseReference and only needs to be called once per
- * application.
- *
- * If your app uses Firebase Authentication, the client will automatically
- * persist the user's authentication token across restarts, even without
- * persistence enabled. But if the auth token expired while offline and you've
- * enabled persistence, the client will pause write operations until you
- * successfully re-authenticate (or explicitly unauthenticate) to prevent your
- * writes from being sent unauthenticated and failing due to security rules.
- */
-@property(nonatomic) BOOL persistenceEnabled;
-
-/**
- * By default the Firebase Database client will use up to 10MB of disk space to
- * cache data. If the cache grows beyond this size, the client will start
- * removing data that hasn't been recently used. If you find that your
- * application caches too little or too much data, call this method to change
- * the cache size. This property must be set before creating your first
- * FIRDatabaseReference and only needs to be called once per application.
- *
- * Note that the specified cache size is only an approximation and the size on
- * disk may temporarily exceed it at times.
- */
-@property(nonatomic) NSUInteger persistenceCacheSizeBytes;
-
-/**
- * Sets the dispatch queue on which all events are raised. The default queue is
- * the main queue.
- */
-@property(nonatomic, strong) dispatch_queue_t callbackQueue;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabaseConfig.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabaseConfig.m
deleted file mode 100644
index 9e9f8b5..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabaseConfig.m
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FIRDatabaseConfig.h"
-
-#import "FAuthTokenProvider.h"
-#import "FIRDatabaseConfig_Private.h"
-#import "FIRNoopAuthTokenProvider.h"
-
-@interface FIRDatabaseConfig (Private)
-
-@property(nonatomic, strong, readwrite) NSString *sessionIdentifier;
-
-@end
-
-@implementation FIRDatabaseConfig
-
-- (id)init {
-    [NSException raise:NSInvalidArgumentException
-                format:@"Can't create config objects!"];
-    return nil;
-}
-
-- (id)initWithSessionIdentifier:(NSString *)identifier
-              authTokenProvider:(id<FAuthTokenProvider>)authTokenProvider {
-    self = [super init];
-    if (self != nil) {
-        self->_sessionIdentifier = identifier;
-        self->_callbackQueue = dispatch_get_main_queue();
-        self->_persistenceCacheSizeBytes =
-            10 * 1024 * 1024; // Default cache size is 10MB
-        self->_authTokenProvider = authTokenProvider;
-    }
-    return self;
-}
-
-- (void)assertUnfrozen {
-    if (self.isFrozen) {
-        [NSException raise:NSGenericException
-                    format:@"Can't modify config objects after they are in use "
-                           @"for FIRDatabaseReferences."];
-    }
-}
-
-- (void)setAuthTokenProvider:(id<FAuthTokenProvider>)authTokenProvider {
-    [self assertUnfrozen];
-    self->_authTokenProvider = authTokenProvider;
-}
-
-- (void)setPersistenceEnabled:(BOOL)persistenceEnabled {
-    [self assertUnfrozen];
-    self->_persistenceEnabled = persistenceEnabled;
-}
-
-- (void)setPersistenceCacheSizeBytes:(NSUInteger)persistenceCacheSizeBytes {
-    [self assertUnfrozen];
-    // Can't be less than 1MB
-    if (persistenceCacheSizeBytes < 1024 * 1024) {
-        [NSException raise:NSInvalidArgumentException
-                    format:@"The minimum cache size must be at least 1MB"];
-    }
-    if (persistenceCacheSizeBytes > 100 * 1024 * 1024) {
-        [NSException raise:NSInvalidArgumentException
-                    format:@"Firebase Database currently doesn't support a "
-                           @"cache size larger than 100MB"];
-    }
-    self->_persistenceCacheSizeBytes = persistenceCacheSizeBytes;
-}
-
-- (void)setCallbackQueue:(dispatch_queue_t)callbackQueue {
-    [self assertUnfrozen];
-    self->_callbackQueue = callbackQueue;
-}
-
-- (void)freeze {
-    self->_isFrozen = YES;
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabaseQuery.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabaseQuery.m
deleted file mode 100644
index cd62979..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabaseQuery.m
+++ /dev/null
@@ -1,677 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FIRDatabaseQuery.h"
-#import "FChildEventRegistration.h"
-#import "FConstants.h"
-#import "FIRDatabaseQuery_Private.h"
-#import "FKeyIndex.h"
-#import "FLeafNode.h"
-#import "FPath.h"
-#import "FPathIndex.h"
-#import "FPriorityIndex.h"
-#import "FQueryParams.h"
-#import "FQuerySpec.h"
-#import "FSnapshotUtilities.h"
-#import "FValidation.h"
-#import "FValueEventRegistration.h"
-#import "FValueIndex.h"
-
-@implementation FIRDatabaseQuery
-
-@synthesize repo;
-@synthesize path;
-@synthesize queryParams;
-
-#define INVALID_QUERY_PARAM_ERROR @"InvalidQueryParameter"
-
-+ (dispatch_queue_t)sharedQueue {
-    // We use this shared queue across all of the FQueries so things happen FIFO
-    // (as opposed to dispatch_get_global_queue(0, 0) which is concurrent)
-    static dispatch_once_t pred;
-    static dispatch_queue_t sharedDispatchQueue;
-
-    dispatch_once(&pred, ^{
-      sharedDispatchQueue = dispatch_queue_create("FirebaseWorker", NULL);
-    });
-
-    return sharedDispatchQueue;
-}
-
-- (id)initWithRepo:(FRepo *)theRepo path:(FPath *)thePath {
-    return [self initWithRepo:theRepo
-                         path:thePath
-                       params:nil
-                orderByCalled:NO
-         priorityMethodCalled:NO];
-}
-
-- (id)initWithRepo:(FRepo *)theRepo
-                    path:(FPath *)thePath
-                  params:(FQueryParams *)theParams
-           orderByCalled:(BOOL)orderByCalled
-    priorityMethodCalled:(BOOL)priorityMethodCalled {
-    self = [super init];
-    if (self) {
-        self.repo = theRepo;
-        self.path = thePath;
-        if (!theParams) {
-            theParams = [FQueryParams defaultInstance];
-        }
-        if (![theParams isValid]) {
-            @throw [[NSException alloc]
-                initWithName:@"InvalidArgumentError"
-                      reason:@"Queries are limited to two constraints"
-                    userInfo:nil];
-        }
-        self.queryParams = theParams;
-        self.orderByCalled = orderByCalled;
-        self.priorityMethodCalled = priorityMethodCalled;
-    }
-    return self;
-}
-
-- (FQuerySpec *)querySpec {
-    return [[FQuerySpec alloc] initWithPath:self.path params:self.queryParams];
-}
-
-- (void)validateQueryEndpointsForParams:(FQueryParams *)params {
-    if ([params.index isEqual:[FKeyIndex keyIndex]]) {
-        if ([params hasStart]) {
-            if (params.indexStartKey != [FUtilities minName]) {
-                [NSException raise:INVALID_QUERY_PARAM_ERROR
-                            format:@"Can't use queryStartingAtValue:childKey: "
-                                   @"or queryEqualTo:andChildKey: in "
-                                   @"combination with queryOrderedByKey"];
-            }
-            if (![params.indexStartValue.val isKindOfClass:[NSString class]]) {
-                [NSException
-                     raise:INVALID_QUERY_PARAM_ERROR
-                    format:
-                        @"Can't use queryStartingAtValue: with other types "
-                        @"than string in combination with queryOrderedByKey"];
-            }
-        }
-        if ([params hasEnd]) {
-            if (params.indexEndKey != [FUtilities maxName]) {
-                [NSException raise:INVALID_QUERY_PARAM_ERROR
-                            format:@"Can't use queryEndingAtValue:childKey: or "
-                                   @"queryEqualToValue:childKey: in "
-                                   @"combination with queryOrderedByKey"];
-            }
-            if (![params.indexEndValue.val isKindOfClass:[NSString class]]) {
-                [NSException
-                     raise:INVALID_QUERY_PARAM_ERROR
-                    format:
-                        @"Can't use queryEndingAtValue: with other types than "
-                        @"string in combination with queryOrderedByKey"];
-            }
-        }
-    } else if ([params.index isEqual:[FPriorityIndex priorityIndex]]) {
-        if (([params hasStart] &&
-             ![FValidation validatePriorityValue:params.indexStartValue.val]) ||
-            ([params hasEnd] &&
-             ![FValidation validatePriorityValue:params.indexEndValue.val])) {
-            [NSException
-                 raise:INVALID_QUERY_PARAM_ERROR
-                format:@"When using queryOrderedByPriority, values provided to "
-                       @"queryStartingAtValue:, queryEndingAtValue:, or "
-                       @"queryEqualToValue: must be valid priorities."];
-        }
-    }
-}
-
-- (void)validateEqualToCall {
-    if ([self.queryParams hasStart]) {
-        [NSException
-             raise:INVALID_QUERY_PARAM_ERROR
-            format:
-                @"Cannot combine queryEqualToValue: and queryStartingAtValue:"];
-    }
-    if ([self.queryParams hasEnd]) {
-        [NSException
-             raise:INVALID_QUERY_PARAM_ERROR
-            format:
-                @"Cannot combine queryEqualToValue: and queryEndingAtValue:"];
-    }
-}
-
-- (void)validateNoPreviousOrderByCalled {
-    if (self.orderByCalled) {
-        [NSException raise:INVALID_QUERY_PARAM_ERROR
-                    format:@"Cannot use multiple queryOrderedBy calls!"];
-    }
-}
-
-- (void)validateIndexValueType:(id)type fromMethod:(NSString *)method {
-    if (type != nil && ![type isKindOfClass:[NSNumber class]] &&
-        ![type isKindOfClass:[NSString class]] &&
-        ![type isKindOfClass:[NSNull class]]) {
-        [NSException raise:INVALID_QUERY_PARAM_ERROR
-                    format:@"You can only pass nil, NSString or NSNumber to %@",
-                           method];
-    }
-}
-
-- (FIRDatabaseQuery *)queryStartingAtValue:(id)startValue {
-    return [self queryStartingAtInternal:startValue
-                                childKey:nil
-                                    from:@"queryStartingAtValue:"
-                          priorityMethod:NO];
-}
-
-- (FIRDatabaseQuery *)queryStartingAtValue:(id)startValue
-                                  childKey:(NSString *)childKey {
-    if ([self.queryParams.index isEqual:[FKeyIndex keyIndex]]) {
-        @throw [[NSException alloc]
-            initWithName:INVALID_QUERY_PARAM_ERROR
-                  reason:@"You must use queryStartingAtValue: instead of "
-                         @"queryStartingAtValue:childKey: when using "
-                         @"queryOrderedByKey:"
-                userInfo:nil];
-    }
-    return [self queryStartingAtInternal:startValue
-                                childKey:childKey
-                                    from:@"queryStartingAtValue:childKey:"
-                          priorityMethod:NO];
-}
-
-- (FIRDatabaseQuery *)queryStartingAtInternal:(id<FNode>)startValue
-                                     childKey:(NSString *)childKey
-                                         from:(NSString *)methodName
-                               priorityMethod:(BOOL)priorityMethod {
-    [self validateIndexValueType:startValue fromMethod:methodName];
-    if (childKey != nil) {
-        [FValidation validateFrom:methodName validKey:childKey];
-    }
-    if ([self.queryParams hasStart]) {
-        [NSException raise:INVALID_QUERY_PARAM_ERROR
-                    format:@"Can't call %@ after queryStartingAtValue or "
-                           @"queryEqualToValue was previously called",
-                           methodName];
-    }
-    id<FNode> startNode = [FSnapshotUtilities nodeFrom:startValue];
-    FQueryParams *params = [self.queryParams startAt:startNode
-                                            childKey:childKey];
-    [self validateQueryEndpointsForParams:params];
-    return [[FIRDatabaseQuery alloc]
-                initWithRepo:self.repo
-                        path:self.path
-                      params:params
-               orderByCalled:self.orderByCalled
-        priorityMethodCalled:priorityMethod || self.priorityMethodCalled];
-}
-
-- (FIRDatabaseQuery *)queryEndingAtValue:(id)endValue {
-    return [self queryEndingAtInternal:endValue
-                              childKey:nil
-                                  from:@"queryEndingAtValue:"
-                        priorityMethod:NO];
-}
-
-- (FIRDatabaseQuery *)queryEndingAtValue:(id)endValue
-                                childKey:(NSString *)childKey {
-    if ([self.queryParams.index isEqual:[FKeyIndex keyIndex]]) {
-        @throw [[NSException alloc]
-            initWithName:INVALID_QUERY_PARAM_ERROR
-                  reason:@"You must use queryEndingAtValue: instead of "
-                         @"queryEndingAtValue:childKey: when using "
-                         @"queryOrderedByKey:"
-                userInfo:nil];
-    }
-
-    return [self queryEndingAtInternal:endValue
-                              childKey:childKey
-                                  from:@"queryEndingAtValue:childKey:"
-                        priorityMethod:NO];
-}
-
-- (FIRDatabaseQuery *)queryEndingAtInternal:(id)endValue
-                                   childKey:(NSString *)childKey
-                                       from:(NSString *)methodName
-                             priorityMethod:(BOOL)priorityMethod {
-    [self validateIndexValueType:endValue fromMethod:methodName];
-    if (childKey != nil) {
-        [FValidation validateFrom:methodName validKey:childKey];
-    }
-    if ([self.queryParams hasEnd]) {
-        [NSException raise:INVALID_QUERY_PARAM_ERROR
-                    format:@"Can't call %@ after queryEndingAtValue or "
-                           @"queryEqualToValue was previously called",
-                           methodName];
-    }
-    id<FNode> endNode = [FSnapshotUtilities nodeFrom:endValue];
-    FQueryParams *params = [self.queryParams endAt:endNode childKey:childKey];
-    [self validateQueryEndpointsForParams:params];
-    return [[FIRDatabaseQuery alloc]
-                initWithRepo:self.repo
-                        path:self.path
-                      params:params
-               orderByCalled:self.orderByCalled
-        priorityMethodCalled:priorityMethod || self.priorityMethodCalled];
-}
-
-- (FIRDatabaseQuery *)queryEqualToValue:(id)value {
-    return [self queryEqualToInternal:value
-                             childKey:nil
-                                 from:@"queryEqualToValue:"
-                       priorityMethod:NO];
-}
-
-- (FIRDatabaseQuery *)queryEqualToValue:(id)value
-                               childKey:(NSString *)childKey {
-    if ([self.queryParams.index isEqual:[FKeyIndex keyIndex]]) {
-        @throw [[NSException alloc]
-            initWithName:INVALID_QUERY_PARAM_ERROR
-                  reason:@"You must use queryEqualToValue: instead of "
-                         @"queryEqualTo:childKey: when using queryOrderedByKey:"
-                userInfo:nil];
-    }
-    return [self queryEqualToInternal:value
-                             childKey:childKey
-                                 from:@"queryEqualToValue:childKey:"
-                       priorityMethod:NO];
-}
-
-- (FIRDatabaseQuery *)queryEqualToInternal:(id)value
-                                  childKey:(NSString *)childKey
-                                      from:(NSString *)methodName
-                            priorityMethod:(BOOL)priorityMethod {
-    [self validateIndexValueType:value fromMethod:methodName];
-    if (childKey != nil) {
-        [FValidation validateFrom:methodName validKey:childKey];
-    }
-    if ([self.queryParams hasEnd] || [self.queryParams hasStart]) {
-        [NSException
-             raise:INVALID_QUERY_PARAM_ERROR
-            format:
-                @"Can't call %@ after queryStartingAtValue, queryEndingAtValue "
-                @"or queryEqualToValue was previously called",
-                methodName];
-    }
-    id<FNode> node = [FSnapshotUtilities nodeFrom:value];
-    FQueryParams *params = [[self.queryParams startAt:node
-                                             childKey:childKey] endAt:node
-                                                             childKey:childKey];
-    [self validateQueryEndpointsForParams:params];
-    return [[FIRDatabaseQuery alloc]
-                initWithRepo:self.repo
-                        path:self.path
-                      params:params
-               orderByCalled:self.orderByCalled
-        priorityMethodCalled:priorityMethod || self.priorityMethodCalled];
-}
-
-- (void)validateLimitRange:(NSUInteger)limit {
-    // No need to check for negative ranges, since limit is unsigned
-    if (limit == 0) {
-        [NSException raise:INVALID_QUERY_PARAM_ERROR
-                    format:@"Limit can't be zero"];
-    }
-    if (limit >= 1ul << 31) {
-        [NSException raise:INVALID_QUERY_PARAM_ERROR
-                    format:@"Limit must be less than 2,147,483,648"];
-    }
-}
-
-- (FIRDatabaseQuery *)queryLimitedToFirst:(NSUInteger)limit {
-    if (self.queryParams.limitSet) {
-        [NSException raise:INVALID_QUERY_PARAM_ERROR
-                    format:@"Can't call queryLimitedToFirst: if a limit was "
-                           @"previously set"];
-    }
-    [self validateLimitRange:limit];
-    FQueryParams *params = [self.queryParams limitToFirst:limit];
-    return [[FIRDatabaseQuery alloc] initWithRepo:self.repo
-                                             path:self.path
-                                           params:params
-                                    orderByCalled:self.orderByCalled
-                             priorityMethodCalled:self.priorityMethodCalled];
-}
-
-- (FIRDatabaseQuery *)queryLimitedToLast:(NSUInteger)limit {
-    if (self.queryParams.limitSet) {
-        [NSException raise:INVALID_QUERY_PARAM_ERROR
-                    format:@"Can't call queryLimitedToLast: if a limit was "
-                           @"previously set"];
-    }
-    [self validateLimitRange:limit];
-    FQueryParams *params = [self.queryParams limitToLast:limit];
-    return [[FIRDatabaseQuery alloc] initWithRepo:self.repo
-                                             path:self.path
-                                           params:params
-                                    orderByCalled:self.orderByCalled
-                             priorityMethodCalled:self.priorityMethodCalled];
-}
-
-- (FIRDatabaseQuery *)queryOrderedByChild:(NSString *)indexPathString {
-    if ([indexPathString isEqualToString:@"$key"] ||
-        [indexPathString isEqualToString:@".key"]) {
-        @throw [[NSException alloc]
-            initWithName:INVALID_QUERY_PARAM_ERROR
-                  reason:[NSString stringWithFormat:
-                                       @"(queryOrderedByChild:) %@ is invalid. "
-                                       @" Use queryOrderedByKey: instead.",
-                                       indexPathString]
-                userInfo:nil];
-    } else if ([indexPathString isEqualToString:@"$priority"] ||
-               [indexPathString isEqualToString:@".priority"]) {
-        @throw [[NSException alloc]
-            initWithName:INVALID_QUERY_PARAM_ERROR
-                  reason:[NSString stringWithFormat:
-                                       @"(queryOrderedByChild:) %@ is invalid. "
-                                       @" Use queryOrderedByPriority: instead.",
-                                       indexPathString]
-                userInfo:nil];
-    } else if ([indexPathString isEqualToString:@"$value"] ||
-               [indexPathString isEqualToString:@".value"]) {
-        @throw [[NSException alloc]
-            initWithName:INVALID_QUERY_PARAM_ERROR
-                  reason:[NSString stringWithFormat:
-                                       @"(queryOrderedByChild:) %@ is invalid. "
-                                       @" Use queryOrderedByValue: instead.",
-                                       indexPathString]
-                userInfo:nil];
-    }
-    [self validateNoPreviousOrderByCalled];
-
-    [FValidation validateFrom:@"queryOrderedByChild:"
-              validPathString:indexPathString];
-    FPath *indexPath = [FPath pathWithString:indexPathString];
-    if (indexPath.isEmpty) {
-        @throw [[NSException alloc]
-            initWithName:INVALID_QUERY_PARAM_ERROR
-                  reason:[NSString
-                             stringWithFormat:@"(queryOrderedByChild:) with an "
-                                              @"empty path is invalid.  Use "
-                                              @"queryOrderedByValue: instead."]
-                userInfo:nil];
-    }
-    id<FIndex> index = [[FPathIndex alloc] initWithPath:indexPath];
-
-    FQueryParams *params = [self.queryParams orderBy:index];
-    [self validateQueryEndpointsForParams:params];
-    return [[FIRDatabaseQuery alloc] initWithRepo:self.repo
-                                             path:self.path
-                                           params:params
-                                    orderByCalled:YES
-                             priorityMethodCalled:self.priorityMethodCalled];
-}
-
-- (FIRDatabaseQuery *)queryOrderedByKey {
-    [self validateNoPreviousOrderByCalled];
-    FQueryParams *params = [self.queryParams orderBy:[FKeyIndex keyIndex]];
-    [self validateQueryEndpointsForParams:params];
-    return [[FIRDatabaseQuery alloc] initWithRepo:self.repo
-                                             path:self.path
-                                           params:params
-                                    orderByCalled:YES
-                             priorityMethodCalled:self.priorityMethodCalled];
-}
-
-- (FIRDatabaseQuery *)queryOrderedByValue {
-    [self validateNoPreviousOrderByCalled];
-    FQueryParams *params = [self.queryParams orderBy:[FValueIndex valueIndex]];
-    return [[FIRDatabaseQuery alloc] initWithRepo:self.repo
-                                             path:self.path
-                                           params:params
-                                    orderByCalled:YES
-                             priorityMethodCalled:self.priorityMethodCalled];
-}
-
-- (FIRDatabaseQuery *)queryOrderedByPriority {
-    [self validateNoPreviousOrderByCalled];
-    FQueryParams *params =
-        [self.queryParams orderBy:[FPriorityIndex priorityIndex]];
-    return [[FIRDatabaseQuery alloc] initWithRepo:self.repo
-                                             path:self.path
-                                           params:params
-                                    orderByCalled:YES
-                             priorityMethodCalled:self.priorityMethodCalled];
-}
-
-- (FIRDatabaseHandle)observeEventType:(FIRDataEventType)eventType
-                            withBlock:(void (^)(FIRDataSnapshot *))block {
-    [FValidation validateFrom:@"observeEventType:withBlock:"
-               knownEventType:eventType];
-    return [self observeEventType:eventType
-                        withBlock:block
-                  withCancelBlock:nil];
-}
-
-- (FIRDatabaseHandle)observeEventType:(FIRDataEventType)eventType
-       andPreviousSiblingKeyWithBlock:(fbt_void_datasnapshot_nsstring)block {
-    [FValidation
-          validateFrom:@"observeEventType:andPreviousSiblingKeyWithBlock:"
-        knownEventType:eventType];
-    return [self observeEventType:eventType
-        andPreviousSiblingKeyWithBlock:block
-                       withCancelBlock:nil];
-}
-
-- (FIRDatabaseHandle)observeEventType:(FIRDataEventType)eventType
-                            withBlock:(fbt_void_datasnapshot)block
-                      withCancelBlock:(fbt_void_nserror)cancelBlock {
-    [FValidation validateFrom:@"observeEventType:withBlock:withCancelBlock:"
-               knownEventType:eventType];
-
-    if (eventType == FIRDataEventTypeValue) {
-        // Handle FIRDataEventTypeValue specially because they shouldn't have
-        // prevName callbacks
-        NSUInteger handle = [[FUtilities LUIDGenerator] integerValue];
-        [self observeValueEventWithHandle:handle
-                                withBlock:block
-                           cancelCallback:cancelBlock];
-        return handle;
-    } else {
-        // Wrap up the userCallback so we can treat everything as a callback
-        // that has a prevName
-        fbt_void_datasnapshot userCallback = [block copy];
-        return [self observeEventType:eventType
-            andPreviousSiblingKeyWithBlock:^(FIRDataSnapshot *snapshot,
-                                             NSString *prevName) {
-              if (userCallback != nil) {
-                  userCallback(snapshot);
-              }
-            }
-                           withCancelBlock:cancelBlock];
-    }
-}
-
-- (FIRDatabaseHandle)observeEventType:(FIRDataEventType)eventType
-       andPreviousSiblingKeyWithBlock:(fbt_void_datasnapshot_nsstring)block
-                      withCancelBlock:(fbt_void_nserror)cancelBlock {
-    [FValidation validateFrom:@"observeEventType:"
-                              @"andPreviousSiblingKeyWithBlock:withCancelBlock:"
-               knownEventType:eventType];
-
-    if (eventType == FIRDataEventTypeValue) {
-        // TODO: This gets hit by observeSingleEventOfType.  Need to fix.
-        /*
-        @throw [[NSException alloc] initWithName:@"InvalidEventTypeForObserver"
-                                          reason:@"(observeEventType:andPreviousSiblingKeyWithBlock:withCancelBlock:)
-        Cannot use
-        observeEventType:andPreviousSiblingKeyWithBlock:withCancelBlock: with
-        FIRDataEventTypeValue. Use observeEventType:withBlock:withCancelBlock:
-        instead." userInfo:nil];
-        */
-    }
-
-    NSUInteger handle = [[FUtilities LUIDGenerator] integerValue];
-    NSDictionary *callbacks =
-        @{[NSNumber numberWithInteger:eventType] : [block copy]};
-    [self observeChildEventWithHandle:handle
-                        withCallbacks:callbacks
-                       cancelCallback:cancelBlock];
-
-    return handle;
-}
-
-// If we want to distinguish between value event listeners and child event
-// listeners, like in the Java client, we can consider exporting this. If we do,
-// add argument validation. Otherwise, arguments are validated in the
-// public-facing portions of the API. Also, move the FIRDatabaseHandle logic.
-- (void)observeValueEventWithHandle:(FIRDatabaseHandle)handle
-                          withBlock:(fbt_void_datasnapshot)block
-                     cancelCallback:(fbt_void_nserror)cancelBlock {
-    // Note that we don't need to copy the callbacks here, FEventRegistration
-    // callback properties set to copy
-    FValueEventRegistration *registration =
-        [[FValueEventRegistration alloc] initWithRepo:self.repo
-                                               handle:handle
-                                             callback:block
-                                       cancelCallback:cancelBlock];
-    dispatch_async([FIRDatabaseQuery sharedQueue], ^{
-      [self.repo addEventRegistration:registration forQuery:self.querySpec];
-    });
-}
-
-// Note: as with the above method, we may wish to expose this at some point.
-- (void)observeChildEventWithHandle:(FIRDatabaseHandle)handle
-                      withCallbacks:(NSDictionary *)callbacks
-                     cancelCallback:(fbt_void_nserror)cancelBlock {
-    // Note that we don't need to copy the callbacks here, FEventRegistration
-    // callback properties set to copy
-    FChildEventRegistration *registration =
-        [[FChildEventRegistration alloc] initWithRepo:self.repo
-                                               handle:handle
-                                            callbacks:callbacks
-                                       cancelCallback:cancelBlock];
-    dispatch_async([FIRDatabaseQuery sharedQueue], ^{
-      [self.repo addEventRegistration:registration forQuery:self.querySpec];
-    });
-}
-
-- (void)removeObserverWithHandle:(FIRDatabaseHandle)handle {
-    FValueEventRegistration *event =
-        [[FValueEventRegistration alloc] initWithRepo:self.repo
-                                               handle:handle
-                                             callback:nil
-                                       cancelCallback:nil];
-    dispatch_async([FIRDatabaseQuery sharedQueue], ^{
-      [self.repo removeEventRegistration:event forQuery:self.querySpec];
-    });
-}
-
-- (void)removeAllObservers {
-    [self removeObserverWithHandle:NSNotFound];
-}
-
-- (void)keepSynced:(BOOL)keepSynced {
-    if ([self.path.getFront isEqualToString:kDotInfoPrefix]) {
-        [NSException raise:NSInvalidArgumentException
-                    format:@"Can't keep query on .info tree synced (this "
-                           @"already is the case)."];
-    }
-    dispatch_async([FIRDatabaseQuery sharedQueue], ^{
-      [self.repo keepQuery:self.querySpec synced:keepSynced];
-    });
-}
-
-- (void)observeSingleEventOfType:(FIRDataEventType)eventType
-                       withBlock:(fbt_void_datasnapshot)block {
-
-    [self observeSingleEventOfType:eventType
-                         withBlock:block
-                   withCancelBlock:nil];
-}
-
-- (void)observeSingleEventOfType:(FIRDataEventType)eventType
-    andPreviousSiblingKeyWithBlock:(fbt_void_datasnapshot_nsstring)block {
-
-    [self observeSingleEventOfType:eventType
-        andPreviousSiblingKeyWithBlock:block
-                       withCancelBlock:nil];
-}
-
-- (void)observeSingleEventOfType:(FIRDataEventType)eventType
-                       withBlock:(fbt_void_datasnapshot)block
-                 withCancelBlock:(fbt_void_nserror)cancelBlock {
-
-    // XXX: user reported memory leak in method
-
-    // "When you copy a block, any references to other blocks from within that
-    // block are copied if necessary—an entire tree may be copied (from the
-    // top). If you have block variables and you reference a block from within
-    // the block, that block will be copied."
-    // http://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/Blocks/Articles/bxVariables.html#//apple_ref/doc/uid/TP40007502-CH6-SW1
-    // So... we don't need to do this since inside the on: we copy this block
-    // off the stack to the heap.
-    // __block fbt_void_datasnapshot userCallback = [callback copy];
-
-    [self observeSingleEventOfType:eventType
-        andPreviousSiblingKeyWithBlock:^(FIRDataSnapshot *snapshot,
-                                         NSString *prevName) {
-          if (block != nil) {
-              block(snapshot);
-          }
-        }
-                       withCancelBlock:cancelBlock];
-}
-
-/**
- * Attaches a listener, waits for the first event, and then removes the listener
- */
-- (void)observeSingleEventOfType:(FIRDataEventType)eventType
-    andPreviousSiblingKeyWithBlock:(fbt_void_datasnapshot_nsstring)block
-                   withCancelBlock:(fbt_void_nserror)cancelBlock {
-
-    // XXX: user reported memory leak in method
-
-    // "When you copy a block, any references to other blocks from within that
-    // block are copied if necessary—an entire tree may be copied (from the
-    // top). If you have block variables and you reference a block from within
-    // the block, that block will be copied."
-    // http://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/Blocks/Articles/bxVariables.html#//apple_ref/doc/uid/TP40007502-CH6-SW1
-    // So... we don't need to do this since inside the on: we copy this block
-    // off the stack to the heap.
-    // __block fbt_void_datasnapshot userCallback = [callback copy];
-
-    __block FIRDatabaseHandle handle;
-    __block BOOL firstCall = YES;
-
-    fbt_void_datasnapshot_nsstring callback = [block copy];
-    fbt_void_datasnapshot_nsstring wrappedCallback =
-        ^(FIRDataSnapshot *snap, NSString *prevName) {
-          if (firstCall) {
-              firstCall = NO;
-              [self removeObserverWithHandle:handle];
-              callback(snap, prevName);
-          }
-        };
-
-    fbt_void_nserror cancelCallback = [cancelBlock copy];
-    handle = [self observeEventType:eventType
-        andPreviousSiblingKeyWithBlock:wrappedCallback
-                       withCancelBlock:^(NSError *error) {
-                         [self removeObserverWithHandle:handle];
-
-                         if (cancelCallback) {
-                             cancelCallback(error);
-                         }
-                       }];
-}
-
-- (NSString *)description {
-    return [NSString
-        stringWithFormat:@"(%@ %@)", self.path, self.queryParams.description];
-}
-
-- (FIRDatabaseReference *)ref {
-    return [[FIRDatabaseReference alloc] initWithRepo:self.repo path:self.path];
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRMutableData.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRMutableData.m
deleted file mode 100644
index 5da7fae..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRMutableData.m
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FIRMutableData.h"
-#import "FChildrenNode.h"
-#import "FIRMutableData_Private.h"
-#import "FIndexedNode.h"
-#import "FNamedNode.h"
-#import "FSnapshotHolder.h"
-#import "FSnapshotUtilities.h"
-#import "FTransformedEnumerator.h"
-
-@interface FIRMutableData ()
-
-- (id)initWithPrefixPath:(FPath *)path
-       andSnapshotHolder:(FSnapshotHolder *)snapshotHolder;
-
-@property(strong, nonatomic) FSnapshotHolder *data;
-@property(strong, nonatomic) FPath *prefixPath;
-
-@end
-
-@implementation FIRMutableData
-
-@synthesize data;
-@synthesize prefixPath;
-
-- (id)initWithNode:(id<FNode>)node {
-    FSnapshotHolder *holder = [[FSnapshotHolder alloc] init];
-    FPath *path = [FPath empty];
-    [holder updateSnapshot:path withNewSnapshot:node];
-    return [self initWithPrefixPath:path andSnapshotHolder:holder];
-}
-
-- (id)initWithPrefixPath:(FPath *)path
-       andSnapshotHolder:(FSnapshotHolder *)snapshotHolder {
-    self = [super init];
-    if (self) {
-        self.prefixPath = path;
-        self.data = snapshotHolder;
-    }
-    return self;
-}
-
-- (FIRMutableData *)childDataByAppendingPath:(NSString *)path {
-    FPath *wholePath = [self.prefixPath childFromString:path];
-    return [[FIRMutableData alloc] initWithPrefixPath:wholePath
-                                    andSnapshotHolder:self.data];
-}
-
-- (FIRMutableData *)parent {
-    if ([self.prefixPath isEmpty]) {
-        return nil;
-    } else {
-        FPath *path = [self.prefixPath parent];
-        return [[FIRMutableData alloc] initWithPrefixPath:path
-                                        andSnapshotHolder:self.data];
-    }
-}
-
-- (void)setValue:(id)aValue {
-    id<FNode> node = [FSnapshotUtilities nodeFrom:aValue
-                               withValidationFrom:@"setValue:"];
-    [self.data updateSnapshot:self.prefixPath withNewSnapshot:node];
-}
-
-- (void)setPriority:(id)aPriority {
-    id<FNode> node = [self.data getNode:self.prefixPath];
-    id<FNode> pri = [FSnapshotUtilities nodeFrom:aPriority];
-    node = [node updatePriority:pri];
-    [self.data updateSnapshot:self.prefixPath withNewSnapshot:node];
-}
-
-- (id)value {
-    return [[self.data getNode:self.prefixPath] val];
-}
-
-- (id)priority {
-    return [[[self.data getNode:self.prefixPath] getPriority] val];
-}
-
-- (BOOL)hasChildren {
-    id<FNode> node = [self.data getNode:self.prefixPath];
-    return ![node isLeafNode] && ![(FChildrenNode *)node isEmpty];
-}
-
-- (BOOL)hasChildAtPath:(NSString *)path {
-    id<FNode> node = [self.data getNode:self.prefixPath];
-    FPath *childPath = [[FPath alloc] initWith:path];
-    return ![[node getChild:childPath] isEmpty];
-}
-
-- (NSUInteger)childrenCount {
-    return [[self.data getNode:self.prefixPath] numChildren];
-}
-
-- (NSString *)key {
-    return [self.prefixPath getBack];
-}
-
-- (id<FNode>)nodeValue {
-    return [self.data getNode:self.prefixPath];
-}
-
-- (NSEnumerator<FIRMutableData *> *)children {
-    FIndexedNode *indexedNode =
-        [FIndexedNode indexedNodeWithNode:self.nodeValue];
-    return [[FTransformedEnumerator alloc]
-        initWithEnumerator:[indexedNode childEnumerator]
-              andTransform:^id(FNamedNode *node) {
-                FPath *childPath = [self.prefixPath childFromString:node.name];
-                FIRMutableData *childData =
-                    [[FIRMutableData alloc] initWithPrefixPath:childPath
-                                             andSnapshotHolder:self.data];
-                return childData;
-              }];
-}
-
-- (BOOL)isEqualToData:(FIRMutableData *)other {
-    return self.data == other.data &&
-           [[self.prefixPath description]
-               isEqualToString:[other.prefixPath description]];
-}
-
-- (NSString *)description {
-    if (self.key == nil) {
-        return [NSString
-            stringWithFormat:@"FIRMutableData (top-most transaction) %@ %@",
-                             self.key, self.value];
-    } else {
-        return [NSString
-            stringWithFormat:@"FIRMutableData (%@) %@", self.key, self.value];
-    }
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRServerValue.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRServerValue.m
deleted file mode 100644
index 928dae0..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRServerValue.m
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FIRServerValue.h"
-
-@implementation FIRServerValue
-
-+ (NSDictionary *)timestamp {
-    static NSDictionary *timestamp = nil;
-    if (timestamp == nil) {
-        timestamp = @{@".sv" : @"timestamp"};
-    }
-    return timestamp;
-}
-
-+ (NSDictionary *)increment:(NSNumber *)delta {
-    return @{@".sv" : @{@"increment" : delta}};
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRTransactionResult.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRTransactionResult.m
deleted file mode 100644
index 9fec862..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRTransactionResult.m
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FIRTransactionResult.h"
-#import "FIRTransactionResult_Private.h"
-
-@implementation FIRTransactionResult
-
-@synthesize update;
-@synthesize isSuccess;
-
-+ (FIRTransactionResult *)successWithValue:(FIRMutableData *)value {
-    FIRTransactionResult *result = [[FIRTransactionResult alloc] init];
-    result.isSuccess = YES;
-    result.update = value;
-    return result;
-}
-
-+ (FIRTransactionResult *)abort {
-    FIRTransactionResult *result = [[FIRTransactionResult alloc] init];
-    result.isSuccess = NO;
-    result.update = nil;
-    return result;
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRDataSnapshot_Private.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRDataSnapshot_Private.h
deleted file mode 100644
index ac23045..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRDataSnapshot_Private.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FIRDataSnapshot.h"
-#import "FIndexedNode.h"
-#import "FTypedefs_Private.h"
-
-@interface FIRDataSnapshot ()
-
-// in _Private for testing purposes
-@property(nonatomic, strong) FIndexedNode *node;
-
-- (id)initWithRef:(FIRDatabaseReference *)ref indexedNode:(FIndexedNode *)node;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRDatabaseQuery_Private.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRDatabaseQuery_Private.h
deleted file mode 100644
index 30f19f0..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRDatabaseQuery_Private.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FIRDatabaseQuery.h"
-#import "FPath.h"
-#import "FQueryParams.h"
-#import "FRepo.h"
-#import "FRepoManager.h"
-#import "FTypedefs_Private.h"
-
-@interface FIRDatabaseQuery ()
-
-+ (dispatch_queue_t)sharedQueue;
-
-- (id)initWithRepo:(FRepo *)repo path:(FPath *)path;
-- (id)initWithRepo:(FRepo *)repo
-                    path:(FPath *)path
-                  params:(FQueryParams *)params
-           orderByCalled:(BOOL)orderByCalled
-    priorityMethodCalled:(BOOL)priorityMethodCalled;
-
-@property(nonatomic, strong) FRepo *repo;
-@property(nonatomic, strong) FPath *path;
-@property(nonatomic, strong) FQueryParams *queryParams;
-@property(nonatomic) BOOL orderByCalled;
-@property(nonatomic) BOOL priorityMethodCalled;
-
-- (FQuerySpec *)querySpec;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRDatabaseReference_Private.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRDatabaseReference_Private.h
deleted file mode 100644
index 1d7e37c..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRDatabaseReference_Private.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FIRDatabaseConfig.h"
-#import "FIRDatabaseReference.h"
-#import "FRepo.h"
-#import "FTypedefs_Private.h"
-
-@interface FIRDatabaseReference ()
-
-- (id)initWithConfig:(FIRDatabaseConfig *)config;
-- (id)initWithRepo:(FRepo *)repo path:(FPath *)path;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRDatabase_Private.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRDatabase_Private.h
deleted file mode 100644
index 0ff3e70..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRDatabase_Private.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FIRDatabase.h"
-
-@class FRepo;
-@class FRepoInfo;
-@class FIRDatabaseConfig;
-
-@interface FIRDatabase ()
-
-@property(nonatomic, strong) FRepoInfo *repoInfo;
-@property(nonatomic, strong) FIRDatabaseConfig *config;
-@property(nonatomic, strong) FRepo *repo;
-
-- (id)initWithApp:(FIRApp *)app
-         repoInfo:(FRepoInfo *)info
-           config:(FIRDatabaseConfig *)config;
-
-+ (NSString *)buildVersion;
-+ (FIRDatabase *)createDatabaseForTests:(FRepoInfo *)repoInfo
-                                 config:(FIRDatabaseConfig *)config;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRMutableData_Private.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRMutableData_Private.h
deleted file mode 100644
index fded102..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRMutableData_Private.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FIRMutableData.h"
-#import "FNode.h"
-
-@interface FIRMutableData ()
-
-- (id)initWithNode:(id<FNode>)node;
-- (id<FNode>)nodeValue;
-- (BOOL)isEqualToData:(FIRMutableData *)other;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRTransactionResult_Private.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRTransactionResult_Private.h
deleted file mode 100644
index bdf250a..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRTransactionResult_Private.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FIRMutableData.h"
-#import "FIRTransactionResult.h"
-
-@interface FIRTransactionResult ()
-
-@property(nonatomic) BOOL isSuccess;
-@property(nonatomic, strong) FIRMutableData *update;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FTypedefs_Private.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FTypedefs_Private.h
deleted file mode 100644
index dac55bc..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FTypedefs_Private.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __FTYPEDEFS_PRIVATE__
-#define __FTYPEDEFS_PRIVATE__
-
-#import <Foundation/Foundation.h>
-
-typedef NS_ENUM(NSInteger, FTransactionStatus) {
-    FTransactionInitializing,   // 0
-    FTransactionRun,            // 1
-    FTransactionSent,           // 2
-    FTransactionCompleted,      // 3
-    FTransactionSentNeedsAbort, // 4
-    FTransactionNeedsAbort      // 5
-};
-
-@protocol FNode;
-@class FPath;
-@class FIRTransactionResult;
-@class FIRMutableData;
-@class FIRDataSnapshot;
-@class FCompoundHash;
-
-typedef void (^fbt_void_nserror_bool_datasnapshot)(NSError *error,
-                                                   BOOL committed,
-                                                   FIRDataSnapshot *snapshot);
-typedef FIRTransactionResult * (^fbt_transactionresult_mutabledata)(
-    FIRMutableData *currentData);
-typedef void (^fbt_void_path_node)(FPath *, id<FNode>);
-typedef void (^fbt_void_nsstring)(NSString *);
-typedef BOOL (^fbt_bool_nsstring_node)(NSString *, id<FNode>);
-typedef void (^fbt_void_path_node_marray)(FPath *, id<FNode>, NSMutableArray *);
-typedef BOOL (^fbt_bool_void)(void);
-typedef void (^fbt_void_nsstring_nsstring)(NSString *str1, NSString *str2);
-typedef void (^fbt_void_nsstring_nserror)(NSString *str, NSError *error);
-typedef BOOL (^fbt_bool_path)(FPath *str);
-typedef void (^fbt_void_id)(id data);
-typedef NSString * (^fbt_nsstring_void)(void);
-typedef FCompoundHash * (^fbt_compoundhash_void)(void);
-typedef NSArray * (^fbt_nsarray_nsstring_id)(NSString *status, id Data);
-typedef NSArray * (^fbt_nsarray_nsstring)(NSString *status);
-
-// WWDC 2012 session 712 starting in page 83 for saving blocks in properties
-// (use @property (strong) type name).
-
-#endif
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Constants/FConstants.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Constants/FConstants.h
deleted file mode 100644
index ae237a6..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Constants/FConstants.h
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef Firebase_FConstants_h
-#define Firebase_FConstants_h
-
-#import <Foundation/Foundation.h>
-
-#pragma mark -
-#pragma mark Wire Protocol Envelope Constants
-
-FOUNDATION_EXPORT NSString *const kFWPRequestType;
-FOUNDATION_EXPORT NSString *const kFWPRequestTypeData;
-FOUNDATION_EXPORT NSString *const kFWPRequestDataPayload;
-FOUNDATION_EXPORT NSString *const kFWPRequestNumber;
-FOUNDATION_EXPORT NSString *const kFWPRequestPayloadBody;
-FOUNDATION_EXPORT NSString *const kFWPRequestError;
-FOUNDATION_EXPORT NSString *const kFWPRequestAction;
-FOUNDATION_EXPORT NSString *const kFWPResponseForRNData;
-FOUNDATION_EXPORT NSString *const kFWPResponseForActionStatus;
-FOUNDATION_EXPORT NSString *const kFWPResponseForActionStatusOk;
-FOUNDATION_EXPORT NSString *const kFWPResponseForActionStatusDataStale;
-FOUNDATION_EXPORT NSString *const kFWPResponseForActionData;
-FOUNDATION_EXPORT NSString *const kFWPResponseDataWarnings;
-
-FOUNDATION_EXPORT NSString *const kFWPAsyncServerAction;
-FOUNDATION_EXPORT NSString *const kFWPAsyncServerPayloadBody;
-FOUNDATION_EXPORT NSString *const kFWPAsyncServerDataUpdate;
-FOUNDATION_EXPORT NSString *const kFWPAsyncServerDataMerge;
-FOUNDATION_EXPORT NSString *const kFWPAsyncServerDataRangeMerge;
-FOUNDATION_EXPORT NSString *const kFWPAsyncServerAuthRevoked;
-FOUNDATION_EXPORT NSString *const kFWPASyncServerListenCancelled;
-FOUNDATION_EXPORT NSString *const kFWPAsyncServerSecurityDebug;
-FOUNDATION_EXPORT NSString
-    *const kFWPAsyncServerDataUpdateBodyPath; // {"a": "d", "b": {"p": "/", "d":
-                                              // "<data>""}}
-FOUNDATION_EXPORT NSString *const kFWPAsyncServerDataUpdateBodyData;
-FOUNDATION_EXPORT NSString *const kFWPAsyncServerDataUpdateStartPath;
-FOUNDATION_EXPORT NSString *const kFWPAsyncServerDataUpdateEndPath;
-FOUNDATION_EXPORT NSString *const kFWPAsyncServerDataUpdateRangeMerge;
-FOUNDATION_EXPORT NSString *const kFWPAsyncServerDataUpdateBodyTag;
-FOUNDATION_EXPORT NSString *const kFWPAsyncServerDataQueries;
-
-FOUNDATION_EXPORT NSString *const kFWPAsyncServerEnvelopeType;
-FOUNDATION_EXPORT NSString *const kFWPAsyncServerEnvelopeData;
-FOUNDATION_EXPORT NSString *const kFWPAsyncServerControlMessage;
-FOUNDATION_EXPORT NSString *const kFWPAsyncServerControlMessageType;
-FOUNDATION_EXPORT NSString *const kFWPAsyncServerControlMessageData;
-FOUNDATION_EXPORT NSString *const kFWPAsyncServerDataMessage;
-
-FOUNDATION_EXPORT NSString *const kFWPAsyncServerHello;
-FOUNDATION_EXPORT NSString *const kFWPAsyncServerHelloTimestamp;
-FOUNDATION_EXPORT NSString *const kFWPAsyncServerHelloVersion;
-FOUNDATION_EXPORT NSString *const kFWPAsyncServerHelloConnectedHost;
-FOUNDATION_EXPORT NSString *const kFWPAsyncServerHelloSession;
-
-FOUNDATION_EXPORT NSString *const kFWPAsyncServerControlMessageShutdown;
-FOUNDATION_EXPORT NSString *const kFWPAsyncServerControlMessageReset;
-
-#pragma mark -
-#pragma mark Wire Protocol Payload Constants
-
-FOUNDATION_EXPORT NSString *const kFWPRequestActionPut;
-FOUNDATION_EXPORT NSString *const kFWPRequestActionMerge;
-FOUNDATION_EXPORT NSString *const kFWPRequestActionTaggedListen;
-FOUNDATION_EXPORT NSString *const kFWPRequestActionTaggedUnlisten;
-FOUNDATION_EXPORT NSString
-    *const kFWPRequestActionListen; // {"t": "d", "d": {"r": 1, "a": "l", "b": {
-                                    // "p": "/" } } }
-FOUNDATION_EXPORT NSString *const kFWPRequestActionUnlisten;
-FOUNDATION_EXPORT NSString *const kFWPRequestActionStats;
-FOUNDATION_EXPORT NSString *const kFWPRequestActionDisconnectPut;
-FOUNDATION_EXPORT NSString *const kFWPRequestActionDisconnectMerge;
-FOUNDATION_EXPORT NSString *const kFWPRequestActionDisconnectCancel;
-FOUNDATION_EXPORT NSString *const kFWPRequestActionAuth;
-FOUNDATION_EXPORT NSString *const kFWPRequestActionUnauth;
-FOUNDATION_EXPORT NSString *const kFWPRequestCredential;
-FOUNDATION_EXPORT NSString *const kFWPRequestPath;
-FOUNDATION_EXPORT NSString *const kFWPRequestCounters;
-FOUNDATION_EXPORT NSString *const kFWPRequestQueries;
-FOUNDATION_EXPORT NSString *const kFWPRequestTag;
-FOUNDATION_EXPORT NSString *const kFWPRequestData;
-FOUNDATION_EXPORT NSString *const kFWPRequestHash;
-FOUNDATION_EXPORT NSString *const kFWPRequestCompoundHash;
-FOUNDATION_EXPORT NSString *const kFWPRequestCompoundHashPaths;
-FOUNDATION_EXPORT NSString *const kFWPRequestCompoundHashHashes;
-FOUNDATION_EXPORT NSString *const kFWPRequestStatus;
-
-#pragma mark -
-#pragma mark Websock Transport Constants
-
-FOUNDATION_EXPORT NSString *const kWireProtocolVersionParam;
-FOUNDATION_EXPORT NSString *const kWebsocketProtocolVersion;
-FOUNDATION_EXPORT NSString *const kWebsocketServerKillPacket;
-FOUNDATION_EXPORT const int kWebsocketMaxFrameSize;
-FOUNDATION_EXPORT NSUInteger const kWebsocketKeepaliveInterval;
-FOUNDATION_EXPORT NSUInteger const kWebsocketConnectTimeout;
-
-FOUNDATION_EXPORT float const kPersistentConnReconnectMinDelay;
-FOUNDATION_EXPORT float const kPersistentConnReconnectMaxDelay;
-FOUNDATION_EXPORT float const kPersistentConnReconnectMultiplier;
-FOUNDATION_EXPORT float const
-    kPersistentConnSuccessfulConnectionEstablishedDelay;
-
-#pragma mark -
-#pragma mark Query / QueryParams constants
-
-FOUNDATION_EXPORT NSString *const kQueryDefault;
-FOUNDATION_EXPORT NSString *const kQueryDefaultObject;
-FOUNDATION_EXPORT NSString *const kViewManagerDictConstView;
-FOUNDATION_EXPORT NSString *const kFQPIndexStartValue;
-FOUNDATION_EXPORT NSString *const kFQPIndexStartName;
-FOUNDATION_EXPORT NSString *const kFQPIndexEndValue;
-FOUNDATION_EXPORT NSString *const kFQPIndexEndName;
-FOUNDATION_EXPORT NSString *const kFQPLimit;
-FOUNDATION_EXPORT NSString *const kFQPViewFrom;
-FOUNDATION_EXPORT NSString *const kFQPViewFromLeft;
-FOUNDATION_EXPORT NSString *const kFQPViewFromRight;
-FOUNDATION_EXPORT NSString *const kFQPIndex;
-
-#pragma mark -
-#pragma mark Interrupt Reasons
-
-FOUNDATION_EXPORT NSString *const kFInterruptReasonServerKill;
-FOUNDATION_EXPORT NSString *const kFInterruptReasonWaitingForOpen;
-FOUNDATION_EXPORT NSString *const kFInterruptReasonRepoInterrupt;
-FOUNDATION_EXPORT NSString *const kFInterruptReasonAuthExpired;
-
-#pragma mark -
-#pragma mark Payload constants
-
-FOUNDATION_EXPORT NSString *const kPayloadPriority;
-FOUNDATION_EXPORT NSString *const kPayloadValue;
-FOUNDATION_EXPORT NSString *const kPayloadMetadataPrefix;
-
-#pragma mark -
-#pragma mark ServerValue constants
-
-FOUNDATION_EXPORT NSString *const kServerValueSubKey;
-FOUNDATION_EXPORT NSString *const kServerValuePriority;
-
-#pragma mark -
-#pragma mark.info/ constants
-
-FOUNDATION_EXPORT NSString *const kDotInfoPrefix;
-FOUNDATION_EXPORT NSString *const kDotInfoConnected;
-FOUNDATION_EXPORT NSString *const kDotInfoServerTimeOffset;
-
-#pragma mark -
-#pragma mark ObjectiveC to JavaScript type constants
-
-FOUNDATION_EXPORT NSString *const kJavaScriptObject;
-FOUNDATION_EXPORT NSString *const kJavaScriptString;
-FOUNDATION_EXPORT NSString *const kJavaScriptBoolean;
-FOUNDATION_EXPORT NSString *const kJavaScriptNumber;
-FOUNDATION_EXPORT NSString *const kJavaScriptNull;
-FOUNDATION_EXPORT NSString *const kJavaScriptTrue;
-FOUNDATION_EXPORT NSString *const kJavaScriptFalse;
-
-#pragma mark -
-#pragma mark Error handling constants
-
-FOUNDATION_EXPORT NSString *const kFErrorDomain;
-FOUNDATION_EXPORT NSUInteger const kFAuthError;
-FOUNDATION_EXPORT NSString *const kFErrorWriteCanceled;
-
-#pragma mark -
-#pragma mark Validation Constants
-
-FOUNDATION_EXPORT NSUInteger const kFirebaseMaxObjectDepth;
-FOUNDATION_EXPORT const unsigned int kFirebaseMaxLeafSize;
-
-#pragma mark -
-#pragma mark Transaction Constants
-
-FOUNDATION_EXPORT NSUInteger const kFTransactionMaxRetries;
-FOUNDATION_EXPORT NSString *const kFTransactionTooManyRetries;
-FOUNDATION_EXPORT NSString *const kFTransactionNoData;
-FOUNDATION_EXPORT NSString *const kFTransactionSet;
-FOUNDATION_EXPORT NSString *const kFTransactionDisconnect;
-
-#endif
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Constants/FConstants.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Constants/FConstants.m
deleted file mode 100644
index 2343991..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Constants/FConstants.m
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FConstants.h"
-
-#pragma mark -
-#pragma mark Wire Protocol Envelope Constants
-
-NSString *const kFWPRequestType = @"t";
-NSString *const kFWPRequestTypeData = @"d";
-NSString *const kFWPRequestDataPayload = @"d";
-NSString *const kFWPRequestNumber = @"r";
-NSString *const kFWPRequestPayloadBody = @"b";
-NSString *const kFWPRequestError = @"error";
-NSString *const kFWPRequestAction = @"a";
-NSString *const kFWPResponseForRNData = @"b";
-NSString *const kFWPResponseForActionStatus = @"s";
-NSString *const kFWPResponseForActionStatusOk = @"ok";
-NSString *const kFWPResponseForActionStatusDataStale = @"datastale";
-NSString *const kFWPResponseForActionData = @"d";
-NSString *const kFWPResponseDataWarnings = @"w";
-NSString *const kFWPAsyncServerAction = @"a";
-NSString *const kFWPAsyncServerPayloadBody = @"b";
-NSString *const kFWPAsyncServerDataUpdate = @"d";
-NSString *const kFWPAsyncServerDataMerge = @"m";
-NSString *const kFWPAsyncServerDataRangeMerge = @"rm";
-NSString *const kFWPAsyncServerAuthRevoked = @"ac";
-NSString *const kFWPASyncServerListenCancelled = @"c";
-NSString *const kFWPAsyncServerSecurityDebug = @"sd";
-NSString *const kFWPAsyncServerDataUpdateBodyPath =
-    @"p"; // {"a": "d", "b": {"p": "/", "d": "<data>"}}
-NSString *const kFWPAsyncServerDataUpdateBodyData = @"d";
-NSString *const kFWPAsyncServerDataUpdateStartPath = @"s";
-NSString *const kFWPAsyncServerDataUpdateEndPath = @"e";
-NSString *const kFWPAsyncServerDataUpdateRangeMerge = @"m";
-NSString *const kFWPAsyncServerDataUpdateBodyTag = @"t";
-NSString *const kFWPAsyncServerDataQueries = @"q";
-
-NSString *const kFWPAsyncServerEnvelopeType = @"t";
-NSString *const kFWPAsyncServerEnvelopeData = @"d";
-NSString *const kFWPAsyncServerControlMessage = @"c";
-NSString *const kFWPAsyncServerControlMessageType = @"t";
-NSString *const kFWPAsyncServerControlMessageData = @"d";
-NSString *const kFWPAsyncServerDataMessage = @"d";
-
-NSString *const kFWPAsyncServerHello = @"h";
-NSString *const kFWPAsyncServerHelloTimestamp = @"ts";
-NSString *const kFWPAsyncServerHelloVersion = @"v";
-NSString *const kFWPAsyncServerHelloConnectedHost = @"h";
-NSString *const kFWPAsyncServerHelloSession = @"s";
-
-NSString *const kFWPAsyncServerControlMessageShutdown = @"s";
-NSString *const kFWPAsyncServerControlMessageReset = @"r";
-
-#pragma mark -
-#pragma mark Wire Protocol Payload Constants
-
-NSString *const kFWPRequestActionPut = @"p";
-NSString *const kFWPRequestActionMerge = @"m";
-NSString *const kFWPRequestActionListen =
-    @"l"; // {"t": "d", "d": {"r": 1, "a": "l", "b": { "p": "/" } } }
-NSString *const kFWPRequestActionUnlisten = @"u";
-NSString *const kFWPRequestActionStats = @"s";
-NSString *const kFWPRequestActionTaggedListen = @"q";
-NSString *const kFWPRequestActionTaggedUnlisten = @"n";
-NSString *const kFWPRequestActionDisconnectPut = @"o";
-NSString *const kFWPRequestActionDisconnectMerge = @"om";
-NSString *const kFWPRequestActionDisconnectCancel = @"oc";
-NSString *const kFWPRequestActionAuth = @"auth";
-NSString *const kFWPRequestActionUnauth = @"unauth";
-NSString *const kFWPRequestCredential = @"cred";
-NSString *const kFWPRequestPath = @"p";
-NSString *const kFWPRequestCounters = @"c";
-NSString *const kFWPRequestQueries = @"q";
-NSString *const kFWPRequestTag = @"t";
-NSString *const kFWPRequestData = @"d";
-NSString *const kFWPRequestHash = @"h";
-NSString *const kFWPRequestCompoundHash = @"ch";
-NSString *const kFWPRequestCompoundHashPaths = @"ps";
-NSString *const kFWPRequestCompoundHashHashes = @"hs";
-NSString *const kFWPRequestStatus = @"s";
-
-#pragma mark -
-#pragma mark Websock Transport Constants
-
-NSString *const kWireProtocolVersionParam = @"v";
-NSString *const kWebsocketProtocolVersion = @"5";
-NSString *const kWebsocketServerKillPacket = @"kill";
-const int kWebsocketMaxFrameSize = 16384;
-NSUInteger const kWebsocketKeepaliveInterval = 45;
-NSUInteger const kWebsocketConnectTimeout = 30;
-
-float const kPersistentConnReconnectMinDelay = 1.0;
-float const kPersistentConnReconnectMaxDelay = 30.0;
-float const kPersistentConnReconnectMultiplier = 1.3f;
-float const kPersistentConnSuccessfulConnectionEstablishedDelay = 30.0;
-
-#pragma mark -
-#pragma mark Query constants
-
-NSString *const kQueryDefault = @"default";
-NSString *const kQueryDefaultObject = @"{}";
-NSString *const kViewManagerDictConstView = @"view";
-NSString *const kFQPIndexStartValue = @"sp";
-NSString *const kFQPIndexStartName = @"sn";
-NSString *const kFQPIndexEndValue = @"ep";
-NSString *const kFQPIndexEndName = @"en";
-NSString *const kFQPLimit = @"l";
-NSString *const kFQPViewFrom = @"vf";
-NSString *const kFQPViewFromLeft = @"l";
-NSString *const kFQPViewFromRight = @"r";
-NSString *const kFQPIndex = @"i";
-
-#pragma mark -
-#pragma mark Interrupt Reasons
-
-NSString *const kFInterruptReasonServerKill = @"server_kill";
-NSString *const kFInterruptReasonWaitingForOpen = @"waiting_for_open";
-NSString *const kFInterruptReasonRepoInterrupt = @"repo_interrupt";
-
-#pragma mark -
-#pragma mark Payload constants
-
-NSString *const kPayloadPriority = @".priority";
-NSString *const kPayloadValue = @".value";
-NSString *const kPayloadMetadataPrefix = @".";
-
-#pragma mark -
-#pragma mark ServerValue constants
-
-NSString *const kServerValueSubKey = @".sv";
-NSString *const kServerValuePriority = @"timestamp";
-
-#pragma mark -
-#pragma mark.info/ constants
-
-NSString *const kDotInfoPrefix = @".info";
-NSString *const kDotInfoConnected = @"connected";
-NSString *const kDotInfoServerTimeOffset = @"serverTimeOffset";
-
-#pragma mark -
-#pragma mark ObjectiveC to JavaScript type constants
-
-NSString *const kJavaScriptObject = @"object";
-NSString *const kJavaScriptString = @"string";
-NSString *const kJavaScriptBoolean = @"boolean";
-NSString *const kJavaScriptNumber = @"number";
-NSString *const kJavaScriptNull = @"null";
-NSString *const kJavaScriptTrue = @"true";
-NSString *const kJavaScriptFalse = @"false";
-
-#pragma mark -
-#pragma mark Error handling constants
-
-NSString *const kFErrorDomain = @"com.firebase";
-NSUInteger const kFAuthError = 1;
-NSString *const kFErrorWriteCanceled = @"write_canceled";
-
-#pragma mark -
-#pragma mark Validation Constants
-
-NSUInteger const kFirebaseMaxObjectDepth = 1000;
-const unsigned int kFirebaseMaxLeafSize = 1024 * 1024 * 10; // 10 MB
-
-#pragma mark -
-#pragma mark Transaction Constants
-
-NSUInteger const kFTransactionMaxRetries = 25;
-NSString *const kFTransactionTooManyRetries = @"maxretry";
-NSString *const kFTransactionNoData = @"nodata";
-NSString *const kFTransactionSet = @"set";
-NSString *const kFTransactionDisconnect = @"disconnect";
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FCompoundHash.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FCompoundHash.h
deleted file mode 100644
index 2453a81..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FCompoundHash.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#import "FNode.h"
-
-@interface FCompoundHashBuilder : NSObject
-
-- (FPath *)currentPath;
-
-@end
-
-typedef BOOL (^FCompoundHashSplitStrategy)(FCompoundHashBuilder *builder);
-
-@interface FCompoundHash : NSObject
-
-@property(nonatomic, strong, readonly) NSArray *posts;
-@property(nonatomic, strong, readonly) NSArray *hashes;
-
-+ (FCompoundHash *)fromNode:(id<FNode>)node;
-+ (FCompoundHash *)fromNode:(id<FNode>)node
-              splitStrategy:(FCompoundHashSplitStrategy)strategy;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FCompoundHash.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FCompoundHash.m
deleted file mode 100644
index ced79cd..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FCompoundHash.m
+++ /dev/null
@@ -1,259 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FCompoundHash.h"
-#import "FChildrenNode.h"
-#import "FLeafNode.h"
-#import "FSnapshotUtilities.h"
-#import "FStringUtilities.h"
-
-@interface FCompoundHashBuilder ()
-
-@property(nonatomic, strong) FCompoundHashSplitStrategy splitStrategy;
-
-@property(nonatomic, strong) NSMutableArray *currentPaths;
-@property(nonatomic, strong) NSMutableArray *currentHashes;
-
-@end
-
-@implementation FCompoundHashBuilder {
-
-    // NOTE: We use the existence of this to know if we've started building a
-    // range (i.e. encountered a leaf node).
-    NSMutableString *optHashValueBuilder;
-
-    // The current path as a stack. This is used in combination with
-    // currentPathDepth to simultaneously store the last leaf node path. The
-    // depth is changed when descending and ascending, at the same time the
-    // current key is set for the current depth. Because the keys are left
-    // unchanged for ascending the path will also contain the path of the last
-    // visited leaf node (using lastLeafDepth elements)
-    NSMutableArray *currentPath;
-    NSInteger lastLeafDepth;
-    NSInteger currentPathDepth;
-
-    BOOL needsComma;
-}
-
-- (instancetype)initWithSplitStrategy:(FCompoundHashSplitStrategy)strategy {
-    self = [super init];
-    if (self != nil) {
-        self->_splitStrategy = strategy;
-        self->optHashValueBuilder = nil;
-        self->currentPath = [NSMutableArray array];
-        self->lastLeafDepth = -1;
-        self->currentPathDepth = 0;
-        self->needsComma = YES;
-        self->_currentPaths = [NSMutableArray array];
-        self->_currentHashes = [NSMutableArray array];
-    }
-    return self;
-}
-
-- (BOOL)isBuildingRange {
-    return self->optHashValueBuilder != nil;
-}
-
-- (NSUInteger)currentHashLength {
-    return self->optHashValueBuilder.length;
-}
-
-- (FPath *)currentPath {
-    return [self currentPathWithDepth:self->currentPathDepth];
-}
-
-- (FPath *)currentPathWithDepth:(NSInteger)depth {
-    NSArray *pieces =
-        [self->currentPath subarrayWithRange:NSMakeRange(0, depth)];
-    return [[FPath alloc] initWithPieces:pieces andPieceNum:0];
-}
-
-- (void)enumerateCurrentPathToDepth:(NSInteger)depth
-                          withBlock:(void (^)(NSString *key))block {
-    for (NSInteger i = 0; i < depth; i++) {
-        block(self->currentPath[i]);
-    }
-}
-
-- (void)appendKey:(NSString *)key toString:(NSMutableString *)string {
-    [FSnapshotUtilities appendHashV2RepresentationForString:key
-                                                   toString:string];
-}
-
-- (void)ensureRange {
-    if (![self isBuildingRange]) {
-        optHashValueBuilder = [NSMutableString string];
-        [optHashValueBuilder appendString:@"("];
-        [self
-            enumerateCurrentPathToDepth:self->currentPathDepth
-                              withBlock:^(NSString *key) {
-                                [self appendKey:key
-                                       toString:self->optHashValueBuilder];
-                                [self->optHashValueBuilder appendString:@":("];
-                              }];
-        self->needsComma = NO;
-    }
-}
-
-- (void)processLeaf:(FLeafNode *)leafNode {
-    [self ensureRange];
-
-    self->lastLeafDepth = self->currentPathDepth;
-    [FSnapshotUtilities
-        appendHashRepresentationForLeafNode:leafNode
-                                   toString:self->optHashValueBuilder
-                                hashVersion:FDataHashVersionV2];
-    self->needsComma = YES;
-    if (self.splitStrategy(self)) {
-        [self endRange];
-    }
-}
-
-- (void)startChild:(NSString *)key {
-    [self ensureRange];
-
-    if (self->needsComma) {
-        [self->optHashValueBuilder appendString:@","];
-    }
-    [self appendKey:key toString:self->optHashValueBuilder];
-    [self->optHashValueBuilder appendString:@":("];
-    if (self->currentPathDepth == currentPath.count) {
-        [self->currentPath addObject:key];
-    } else {
-        self->currentPath[self->currentPathDepth] = key;
-    }
-    self->currentPathDepth++;
-    self->needsComma = NO;
-}
-
-- (void)endChild {
-    self->currentPathDepth--;
-    if ([self isBuildingRange]) {
-        [self->optHashValueBuilder appendString:@")"];
-    }
-    self->needsComma = YES;
-}
-
-- (void)finishHashing {
-    NSAssert(self->currentPathDepth == 0,
-             @"Can't finish hashing in the middle of processing a child");
-    if ([self isBuildingRange]) {
-        [self endRange];
-    }
-
-    // Always close with the empty hash for the remaining range to allow simple
-    // appending
-    [self.currentHashes addObject:@""];
-}
-
-- (void)endRange {
-    NSAssert([self isBuildingRange],
-             @"Can't end range without starting a range!");
-    // Add closing parenthesis for current depth
-    for (NSUInteger i = 0; i < currentPathDepth; i++) {
-        [self->optHashValueBuilder appendString:@")"];
-    }
-    [self->optHashValueBuilder appendString:@")"];
-
-    FPath *lastLeafPath = [self currentPathWithDepth:self->lastLeafDepth];
-    NSString *hash =
-        [FStringUtilities base64EncodedSha1:self->optHashValueBuilder];
-    [self.currentHashes addObject:hash];
-    [self.currentPaths addObject:lastLeafPath];
-
-    self->optHashValueBuilder = nil;
-}
-
-@end
-
-@interface FCompoundHash ()
-
-@property(nonatomic, strong, readwrite) NSArray *posts;
-@property(nonatomic, strong, readwrite) NSArray *hashes;
-
-@end
-
-@implementation FCompoundHash
-
-- (id)initWithPosts:(NSArray *)posts hashes:(NSArray *)hashes {
-    self = [super init];
-    if (self != nil) {
-        if (posts.count != hashes.count - 1) {
-            [NSException raise:NSInvalidArgumentException
-                        format:@"Number of posts need to be n-1 for n hashes "
-                               @"in FCompoundHash"];
-        }
-        self.posts = posts;
-        self.hashes = hashes;
-    }
-    return self;
-}
-
-+ (FCompoundHashSplitStrategy)simpleSizeSplitStrategyForNode:(id<FNode>)node {
-    NSUInteger estimatedSize =
-        [FSnapshotUtilities estimateSerializedNodeSize:node];
-
-    // Splits for
-    // 1k -> 512 (2 parts)
-    // 5k -> 715 (7 parts)
-    // 100k -> 3.2k (32 parts)
-    // 500k -> 7k (71 parts)
-    // 5M -> 23k (228 parts)
-    NSUInteger splitThreshold = MAX(512, (NSUInteger)sqrt(estimatedSize * 100));
-
-    return ^BOOL(FCompoundHashBuilder *builder) {
-      // Never split on priorities
-      return [builder currentHashLength] > splitThreshold &&
-             ![[[builder currentPath] getBack] isEqualToString:@".priority"];
-    };
-}
-
-+ (FCompoundHash *)fromNode:(id<FNode>)node {
-    return [FCompoundHash
-             fromNode:node
-        splitStrategy:[FCompoundHash simpleSizeSplitStrategyForNode:node]];
-}
-
-+ (FCompoundHash *)fromNode:(id<FNode>)node
-              splitStrategy:(FCompoundHashSplitStrategy)strategy {
-    if ([node isEmpty]) {
-        return [[FCompoundHash alloc] initWithPosts:@[] hashes:@[ @"" ]];
-    } else {
-        FCompoundHashBuilder *builder =
-            [[FCompoundHashBuilder alloc] initWithSplitStrategy:strategy];
-        [FCompoundHash processNode:node builder:builder];
-        [builder finishHashing];
-        return [[FCompoundHash alloc] initWithPosts:builder.currentPaths
-                                             hashes:builder.currentHashes];
-    }
-}
-
-+ (void)processNode:(id<FNode>)node builder:(FCompoundHashBuilder *)builder {
-    if ([node isLeafNode]) {
-        [builder processLeaf:node];
-    } else {
-        NSAssert(![node isEmpty], @"Can't calculate hash on empty node!");
-        FChildrenNode *childrenNode = (FChildrenNode *)node;
-        [childrenNode enumerateChildrenAndPriorityUsingBlock:^(
-                          NSString *key, id<FNode> node, BOOL *stop) {
-          [builder startChild:key];
-          [self processNode:node builder:builder];
-          [builder endChild];
-        }];
-    }
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FListenProvider.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FListenProvider.h
deleted file mode 100644
index 8efd803..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FListenProvider.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FTypedefs_Private.h"
-
-@class FQuerySpec;
-@protocol FSyncTreeHash;
-
-typedef NSArray * (^fbt_startListeningBlock)(FQuerySpec *query, NSNumber *tagId,
-                                             id<FSyncTreeHash> hash,
-                                             fbt_nsarray_nsstring onComplete);
-typedef void (^fbt_stopListeningBlock)(FQuerySpec *query, NSNumber *tagId);
-
-@interface FListenProvider : NSObject
-
-@property(nonatomic, copy) fbt_startListeningBlock startListening;
-@property(nonatomic, copy) fbt_stopListeningBlock stopListening;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FListenProvider.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FListenProvider.m
deleted file mode 100644
index 27da015..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FListenProvider.m
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FListenProvider.h"
-#import "FIRDatabaseQuery.h"
-
-@implementation FListenProvider
-
-@synthesize startListening;
-@synthesize stopListening;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FPersistentConnection.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FPersistentConnection.h
deleted file mode 100644
index 81836fd..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FPersistentConnection.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FConnection.h"
-#import "FRepoInfo.h"
-#import "FTypedefs.h"
-#import "FTypedefs_Private.h"
-#import <Foundation/Foundation.h>
-
-@protocol FPersistentConnectionDelegate;
-@protocol FSyncTreeHash;
-@class FQuerySpec;
-@class FIRDatabaseConfig;
-
-@interface FPersistentConnection : NSObject <FConnectionDelegate>
-
-@property(nonatomic, weak) id<FPersistentConnectionDelegate> delegate;
-@property(nonatomic) BOOL pauseWrites;
-
-- (id)initWithRepoInfo:(FRepoInfo *)repoInfo
-         dispatchQueue:(dispatch_queue_t)queue
-                config:(FIRDatabaseConfig *)config;
-
-- (void)open;
-
-- (void)putData:(id)data
-         forPath:(NSString *)pathString
-        withHash:(NSString *)hash
-    withCallback:(fbt_void_nsstring_nsstring)onComplete;
-- (void)mergeData:(id)data
-          forPath:(NSString *)pathString
-     withCallback:(fbt_void_nsstring_nsstring)onComplete;
-
-- (void)listen:(FQuerySpec *)query
-         tagId:(NSNumber *)tagId
-          hash:(id<FSyncTreeHash>)hash
-    onComplete:(fbt_void_nsstring)onComplete;
-
-- (void)unlisten:(FQuerySpec *)query tagId:(NSNumber *)tagId;
-- (void)refreshAuthToken:(NSString *)token;
-- (void)onDisconnectPutData:(id)data
-                    forPath:(FPath *)path
-               withCallback:(fbt_void_nsstring_nsstring)callback;
-- (void)onDisconnectMergeData:(id)data
-                      forPath:(FPath *)path
-                 withCallback:(fbt_void_nsstring_nsstring)callback;
-- (void)onDisconnectCancelPath:(FPath *)path
-                  withCallback:(fbt_void_nsstring_nsstring)callback;
-- (void)ackPuts;
-- (void)purgeOutstandingWrites;
-
-- (void)interruptForReason:(NSString *)reason;
-- (void)resumeForReason:(NSString *)reason;
-- (BOOL)isInterruptedForReason:(NSString *)reason;
-
-// FConnection delegate methods
-- (void)onReady:(FConnection *)fconnection
-         atTime:(NSNumber *)timestamp
-      sessionID:(NSString *)sessionID;
-- (void)onDataMessage:(FConnection *)fconnection
-          withMessage:(NSDictionary *)message;
-- (void)onDisconnect:(FConnection *)fconnection
-          withReason:(FDisconnectReason)reason;
-- (void)onKill:(FConnection *)fconnection withReason:(NSString *)reason;
-
-// Testing methods
-- (NSDictionary *)dumpListens;
-
-@end
-
-@protocol FPersistentConnectionDelegate <NSObject>
-
-- (void)onDataUpdate:(FPersistentConnection *)fpconnection
-             forPath:(NSString *)pathString
-             message:(id)message
-             isMerge:(BOOL)isMerge
-               tagId:(NSNumber *)tagId;
-- (void)onRangeMerge:(NSArray *)ranges
-             forPath:(NSString *)path
-               tagId:(NSNumber *)tag;
-- (void)onConnect:(FPersistentConnection *)fpconnection;
-- (void)onDisconnect:(FPersistentConnection *)fpconnection;
-- (void)onServerInfoUpdate:(FPersistentConnection *)fpconnection
-                   updates:(NSDictionary *)updates;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FPersistentConnection.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FPersistentConnection.m
deleted file mode 100644
index 69f52c1..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FPersistentConnection.m
+++ /dev/null
@@ -1,1141 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#import <Foundation/Foundation.h>
-
-#import "FAtomicNumber.h"
-#import "FAuthTokenProvider.h"
-#import "FCompoundHash.h"
-#import "FConstants.h"
-#import "FIRDatabaseConfig.h"
-#import "FIRDatabaseConfig_Private.h"
-#import "FIRDatabaseReference.h"
-#import "FIRRetryHelper.h"
-#import "FIndex.h"
-#import "FPersistentConnection.h"
-#import "FQueryParams.h"
-#import "FQuerySpec.h"
-#import "FRangeMerge.h"
-#import "FSnapshotUtilities.h"
-#import "FSyncTree.h"
-#import "FTupleCallbackStatus.h"
-#import "FTupleOnDisconnect.h"
-#import "FUtilities.h"
-#import <FirebaseCore/FIRLogger.h>
-#import <SystemConfiguration/SystemConfiguration.h>
-#import <dlfcn.h>
-#import <netinet/in.h>
-
-@interface FOutstandingQuery : NSObject
-
-@property(nonatomic, strong) FQuerySpec *query;
-@property(nonatomic, strong) NSNumber *tagId;
-@property(nonatomic, strong) id<FSyncTreeHash> syncTreeHash;
-@property(nonatomic, copy) fbt_void_nsstring onComplete;
-
-@end
-
-@implementation FOutstandingQuery
-
-@end
-
-@interface FOutstandingPut : NSObject
-
-@property(nonatomic, strong) NSString *action;
-@property(nonatomic, strong) NSDictionary *request;
-@property(nonatomic, copy) fbt_void_nsstring_nsstring onCompleteBlock;
-@property(nonatomic) BOOL sent;
-
-@end
-
-@implementation FOutstandingPut
-
-@end
-
-typedef enum {
-    ConnectionStateDisconnected,
-    ConnectionStateGettingToken,
-    ConnectionStateConnecting,
-    ConnectionStateAuthenticating,
-    ConnectionStateConnected
-} ConnectionState;
-
-@interface FPersistentConnection () {
-    ConnectionState connectionState;
-    BOOL firstConnection;
-    NSTimeInterval reconnectDelay;
-    NSTimeInterval lastConnectionAttemptTime;
-    NSTimeInterval lastConnectionEstablishedTime;
-    SCNetworkReachabilityRef reachability;
-}
-
-- (int)getNextRequestNumber;
-- (void)onDataPushWithAction:(NSString *)action andBody:(NSDictionary *)body;
-- (void)handleTimestamp:(NSNumber *)timestamp;
-- (void)sendOnDisconnectAction:(NSString *)action
-                       forPath:(NSString *)pathString
-                      withData:(id)data
-                   andCallback:(fbt_void_nsstring_nsstring)callback;
-
-@property(nonatomic, strong) FConnection *realtime;
-@property(nonatomic, strong) NSMutableDictionary *listens;
-@property(nonatomic, strong) NSMutableDictionary *outstandingPuts;
-@property(nonatomic, strong) NSMutableArray *onDisconnectQueue;
-@property(nonatomic, strong) FRepoInfo *repoInfo;
-@property(nonatomic, strong) FAtomicNumber *putCounter;
-@property(nonatomic, strong) FAtomicNumber *requestNumber;
-@property(nonatomic, strong) NSMutableDictionary *requestCBHash;
-@property(nonatomic, strong) FIRDatabaseConfig *config;
-@property(nonatomic) NSUInteger unackedListensCount;
-@property(nonatomic, strong) NSMutableArray *putsToAck;
-@property(nonatomic, strong) dispatch_queue_t dispatchQueue;
-@property(nonatomic, strong) NSString *lastSessionID;
-@property(nonatomic, strong) NSMutableSet *interruptReasons;
-@property(nonatomic, strong) FIRRetryHelper *retryHelper;
-@property(nonatomic, strong) id<FAuthTokenProvider> authTokenProvider;
-@property(nonatomic, strong) NSString *authToken;
-@property(nonatomic) BOOL forceAuthTokenRefresh;
-@property(nonatomic) NSUInteger currentFetchTokenAttempt;
-
-@end
-
-@implementation FPersistentConnection
-
-- (id)initWithRepoInfo:(FRepoInfo *)repoInfo
-         dispatchQueue:(dispatch_queue_t)dispatchQueue
-                config:(FIRDatabaseConfig *)config {
-    self = [super init];
-    if (self) {
-        self->_config = config;
-        self->_repoInfo = repoInfo;
-        self->_dispatchQueue = dispatchQueue;
-        self->_authTokenProvider = config.authTokenProvider;
-        NSAssert(self->_authTokenProvider != nil,
-                 @"Expected auth token provider");
-        self.interruptReasons = [NSMutableSet set];
-
-        self.listens = [[NSMutableDictionary alloc] init];
-        self.outstandingPuts = [[NSMutableDictionary alloc] init];
-        self.onDisconnectQueue = [[NSMutableArray alloc] init];
-        self.putCounter = [[FAtomicNumber alloc] init];
-        self.requestNumber = [[FAtomicNumber alloc] init];
-        self.requestCBHash = [[NSMutableDictionary alloc] init];
-        self.unackedListensCount = 0;
-        self.putsToAck = [NSMutableArray array];
-        connectionState = ConnectionStateDisconnected;
-        firstConnection = YES;
-        reconnectDelay = kPersistentConnReconnectMinDelay;
-
-        self->_retryHelper = [[FIRRetryHelper alloc]
-                initWithDispatchQueue:dispatchQueue
-            minRetryDelayAfterFailure:kPersistentConnReconnectMinDelay
-                        maxRetryDelay:kPersistentConnReconnectMaxDelay
-                        retryExponent:kPersistentConnReconnectMultiplier
-                         jitterFactor:0.7];
-
-        [self setupNotifications];
-        // Make sure we don't actually connect until open is called
-        [self interruptForReason:kFInterruptReasonWaitingForOpen];
-    }
-    // nb: The reason establishConnection isn't called here like the JS version
-    // is because callers need to set the delegate first. The ctor can be
-    // modified to accept the delegate but that deviates from normal ios
-    // conventions. After the delegate has been set, the caller is responsible
-    // for calling establishConnection:
-    return self;
-}
-
-- (void)dealloc {
-    if (reachability) {
-        // Unschedule the notifications
-        SCNetworkReachabilitySetDispatchQueue(reachability, NULL);
-        CFRelease(reachability);
-    }
-}
-
-#pragma mark -
-#pragma mark Public methods
-
-- (void)open {
-    [self resumeForReason:kFInterruptReasonWaitingForOpen];
-}
-
-/**
- * Note that the listens dictionary has a type of Map[String (pathString),
- * Map[FQueryParams, FOutstandingQuery]]
- *
- * This means, for each path we care about, there are sets of queryParams that
- * correspond to an FOutstandingQuery object. There can be multiple sets at a
- * path since we overlap listens for a short time while adding or removing a
- * query from a location in the tree.
- */
-- (void)listen:(FQuerySpec *)query
-         tagId:(NSNumber *)tagId
-          hash:(id<FSyncTreeHash>)hash
-    onComplete:(fbt_void_nsstring)onComplete {
-    FFLog(@"I-RDB034001", @"Listen called for %@", query);
-
-    NSAssert(self.listens[query] == nil,
-             @"listen() called twice for the same query");
-    NSAssert(query.isDefault || !query.loadsAllData,
-             @"listen called for non-default but complete query");
-    FOutstandingQuery *outstanding = [[FOutstandingQuery alloc] init];
-    outstanding.query = query;
-    outstanding.tagId = tagId;
-    outstanding.syncTreeHash = hash;
-    outstanding.onComplete = onComplete;
-    [self.listens setObject:outstanding forKey:query];
-    if ([self connected]) {
-        [self sendListen:outstanding];
-    }
-}
-
-- (void)putData:(id)data
-         forPath:(NSString *)pathString
-        withHash:(NSString *)hash
-    withCallback:(fbt_void_nsstring_nsstring)onComplete {
-    [self putInternal:data
-            forAction:kFWPRequestActionPut
-              forPath:pathString
-             withHash:hash
-         withCallback:onComplete];
-}
-
-- (void)mergeData:(id)data
-          forPath:(NSString *)pathString
-     withCallback:(fbt_void_nsstring_nsstring)onComplete {
-    [self putInternal:data
-            forAction:kFWPRequestActionMerge
-              forPath:pathString
-             withHash:nil
-         withCallback:onComplete];
-}
-
-- (void)onDisconnectPutData:(id)data
-                    forPath:(FPath *)path
-               withCallback:(fbt_void_nsstring_nsstring)callback {
-    if ([self canSendWrites]) {
-        [self sendOnDisconnectAction:kFWPRequestActionDisconnectPut
-                             forPath:[path description]
-                            withData:data
-                         andCallback:callback];
-    } else {
-        FTupleOnDisconnect *tuple = [[FTupleOnDisconnect alloc] init];
-        tuple.pathString = [path description];
-        tuple.action = kFWPRequestActionDisconnectPut;
-        tuple.data = data;
-        tuple.onComplete = callback;
-        [self.onDisconnectQueue addObject:tuple];
-    }
-}
-
-- (void)onDisconnectMergeData:(id)data
-                      forPath:(FPath *)path
-                 withCallback:(fbt_void_nsstring_nsstring)callback {
-    if ([self canSendWrites]) {
-        [self sendOnDisconnectAction:kFWPRequestActionDisconnectMerge
-                             forPath:[path description]
-                            withData:data
-                         andCallback:callback];
-    } else {
-        FTupleOnDisconnect *tuple = [[FTupleOnDisconnect alloc] init];
-        tuple.pathString = [path description];
-        tuple.action = kFWPRequestActionDisconnectMerge;
-        tuple.data = data;
-        tuple.onComplete = callback;
-        [self.onDisconnectQueue addObject:tuple];
-    }
-}
-
-- (void)onDisconnectCancelPath:(FPath *)path
-                  withCallback:(fbt_void_nsstring_nsstring)callback {
-    if ([self canSendWrites]) {
-        [self sendOnDisconnectAction:kFWPRequestActionDisconnectCancel
-                             forPath:[path description]
-                            withData:[NSNull null]
-                         andCallback:callback];
-    } else {
-        FTupleOnDisconnect *tuple = [[FTupleOnDisconnect alloc] init];
-        tuple.pathString = [path description];
-        tuple.action = kFWPRequestActionDisconnectCancel;
-        tuple.data = [NSNull null];
-        tuple.onComplete = callback;
-        [self.onDisconnectQueue addObject:tuple];
-    }
-}
-
-- (void)unlisten:(FQuerySpec *)query tagId:(NSNumber *)tagId {
-    FPath *path = query.path;
-    FFLog(@"I-RDB034002", @"Unlistening for %@", query);
-
-    NSArray *outstanding = [self removeListen:query];
-    if (outstanding.count > 0 && [self connected]) {
-        [self sendUnlisten:path queryParams:query.params tagId:tagId];
-    }
-}
-
-- (void)refreshAuthToken:(NSString *)token {
-    self.authToken = token;
-    if ([self connected]) {
-        if (token != nil) {
-            [self sendAuthAndRestoreStateAfterComplete:NO];
-        } else {
-            [self sendUnauth];
-        }
-    }
-}
-
-#pragma mark -
-#pragma mark Connection status
-
-- (BOOL)connected {
-    return self->connectionState == ConnectionStateAuthenticating ||
-           self->connectionState == ConnectionStateConnected;
-}
-
-- (BOOL)canSendWrites {
-    return self->connectionState == ConnectionStateConnected;
-}
-
-#pragma mark -
-#pragma mark FConnection delegate methods
-
-- (void)onReady:(FConnection *)fconnection
-         atTime:(NSNumber *)timestamp
-      sessionID:(NSString *)sessionID {
-    FFLog(@"I-RDB034003", @"On ready");
-    lastConnectionEstablishedTime = [[NSDate date] timeIntervalSince1970];
-    [self handleTimestamp:timestamp];
-
-    if (firstConnection) {
-        [self sendConnectStats];
-    }
-
-    [self restoreAuth];
-    firstConnection = NO;
-    self.lastSessionID = sessionID;
-    dispatch_async(self.dispatchQueue, ^{
-      [self.delegate onConnect:self];
-    });
-}
-
-- (void)onDataMessage:(FConnection *)fconnection
-          withMessage:(NSDictionary *)message {
-    if (message[kFWPRequestNumber] != nil) {
-        // this is a response to a request we sent
-        NSNumber *rn = [NSNumber
-            numberWithInt:[[message objectForKey:kFWPRequestNumber] intValue]];
-        if ([self.requestCBHash objectForKey:rn]) {
-            void (^callback)(NSDictionary *) =
-                [self.requestCBHash objectForKey:rn];
-            [self.requestCBHash removeObjectForKey:rn];
-
-            if (callback) {
-                // dispatch_async(self.dispatchQueue, ^{
-                callback([message objectForKey:kFWPResponseForRNData]);
-                //});
-            }
-        }
-    } else if (message[kFWPRequestError] != nil) {
-        NSString *error = [message objectForKey:kFWPRequestError];
-        @throw [[NSException alloc] initWithName:@"FirebaseDatabaseServerError"
-                                          reason:error
-                                        userInfo:nil];
-    } else if (message[kFWPAsyncServerAction] != nil) {
-        // this is a server push of some sort
-        NSString *action = [message objectForKey:kFWPAsyncServerAction];
-        NSDictionary *body = [message objectForKey:kFWPAsyncServerPayloadBody];
-        [self onDataPushWithAction:action andBody:body];
-    }
-}
-
-- (void)onDisconnect:(FConnection *)fconnection
-          withReason:(FDisconnectReason)reason {
-    FFLog(@"I-RDB034004", @"Got on disconnect due to %s",
-          (reason == DISCONNECT_REASON_SERVER_RESET) ? "server_reset"
-                                                     : "other");
-    connectionState = ConnectionStateDisconnected;
-    // Drop the realtime connection
-    self.realtime = nil;
-    [self cancelSentTransactions];
-    [self.requestCBHash removeAllObjects];
-    self.unackedListensCount = 0;
-    if ([self shouldReconnect]) {
-        NSTimeInterval timeSinceLastConnectSucceeded =
-            [[NSDate date] timeIntervalSince1970] -
-            lastConnectionEstablishedTime;
-        BOOL lastConnectionWasSuccessful;
-        if (lastConnectionEstablishedTime > 0) {
-            lastConnectionWasSuccessful =
-                timeSinceLastConnectSucceeded >
-                kPersistentConnSuccessfulConnectionEstablishedDelay;
-        } else {
-            lastConnectionWasSuccessful = NO;
-        }
-
-        if (reason == DISCONNECT_REASON_SERVER_RESET ||
-            lastConnectionWasSuccessful) {
-            [self.retryHelper signalSuccess];
-        }
-        [self tryScheduleReconnect];
-    }
-    lastConnectionEstablishedTime = 0;
-    [self.delegate onDisconnect:self];
-}
-
-- (void)onKill:(FConnection *)fconnection withReason:(NSString *)reason {
-    FFWarn(@"I-RDB034005",
-           @"Firebase Database connection was forcefully killed by the server. "
-           @" Will not attempt reconnect. Reason: %@",
-           reason);
-    [self interruptForReason:kFInterruptReasonServerKill];
-}
-
-#pragma mark -
-#pragma mark Connection handling methods
-
-- (void)interruptForReason:(NSString *)reason {
-    FFLog(@"I-RDB034006", @"Connection interrupted for: %@", reason);
-
-    [self.interruptReasons addObject:reason];
-    if (self.realtime) {
-        // Will call onDisconnect and set the connection state to Disconnected
-        [self.realtime close];
-        self.realtime = nil;
-    } else {
-        [self.retryHelper cancel];
-        self->connectionState = ConnectionStateDisconnected;
-    }
-    // Reset timeouts
-    [self.retryHelper signalSuccess];
-}
-
-- (void)resumeForReason:(NSString *)reason {
-    FFLog(@"I-RDB034007", @"Connection no longer interrupted for: %@", reason);
-    [self.interruptReasons removeObject:reason];
-
-    if ([self shouldReconnect] &&
-        connectionState == ConnectionStateDisconnected) {
-        [self tryScheduleReconnect];
-    }
-}
-
-- (BOOL)shouldReconnect {
-    return self.interruptReasons.count == 0;
-}
-
-- (BOOL)isInterruptedForReason:(NSString *)reason {
-    return [self.interruptReasons containsObject:reason];
-}
-
-#pragma mark -
-#pragma mark Private methods
-
-- (void)tryScheduleReconnect {
-    if ([self shouldReconnect]) {
-        NSAssert(self->connectionState == ConnectionStateDisconnected,
-                 @"Not in disconnected state: %d", self->connectionState);
-        BOOL forceRefresh = self.forceAuthTokenRefresh;
-        self.forceAuthTokenRefresh = NO;
-        FFLog(@"I-RDB034008", @"Scheduling connection attempt");
-        [self.retryHelper retry:^{
-          FFLog(@"I-RDB034009", @"Trying to fetch auth token");
-          NSAssert(self->connectionState == ConnectionStateDisconnected,
-                   @"Not in disconnected state: %d", self->connectionState);
-          self->connectionState = ConnectionStateGettingToken;
-          self.currentFetchTokenAttempt++;
-          NSUInteger thisFetchTokenAttempt = self.currentFetchTokenAttempt;
-          [self.authTokenProvider
-              fetchTokenForcingRefresh:forceRefresh
-                          withCallback:^(NSString *token, NSError *error) {
-                            if (thisFetchTokenAttempt ==
-                                self.currentFetchTokenAttempt) {
-                                if (error != nil) {
-                                    self->connectionState =
-                                        ConnectionStateDisconnected;
-                                    FFLog(@"I-RDB034010",
-                                          @"Error fetching token: %@", error);
-                                    [self tryScheduleReconnect];
-                                } else {
-                                    // Someone could have interrupted us while
-                                    // fetching the token, marking the
-                                    // connection as Disconnected
-                                    if (self->connectionState ==
-                                        ConnectionStateGettingToken) {
-                                        FFLog(@"I-RDB034011",
-                                              @"Successfully fetched token, "
-                                              @"opening connection");
-                                        [self openNetworkConnectionWithToken:
-                                                  token];
-                                    } else {
-                                        NSAssert(
-                                            self->connectionState ==
-                                                ConnectionStateDisconnected,
-                                            @"Expected connection state "
-                                            @"disconnected, but got %d",
-                                            self->connectionState);
-                                        FFLog(@"I-RDB034012",
-                                              @"Not opening connection after "
-                                              @"token refresh, because "
-                                              @"connection was set to "
-                                              @"disconnected.");
-                                    }
-                                }
-                            } else {
-                                FFLog(@"I-RDB034013",
-                                      @"Ignoring fetch token result, because "
-                                      @"this was not the latest attempt.");
-                            }
-                          }];
-        }];
-    }
-}
-
-- (void)openNetworkConnectionWithToken:(NSString *)token {
-    NSAssert(self->connectionState == ConnectionStateGettingToken,
-             @"Trying to open network connection while in wrong state: %d",
-             self->connectionState);
-    self.authToken = token;
-    self->connectionState = ConnectionStateConnecting;
-    self.realtime = [[FConnection alloc] initWith:self.repoInfo
-                                 andDispatchQueue:self.dispatchQueue
-                                    lastSessionID:self.lastSessionID];
-    self.realtime.delegate = self;
-    [self.realtime open];
-}
-
-static void reachabilityCallback(SCNetworkReachabilityRef ref,
-                                 SCNetworkReachabilityFlags flags, void *info) {
-    if (flags & kSCNetworkReachabilityFlagsReachable) {
-        FFLog(@"I-RDB034014",
-              @"Network became reachable. Trigger a connection attempt");
-        FPersistentConnection *self = (__bridge FPersistentConnection *)info;
-        // Reset reconnect delay
-        [self.retryHelper signalSuccess];
-        if (self->connectionState == ConnectionStateDisconnected) {
-            [self tryScheduleReconnect];
-        }
-    } else {
-        FFLog(@"I-RDB034015", @"Network is not reachable");
-    }
-}
-
-- (void)enteringForeground {
-    dispatch_async(self.dispatchQueue, ^{
-      // Reset reconnect delay
-      [self.retryHelper signalSuccess];
-      if (self->connectionState == ConnectionStateDisconnected) {
-          [self tryScheduleReconnect];
-      }
-    });
-}
-
-- (void)setupNotifications {
-
-    NSString *const *foregroundConstant = (NSString *const *)dlsym(
-        RTLD_DEFAULT, "UIApplicationWillEnterForegroundNotification");
-    if (foregroundConstant) {
-        [[NSNotificationCenter defaultCenter]
-            addObserver:self
-               selector:@selector(enteringForeground)
-                   name:*foregroundConstant
-                 object:nil];
-    }
-    // An empty address is interpreted a generic internet access
-    struct sockaddr_in zeroAddress;
-    bzero(&zeroAddress, sizeof(zeroAddress));
-    zeroAddress.sin_len = sizeof(zeroAddress);
-    zeroAddress.sin_family = AF_INET;
-    reachability = SCNetworkReachabilityCreateWithAddress(
-        kCFAllocatorDefault, (const struct sockaddr *)&zeroAddress);
-    SCNetworkReachabilityContext ctx = {0, (__bridge void *)(self), NULL, NULL,
-                                        NULL};
-    if (SCNetworkReachabilitySetCallback(reachability, reachabilityCallback,
-                                         &ctx)) {
-        SCNetworkReachabilitySetDispatchQueue(reachability, self.dispatchQueue);
-    } else {
-        FFLog(@"I-RDB034016",
-              @"Failed to set up network reachability monitoring");
-        CFRelease(reachability);
-        reachability = NULL;
-    }
-}
-
-- (void)sendAuthAndRestoreStateAfterComplete:(BOOL)restoreStateAfterComplete {
-    NSAssert([self connected], @"Must be connected to send auth");
-    NSAssert(self.authToken != nil,
-             @"Can't send auth if there is no credential");
-
-    NSDictionary *requestData = @{kFWPRequestCredential : self.authToken};
-    [self sendAction:kFWPRequestActionAuth
-                body:requestData
-           sensitive:YES
-            callback:^(NSDictionary *data) {
-              self->connectionState = ConnectionStateConnected;
-              NSString *status =
-                  [data objectForKey:kFWPResponseForActionStatus];
-              id responseData = [data objectForKey:kFWPResponseForActionData];
-              if (responseData == nil) {
-                  responseData = @"error";
-              }
-
-              BOOL statusOk =
-                  [status isEqualToString:kFWPResponseForActionStatusOk];
-              if (statusOk) {
-                  if (restoreStateAfterComplete) {
-                      [self restoreState];
-                  }
-              } else {
-                  self.authToken = nil;
-                  self.forceAuthTokenRefresh = YES;
-                  if ([status isEqualToString:@"expired_token"]) {
-                      FFLog(@"I-RDB034017", @"Authentication failed: %@ (%@)",
-                            status, responseData);
-                  } else {
-                      FFWarn(@"I-RDB034018", @"Authentication failed: %@ (%@)",
-                             status, responseData);
-                  }
-                  [self.realtime close];
-              }
-            }];
-}
-
-- (void)sendUnauth {
-    [self sendAction:kFWPRequestActionUnauth
-                body:@{}
-           sensitive:NO
-            callback:nil];
-}
-
-- (void)onAuthRevokedWithStatus:(NSString *)status
-                      andReason:(NSString *)reason {
-    // This might be for an earlier token than we just recently sent. But since
-    // we need to close the connection anyways, we can set it to null here and
-    // we will refresh the token later on reconnect
-    if ([status isEqualToString:@"expired_token"]) {
-        FFLog(@"I-RDB034019", @"Auth token revoked: %@ (%@)", status, reason);
-    } else {
-        FFWarn(@"I-RDB034020", @"Auth token revoked: %@ (%@)", status, reason);
-    }
-    self.authToken = nil;
-    self.forceAuthTokenRefresh = YES;
-    // Try reconnecting on auth revocation
-    [self.realtime close];
-}
-
-- (void)onListenRevoked:(FPath *)path {
-    NSArray *queries = [self removeAllListensAtPath:path];
-    for (FOutstandingQuery *query in queries) {
-        query.onComplete(@"permission_denied");
-    }
-}
-
-- (void)sendOnDisconnectAction:(NSString *)action
-                       forPath:(NSString *)pathString
-                      withData:(id)data
-                   andCallback:(fbt_void_nsstring_nsstring)callback {
-
-    NSDictionary *request =
-        @{kFWPRequestPath : pathString, kFWPRequestData : data};
-    FFLog(@"I-RDB034021", @"onDisconnect %@: %@", action, request);
-
-    [self sendAction:action
-                body:request
-           sensitive:NO
-            callback:^(NSDictionary *data) {
-              NSString *status =
-                  [data objectForKey:kFWPResponseForActionStatus];
-              NSString *errorReason =
-                  [data objectForKey:kFWPResponseForActionData];
-              callback(status, errorReason);
-            }];
-}
-
-- (void)sendPut:(NSNumber *)index {
-    NSAssert([self canSendWrites],
-             @"sendPut called when not able to send writes");
-    FOutstandingPut *put = self.outstandingPuts[index];
-    assert(put != nil);
-    fbt_void_nsstring_nsstring onComplete = put.onCompleteBlock;
-
-    // Do not async this block; copying the block insinde sendAction: doesn't
-    // happen in time (or something) so coredumps
-    put.sent = YES;
-    [self sendAction:put.action
-                body:put.request
-           sensitive:NO
-            callback:^(NSDictionary *data) {
-              FOutstandingPut *currentPut = self.outstandingPuts[index];
-              if (currentPut == put) {
-                  [self.outstandingPuts removeObjectForKey:index];
-
-                  if (onComplete != nil) {
-                      NSString *status =
-                          [data objectForKey:kFWPResponseForActionStatus];
-                      NSString *errorReason =
-                          [data objectForKey:kFWPResponseForActionData];
-                      if (self.unackedListensCount == 0) {
-                          onComplete(status, errorReason);
-                      } else {
-                          FTupleCallbackStatus *putToAck =
-                              [[FTupleCallbackStatus alloc] init];
-                          putToAck.block = onComplete;
-                          putToAck.status = status;
-                          putToAck.errorReason = errorReason;
-                          [self.putsToAck addObject:putToAck];
-                      }
-                  }
-              } else {
-                  FFLog(@"I-RDB034022",
-                        @"Ignoring on complete for put %@ because it was "
-                        @"already removed",
-                        index);
-              }
-            }];
-}
-
-- (void)sendUnlisten:(FPath *)path
-         queryParams:(FQueryParams *)queryParams
-               tagId:(NSNumber *)tagId {
-    FFLog(@"I-RDB034023", @"Unlisten on %@ for %@", path, queryParams);
-
-    NSMutableDictionary *request = [NSMutableDictionary
-        dictionaryWithObjectsAndKeys:[path toString], kFWPRequestPath, nil];
-    if (tagId != nil) {
-        [request setObject:queryParams.wireProtocolParams
-                    forKey:kFWPRequestQueries];
-        [request setObject:tagId forKey:kFWPRequestTag];
-    }
-
-    [self sendAction:kFWPRequestActionTaggedUnlisten
-                body:request
-           sensitive:NO
-            callback:nil];
-}
-
-- (void)putInternal:(id)data
-          forAction:(NSString *)action
-            forPath:(NSString *)pathString
-           withHash:(NSString *)hash
-       withCallback:(fbt_void_nsstring_nsstring)onComplete {
-
-    NSMutableDictionary *request = [NSMutableDictionary
-        dictionaryWithObjectsAndKeys:pathString, kFWPRequestPath, data,
-                                     kFWPRequestData, nil];
-    if (hash) {
-        [request setObject:hash forKey:kFWPRequestHash];
-    }
-
-    FOutstandingPut *put = [[FOutstandingPut alloc] init];
-    put.action = action;
-    put.request = request;
-    put.onCompleteBlock = onComplete;
-    put.sent = NO;
-
-    NSNumber *index = [self.putCounter getAndIncrement];
-    self.outstandingPuts[index] = put;
-
-    if ([self canSendWrites]) {
-        FFLog(@"I-RDB034024", @"Was connected, and added as index: %@", index);
-        [self sendPut:index];
-    } else {
-        FFLog(@"I-RDB034025",
-              @"Wasn't connected or writes paused, so added to outstanding "
-              @"puts only. Path: %@",
-              pathString);
-    }
-}
-
-- (void)sendListen:(FOutstandingQuery *)listenSpec {
-    FQuerySpec *query = listenSpec.query;
-    FFLog(@"I-RDB034026", @"Listen for %@", query);
-    NSMutableDictionary *request =
-        [NSMutableDictionary dictionaryWithObject:[query.path toString]
-                                           forKey:kFWPRequestPath];
-
-    // Only bother to send query if it's non-default
-    if (listenSpec.tagId != nil) {
-        [request setObject:[query.params wireProtocolParams]
-                    forKey:kFWPRequestQueries];
-        [request setObject:listenSpec.tagId forKey:kFWPRequestTag];
-    }
-
-    [request setObject:[listenSpec.syncTreeHash simpleHash]
-                forKey:kFWPRequestHash];
-    if ([listenSpec.syncTreeHash includeCompoundHash]) {
-        FCompoundHash *compoundHash = [listenSpec.syncTreeHash compoundHash];
-        NSMutableArray *posts = [NSMutableArray array];
-        for (FPath *path in compoundHash.posts) {
-            [posts addObject:path.wireFormat];
-        }
-        request[kFWPRequestCompoundHash] = @{
-            kFWPRequestCompoundHashHashes : compoundHash.hashes,
-            kFWPRequestCompoundHashPaths : posts
-        };
-    }
-
-    fbt_void_nsdictionary onResponse = ^(NSDictionary *response) {
-      FFLog(@"I-RDB034027", @"Listen response %@", response);
-      // warn in any case, even if the listener was removed
-      [self warnOnListenWarningsForQuery:query
-                                 payload:response[kFWPResponseForActionData]];
-
-      FOutstandingQuery *currentListenSpec = self.listens[query];
-
-      // only trigger actions if the listen hasn't been removed (and maybe
-      // readded)
-      if (currentListenSpec == listenSpec) {
-          NSString *status = [response objectForKey:kFWPRequestStatus];
-          if (![status isEqualToString:@"ok"]) {
-              [self removeListen:query];
-          }
-
-          if (listenSpec.onComplete) {
-              listenSpec.onComplete(status);
-          }
-      }
-
-      self.unackedListensCount--;
-      NSAssert(self.unackedListensCount >= 0,
-               @"unackedListensCount decremented to be negative.");
-      if (self.unackedListensCount == 0) {
-          [self ackPuts];
-      }
-    };
-
-    [self sendAction:kFWPRequestActionTaggedListen
-                body:request
-           sensitive:NO
-            callback:onResponse];
-
-    self.unackedListensCount++;
-}
-
-- (void)warnOnListenWarningsForQuery:(FQuerySpec *)query payload:(id)payload {
-    if (payload != nil && [payload isKindOfClass:[NSDictionary class]]) {
-        NSDictionary *payloadDict = payload;
-        id warnings = payloadDict[kFWPResponseDataWarnings];
-        if (warnings != nil && [warnings isKindOfClass:[NSArray class]]) {
-            NSArray *warningsArr = warnings;
-            if ([warningsArr containsObject:@"no_index"]) {
-                NSString *indexSpec = [NSString
-                    stringWithFormat:@"\".indexOn\": \"%@\"",
-                                     [query.params.index queryDefinition]];
-                NSString *indexPath = [query.path description];
-                FFWarn(@"I-RDB034028",
-                       @"Using an unspecified index. Your data will be "
-                       @"downloaded and filtered on the client. "
-                        "Consider adding %@ at %@ to your security rules for "
-                        "better performance",
-                       indexSpec, indexPath);
-            }
-        }
-    }
-}
-
-- (int)getNextRequestNumber {
-    return [[self.requestNumber getAndIncrement] intValue];
-}
-
-- (void)sendAction:(NSString *)action
-              body:(NSDictionary *)message
-         sensitive:(BOOL)sensitive
-          callback:(void (^)(NSDictionary *data))onMessage {
-    // Hold onto the onMessage callback for this request before firing it off
-    NSNumber *rn = [NSNumber numberWithInt:[self getNextRequestNumber]];
-    NSDictionary *msg = [NSDictionary
-        dictionaryWithObjectsAndKeys:rn, kFWPRequestNumber, action,
-                                     kFWPRequestAction, message,
-                                     kFWPRequestPayloadBody, nil];
-
-    [self.realtime sendRequest:msg sensitive:sensitive];
-
-    if (onMessage) {
-        // Debug message without a callback; bump the rn, but don't hold onto
-        // the cb
-        [self.requestCBHash setObject:[onMessage copy] forKey:rn];
-    }
-}
-
-- (void)cancelSentTransactions {
-    NSMutableDictionary<NSNumber *, FOutstandingPut *>
-        *cancelledOutstandingPuts = [[NSMutableDictionary alloc] init];
-
-    for (NSNumber *index in self.outstandingPuts) {
-        FOutstandingPut *put = self.outstandingPuts[index];
-        if (put.request[kFWPRequestHash] && put.sent) {
-            // This is a sent transaction put.
-            cancelledOutstandingPuts[index] = put;
-        }
-    }
-
-    [cancelledOutstandingPuts
-        enumerateKeysAndObjectsUsingBlock:^(
-            NSNumber *index, FOutstandingPut *outstandingPut, BOOL *stop) {
-          // `onCompleteBlock:` may invoke `rerunTransactionsForPath:` and
-          // enqueue new writes. We defer calling it until we have finished
-          // enumerating all existing writes.
-          outstandingPut.onCompleteBlock(
-              kFTransactionDisconnect,
-              @"Client was disconnected while running a transaction");
-          [self.outstandingPuts removeObjectForKey:index];
-        }];
-}
-
-- (void)onDataPushWithAction:(NSString *)action andBody:(NSDictionary *)body {
-    FFLog(@"I-RDB034029", @"handleServerMessage: %@, %@", action, body);
-    id<FPersistentConnectionDelegate> delegate = self.delegate;
-    if ([action isEqualToString:kFWPAsyncServerDataUpdate] ||
-        [action isEqualToString:kFWPAsyncServerDataMerge]) {
-        BOOL isMerge = [action isEqualToString:kFWPAsyncServerDataMerge];
-
-        if ([body objectForKey:kFWPAsyncServerDataUpdateBodyPath] &&
-            [body objectForKey:kFWPAsyncServerDataUpdateBodyData]) {
-            NSString *path =
-                [body objectForKey:kFWPAsyncServerDataUpdateBodyPath];
-            id payloadData =
-                [body objectForKey:kFWPAsyncServerDataUpdateBodyData];
-            if (isMerge && [payloadData isKindOfClass:[NSDictionary class]] &&
-                [payloadData count] == 0) {
-                // ignore empty merge
-            } else {
-                [delegate
-                    onDataUpdate:self
-                         forPath:path
-                         message:payloadData
-                         isMerge:isMerge
-                           tagId:[body objectForKey:
-                                           kFWPAsyncServerDataUpdateBodyTag]];
-            }
-        } else {
-            FFLog(
-                @"I-RDB034030",
-                @"Malformed data response from server missing path or data: %@",
-                body);
-        }
-    } else if ([action isEqualToString:kFWPAsyncServerDataRangeMerge]) {
-        NSString *path = body[kFWPAsyncServerDataUpdateBodyPath];
-        NSArray *ranges = body[kFWPAsyncServerDataUpdateBodyData];
-        NSNumber *tag = body[kFWPAsyncServerDataUpdateBodyTag];
-        NSMutableArray *rangeMerges = [NSMutableArray array];
-        for (NSDictionary *range in ranges) {
-            NSString *startString = range[kFWPAsyncServerDataUpdateStartPath];
-            NSString *endString = range[kFWPAsyncServerDataUpdateEndPath];
-            id updateData = range[kFWPAsyncServerDataUpdateRangeMerge];
-            id<FNode> updates = [FSnapshotUtilities nodeFrom:updateData];
-            FPath *start = (startString != nil)
-                               ? [[FPath alloc] initWith:startString]
-                               : nil;
-            FPath *end =
-                (endString != nil) ? [[FPath alloc] initWith:endString] : nil;
-            FRangeMerge *merge = [[FRangeMerge alloc] initWithStart:start
-                                                                end:end
-                                                            updates:updates];
-            [rangeMerges addObject:merge];
-        }
-        [delegate onRangeMerge:rangeMerges forPath:path tagId:tag];
-    } else if ([action isEqualToString:kFWPAsyncServerAuthRevoked]) {
-        NSString *status = [body objectForKey:kFWPResponseForActionStatus];
-        NSString *reason = [body objectForKey:kFWPResponseForActionData];
-        [self onAuthRevokedWithStatus:status andReason:reason];
-    } else if ([action isEqualToString:kFWPASyncServerListenCancelled]) {
-        NSString *pathString =
-            [body objectForKey:kFWPAsyncServerDataUpdateBodyPath];
-        [self onListenRevoked:[[FPath alloc] initWith:pathString]];
-    } else if ([action isEqualToString:kFWPAsyncServerSecurityDebug]) {
-        NSString *msg = [body objectForKey:@"msg"];
-        if (msg != nil) {
-            NSArray *msgs = [msg componentsSeparatedByString:@"\n"];
-            for (NSString *m in msgs) {
-                FFWarn(@"I-RDB034031", @"%@", m);
-            }
-        }
-    } else {
-        // TODO: revoke listens, auth, security debug
-        FFLog(@"I-RDB034032", @"Unsupported action from server: %@", action);
-    }
-}
-
-- (void)restoreAuth {
-    FFLog(@"I-RDB034033", @"Calling restore state");
-
-    NSAssert(self->connectionState == ConnectionStateConnecting,
-             @"Wanted to restore auth, but was in wrong state: %d",
-             self->connectionState);
-    if (self.authToken == nil) {
-        FFLog(@"I-RDB034034", @"Not restoring auth because token is nil");
-        self->connectionState = ConnectionStateConnected;
-        [self restoreState];
-    } else {
-        FFLog(@"I-RDB034035", @"Restoring auth");
-        self->connectionState = ConnectionStateAuthenticating;
-        [self sendAuthAndRestoreStateAfterComplete:YES];
-    }
-}
-
-- (void)restoreState {
-    NSAssert(self->connectionState == ConnectionStateConnected,
-             @"Should be connected if we're restoring state, but we are: %d",
-             self->connectionState);
-
-    [self.listens enumerateKeysAndObjectsUsingBlock:^(
-                      FQuerySpec *query, FOutstandingQuery *outstandingListen,
-                      BOOL *stop) {
-      FFLog(@"I-RDB034036", @"Restoring listen for %@", query);
-      [self sendListen:outstandingListen];
-    }];
-
-    NSArray *keys = [[self.outstandingPuts allKeys]
-        sortedArrayUsingSelector:@selector(compare:)];
-    for (int i = 0; i < [keys count]; i++) {
-        if ([self.outstandingPuts objectForKey:[keys objectAtIndex:i]] != nil) {
-            FFLog(@"I-RDB034037", @"Restoring put: %d", i);
-            [self sendPut:[keys objectAtIndex:i]];
-        } else {
-            FFLog(@"I-RDB034038", @"Restoring put: skipped nil: %d", i);
-        }
-    }
-
-    for (FTupleOnDisconnect *tuple in self.onDisconnectQueue) {
-        [self sendOnDisconnectAction:tuple.action
-                             forPath:tuple.pathString
-                            withData:tuple.data
-                         andCallback:tuple.onComplete];
-    }
-    [self.onDisconnectQueue removeAllObjects];
-}
-
-- (NSArray *)removeListen:(FQuerySpec *)query {
-    NSAssert(query.isDefault || !query.loadsAllData,
-             @"removeListen called for non-default but complete query");
-
-    FOutstandingQuery *outstanding = self.listens[query];
-    if (!outstanding) {
-        FFLog(@"I-RDB034039",
-              @"Trying to remove listener for query %@ but no listener exists",
-              query);
-        return @[];
-    } else {
-        [self.listens removeObjectForKey:query];
-        return @[ outstanding ];
-    }
-}
-
-- (NSArray *)removeAllListensAtPath:(FPath *)path {
-    FFLog(@"I-RDB034040", @"Removing all listens at path %@", path);
-    NSMutableArray *removed = [NSMutableArray array];
-    NSMutableArray *toRemove = [NSMutableArray array];
-    [self.listens
-        enumerateKeysAndObjectsUsingBlock:^(
-            FQuerySpec *spec, FOutstandingQuery *outstanding, BOOL *stop) {
-          if ([spec.path isEqual:path]) {
-              [removed addObject:outstanding];
-              [toRemove addObject:spec];
-          }
-        }];
-    [self.listens removeObjectsForKeys:toRemove];
-    return removed;
-}
-
-- (void)purgeOutstandingWrites {
-    // We might have unacked puts in our queue that we need to ack now before we
-    // send out any cancels...
-    [self ackPuts];
-    // Cancel in order
-    NSArray *keys = [[self.outstandingPuts allKeys]
-        sortedArrayUsingSelector:@selector(compare:)];
-    for (NSNumber *key in keys) {
-        FOutstandingPut *put = self.outstandingPuts[key];
-        if (put.onCompleteBlock != nil) {
-            put.onCompleteBlock(kFErrorWriteCanceled, nil);
-        }
-    }
-    for (FTupleOnDisconnect *onDisconnect in self.onDisconnectQueue) {
-        if (onDisconnect.onComplete != nil) {
-            onDisconnect.onComplete(kFErrorWriteCanceled, nil);
-        }
-    }
-    [self.outstandingPuts removeAllObjects];
-    [self.onDisconnectQueue removeAllObjects];
-}
-
-- (void)ackPuts {
-    for (FTupleCallbackStatus *put in self.putsToAck) {
-        put.block(put.status, put.errorReason);
-    }
-    [self.putsToAck removeAllObjects];
-}
-
-- (void)handleTimestamp:(NSNumber *)timestamp {
-    FFLog(@"I-RDB034041", @"Handling timestamp: %@", timestamp);
-    double timestampDeltaMs = [timestamp doubleValue] -
-                              ([[NSDate date] timeIntervalSince1970] * 1000);
-    [self.delegate onServerInfoUpdate:self
-                              updates:@{
-                                  kDotInfoServerTimeOffset : [NSNumber
-                                      numberWithDouble:timestampDeltaMs]
-                              }];
-}
-
-- (void)sendStats:(NSDictionary *)stats {
-    if ([stats count] > 0) {
-        NSDictionary *request = @{kFWPRequestCounters : stats};
-        [self sendAction:kFWPRequestActionStats
-                    body:request
-               sensitive:NO
-                callback:^(NSDictionary *data) {
-                  NSString *status =
-                      [data objectForKey:kFWPResponseForActionStatus];
-                  NSString *errorReason =
-                      [data objectForKey:kFWPResponseForActionData];
-                  BOOL statusOk =
-                      [status isEqualToString:kFWPResponseForActionStatusOk];
-                  if (!statusOk) {
-                      FFLog(@"I-RDB034042", @"Failed to send stats: %@",
-                            errorReason);
-                  }
-                }];
-    } else {
-        FFLog(@"I-RDB034043", @"Not sending stats because stats are empty");
-    }
-}
-
-- (void)sendConnectStats {
-    NSMutableDictionary *stats = [NSMutableDictionary dictionary];
-
-#if TARGET_OS_IOS || TARGET_OS_TV
-    if (self.config.persistenceEnabled) {
-        stats[@"persistence.ios.enabled"] = @1;
-    }
-#elif TARGET_OS_OSX
-    if (self.config.persistenceEnabled) {
-        stats[@"persistence.osx.enabled"] = @1;
-    }
-#endif
-    NSString *sdkVersion =
-        [[FIRDatabase sdkVersion] stringByReplacingOccurrencesOfString:@"."
-                                                            withString:@"-"];
-    NSString *sdkStatName =
-        [NSString stringWithFormat:@"sdk.objc.%@", sdkVersion];
-    stats[sdkStatName] = @1;
-    FFLog(@"I-RDB034044", @"Sending first connection stats");
-    [self sendStats:stats];
-}
-
-- (NSDictionary *)dumpListens {
-    return self.listens;
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FQueryParams.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FQueryParams.h
deleted file mode 100644
index 5d957c5..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FQueryParams.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@protocol FIndex
-, FNodeFilter, FNode;
-
-@interface FQueryParams : NSObject <NSCopying>
-
-@property(nonatomic, readonly) BOOL limitSet;
-@property(nonatomic, readonly) NSInteger limit;
-
-@property(nonatomic, strong, readonly) NSString *viewFrom;
-@property(nonatomic, strong, readonly) id<FNode> indexStartValue;
-@property(nonatomic, strong, readonly) NSString *indexStartKey;
-@property(nonatomic, strong, readonly) id<FNode> indexEndValue;
-@property(nonatomic, strong, readonly) NSString *indexEndKey;
-
-@property(nonatomic, strong, readonly) id<FIndex> index;
-
-- (BOOL)loadsAllData;
-- (BOOL)isDefault;
-- (BOOL)isValid;
-- (BOOL)hasAnchoredLimit;
-
-- (FQueryParams *)limitTo:(NSInteger)limit;
-- (FQueryParams *)limitToFirst:(NSInteger)newLimit;
-- (FQueryParams *)limitToLast:(NSInteger)newLimit;
-
-- (FQueryParams *)startAt:(id<FNode>)indexValue childKey:(NSString *)key;
-- (FQueryParams *)startAt:(id<FNode>)indexValue;
-- (FQueryParams *)endAt:(id<FNode>)indexValue childKey:(NSString *)key;
-- (FQueryParams *)endAt:(id<FNode>)indexValue;
-
-- (FQueryParams *)orderBy:(id<FIndex>)index;
-
-+ (FQueryParams *)defaultInstance;
-+ (FQueryParams *)fromQueryObject:(NSDictionary *)dict;
-
-- (BOOL)hasStart;
-- (BOOL)hasEnd;
-
-- (NSDictionary *)wireProtocolParams;
-- (BOOL)isViewFromLeft;
-- (id<FNodeFilter>)nodeFilter;
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FQueryParams.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FQueryParams.m
deleted file mode 100644
index c19cfba..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FQueryParams.m
+++ /dev/null
@@ -1,393 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FQueryParams.h"
-#import "FConstants.h"
-#import "FIndex.h"
-#import "FIndexedFilter.h"
-#import "FLimitedFilter.h"
-#import "FNode.h"
-#import "FNodeFilter.h"
-#import "FPriorityIndex.h"
-#import "FRangedFilter.h"
-#import "FSnapshotUtilities.h"
-#import "FUtilities.h"
-#import "FValidation.h"
-
-@interface FQueryParams ()
-
-@property(nonatomic, readwrite) BOOL limitSet;
-@property(nonatomic, readwrite) NSInteger limit;
-
-@property(nonatomic, strong, readwrite) NSString *viewFrom;
-/**
- * indexStartValue is anything you can store as a priority / value.
- */
-@property(nonatomic, strong, readwrite) id<FNode> indexStartValue;
-@property(nonatomic, strong, readwrite) NSString *indexStartKey;
-/**
- * indexStartValue is anything you can store as a priority / value.
- */
-@property(nonatomic, strong, readwrite) id<FNode> indexEndValue;
-@property(nonatomic, strong, readwrite) NSString *indexEndKey;
-
-@property(nonatomic, strong, readwrite) id<FIndex> index;
-
-@end
-
-@implementation FQueryParams
-
-+ (FQueryParams *)defaultInstance {
-    static FQueryParams *defaultParams = nil;
-    static dispatch_once_t defaultParamsToken;
-    dispatch_once(&defaultParamsToken, ^{
-      defaultParams = [[FQueryParams alloc] init];
-    });
-    return defaultParams;
-}
-
-- (id)init {
-    self = [super init];
-    if (self) {
-        self->_limitSet = NO;
-        self->_limit = 0;
-
-        self->_viewFrom = nil;
-        self->_indexStartValue = nil;
-        self->_indexStartKey = nil;
-        self->_indexEndValue = nil;
-        self->_indexEndKey = nil;
-
-        self->_index = [FPriorityIndex priorityIndex];
-    }
-    return self;
-}
-
-/**
- * Only valid if hasStart is true
- */
-- (id)indexStartValue {
-    NSAssert([self hasStart], @"Only valid if start has been set");
-    return _indexStartValue;
-}
-
-/**
- * Only valid if hasStart is true.
- * @return The starting key name for the range defined by these query parameters
- */
-- (NSString *)indexStartKey {
-    NSAssert([self hasStart], @"Only valid if start has been set");
-    if (_indexStartKey == nil) {
-        return [FUtilities minName];
-    } else {
-        return _indexStartKey;
-    }
-}
-
-/**
- * Only valid if hasEnd is true.
- */
-- (id)indexEndValue {
-    NSAssert([self hasEnd], @"Only valid if end has been set");
-    return _indexEndValue;
-}
-
-/**
- * Only valid if hasEnd is true.
- * @return The end key name for the range defined by these query parameters
- */
-- (NSString *)indexEndKey {
-    NSAssert([self hasEnd], @"Only valid if end has been set");
-    if (_indexEndKey == nil) {
-        return [FUtilities maxName];
-    } else {
-        return _indexEndKey;
-    }
-}
-
-/**
- * @return true if a limit has been set and has been explicitly anchored
- */
-- (BOOL)hasAnchoredLimit {
-    return self.limitSet && self.viewFrom != nil;
-}
-
-/**
- * Only valid to call if limitSet returns true
- */
-- (NSInteger)limit {
-    NSAssert(self.limitSet, @"Only valid if limit has been set");
-    return _limit;
-}
-
-- (BOOL)hasStart {
-    return self->_indexStartValue != nil;
-}
-
-- (BOOL)hasEnd {
-    return self->_indexEndValue != nil;
-}
-
-- (id)copyWithZone:(NSZone *)zone {
-    // Immutable
-    return self;
-}
-
-- (id)mutableCopy {
-    FQueryParams *other = [[[self class] alloc] init];
-    // Maybe need to do extra copying here
-    other->_limitSet = _limitSet;
-    other->_limit = _limit;
-    other->_indexStartValue = _indexStartValue;
-    other->_indexStartKey = _indexStartKey;
-    other->_indexEndValue = _indexEndValue;
-    other->_indexEndKey = _indexEndKey;
-    other->_viewFrom = _viewFrom;
-    other->_index = _index;
-    return other;
-}
-
-- (FQueryParams *)limitTo:(NSInteger)newLimit {
-    FQueryParams *newParams = [self mutableCopy];
-    newParams->_limitSet = YES;
-    newParams->_limit = newLimit;
-    newParams->_viewFrom = nil;
-    return newParams;
-}
-
-- (FQueryParams *)limitToFirst:(NSInteger)newLimit {
-    FQueryParams *newParams = [self mutableCopy];
-    newParams->_limitSet = YES;
-    newParams->_limit = newLimit;
-    newParams->_viewFrom = kFQPViewFromLeft;
-    return newParams;
-}
-
-- (FQueryParams *)limitToLast:(NSInteger)newLimit {
-    FQueryParams *newParams = [self mutableCopy];
-    newParams->_limitSet = YES;
-    newParams->_limit = newLimit;
-    newParams->_viewFrom = kFQPViewFromRight;
-    return newParams;
-}
-
-- (FQueryParams *)startAt:(id<FNode>)indexValue childKey:(NSString *)key {
-    NSAssert([indexValue isLeafNode] || [indexValue isEmpty], nil);
-    FQueryParams *newParams = [self mutableCopy];
-    newParams->_indexStartValue = indexValue;
-    newParams->_indexStartKey = key;
-    return newParams;
-}
-
-- (FQueryParams *)startAt:(id<FNode>)indexValue {
-    return [self startAt:indexValue childKey:nil];
-}
-
-- (FQueryParams *)endAt:(id<FNode>)indexValue childKey:(NSString *)key {
-    NSAssert([indexValue isLeafNode] || [indexValue isEmpty], nil);
-    FQueryParams *newParams = [self mutableCopy];
-    newParams->_indexEndValue = indexValue;
-    newParams->_indexEndKey = key;
-    return newParams;
-}
-
-- (FQueryParams *)endAt:(id<FNode>)indexValue {
-    return [self endAt:indexValue childKey:nil];
-}
-
-- (FQueryParams *)orderBy:(id)newIndex {
-    FQueryParams *newParams = [self mutableCopy];
-    newParams->_index = newIndex;
-    return newParams;
-}
-
-- (NSDictionary *)wireProtocolParams {
-    NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
-    if ([self hasStart]) {
-        [dict setObject:[self.indexStartValue valForExport:YES]
-                 forKey:kFQPIndexStartValue];
-
-        // Don't use property as it will be [MIN-NAME]
-        if (self->_indexStartKey != nil) {
-            [dict setObject:self->_indexStartKey forKey:kFQPIndexStartName];
-        }
-    }
-
-    if ([self hasEnd]) {
-        [dict setObject:[self.indexEndValue valForExport:YES]
-                 forKey:kFQPIndexEndValue];
-
-        // Don't use property as it will be [MAX-NAME]
-        if (self->_indexEndKey != nil) {
-            [dict setObject:self->_indexEndKey forKey:kFQPIndexEndName];
-        }
-    }
-
-    if (self.limitSet) {
-        [dict setObject:[NSNumber numberWithInteger:self.limit]
-                 forKey:kFQPLimit];
-        NSString *vf = self.viewFrom;
-        if (vf == nil) {
-            // limit() rather than limitToFirst or limitToLast was called.
-            // This means that only one of startSet or endSet is true. Use them
-            // to calculate which side of the view to anchor to. If neither is
-            // set, Anchor to end
-            if ([self hasStart]) {
-                vf = kFQPViewFromLeft;
-            } else {
-                vf = kFQPViewFromRight;
-            }
-        }
-        [dict setObject:vf forKey:kFQPViewFrom];
-    }
-
-    // For now, priority index is the default, so we only specify if it's some
-    // other index.
-    if (![self.index isEqual:[FPriorityIndex priorityIndex]]) {
-        [dict setObject:[self.index queryDefinition] forKey:kFQPIndex];
-    }
-
-    return dict;
-}
-
-+ (FQueryParams *)fromQueryObject:(NSDictionary *)dict {
-    if (dict.count == 0) {
-        return [FQueryParams defaultInstance];
-    }
-
-    FQueryParams *params = [[FQueryParams alloc] init];
-    if (dict[kFQPLimit] != nil) {
-        params->_limitSet = YES;
-        params->_limit = [dict[kFQPLimit] integerValue];
-    }
-
-    if (dict[kFQPIndexStartValue] != nil) {
-        params->_indexStartValue =
-            [FSnapshotUtilities nodeFrom:dict[kFQPIndexStartValue]];
-        if (dict[kFQPIndexStartName] != nil) {
-            params->_indexStartKey = dict[kFQPIndexStartName];
-        }
-    }
-
-    if (dict[kFQPIndexEndValue] != nil) {
-        params->_indexEndValue =
-            [FSnapshotUtilities nodeFrom:dict[kFQPIndexEndValue]];
-        if (dict[kFQPIndexEndName] != nil) {
-            params->_indexEndKey = dict[kFQPIndexEndName];
-        }
-    }
-
-    if (dict[kFQPViewFrom] != nil) {
-        NSString *viewFrom = dict[kFQPViewFrom];
-        if (![viewFrom isEqualToString:kFQPViewFromLeft] &&
-            ![viewFrom isEqualToString:kFQPViewFromRight]) {
-            [NSException raise:NSInvalidArgumentException
-                        format:@"Unknown view from paramter: %@", viewFrom];
-        }
-        params->_viewFrom = viewFrom;
-    }
-
-    NSString *index = dict[kFQPIndex];
-    if (index != nil) {
-        params->_index = [FIndex indexFromQueryDefinition:index];
-    }
-
-    return params;
-}
-
-- (BOOL)isViewFromLeft {
-    if (self.viewFrom != nil) {
-        // Not null, we can just check
-        return [self.viewFrom isEqualToString:kFQPViewFromLeft];
-    } else {
-        // If start is set, it's view from left. Otherwise not.
-        return self.hasStart;
-    }
-}
-
-- (id<FNodeFilter>)nodeFilter {
-    if (self.loadsAllData) {
-        return [[FIndexedFilter alloc] initWithIndex:self.index];
-    } else if (self.limitSet) {
-        return [[FLimitedFilter alloc] initWithQueryParams:self];
-    } else {
-        return [[FRangedFilter alloc] initWithQueryParams:self];
-    }
-}
-
-- (BOOL)isValid {
-    return !(self.hasStart && self.hasEnd && self.limitSet &&
-             !self.hasAnchoredLimit);
-}
-
-- (BOOL)loadsAllData {
-    return !(self.hasStart || self.hasEnd || self.limitSet);
-}
-
-- (BOOL)isDefault {
-    return [self loadsAllData] &&
-           [self.index isEqual:[FPriorityIndex priorityIndex]];
-}
-
-- (NSString *)description {
-    return [[self wireProtocolParams] description];
-}
-
-- (BOOL)isEqual:(id)obj {
-    if (self == obj) {
-        return YES;
-    }
-    if (![obj isKindOfClass:[self class]]) {
-        return NO;
-    }
-    FQueryParams *other = (FQueryParams *)obj;
-    if (self->_limitSet != other->_limitSet)
-        return NO;
-    if (self->_limit != other->_limit)
-        return NO;
-    if ((self->_index != other->_index) && !
-                                           [self->_index isEqual:other->_index])
-        return NO;
-    if ((self->_indexStartKey != other->_indexStartKey) &&
-        ![self->_indexStartKey isEqualToString:other->_indexStartKey])
-        return NO;
-    if ((self->_indexStartValue != other->_indexStartValue) &&
-        ![self->_indexStartValue isEqual:other->_indexStartValue])
-        return NO;
-    if ((self->_indexEndKey != other->_indexEndKey) &&
-        ![self->_indexEndKey isEqualToString:other->_indexEndKey])
-        return NO;
-    if ((self->_indexEndValue != other->_indexEndValue) &&
-        ![self->_indexEndValue isEqual:other->_indexEndValue])
-        return NO;
-    if ([self isViewFromLeft] != [other isViewFromLeft])
-        return NO;
-
-    return YES;
-}
-
-- (NSUInteger)hash {
-    NSUInteger result = _limitSet ? _limit : 0;
-    result = 31 * result + ([self isViewFromLeft] ? 1231 : 1237);
-    result = 31 * result + [_indexStartKey hash];
-    result = 31 * result + [_indexStartValue hash];
-    result = 31 * result + [_indexEndKey hash];
-    result = 31 * result + [_indexEndValue hash];
-    result = 31 * result + [_index hash];
-    return result;
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FQuerySpec.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FQuerySpec.h
deleted file mode 100644
index 2eece87..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FQuerySpec.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#import "FIndex.h"
-#import "FPath.h"
-#import "FQueryParams.h"
-
-@interface FQuerySpec : NSObject <NSCopying>
-
-@property(nonatomic, strong, readonly) FPath *path;
-@property(nonatomic, strong, readonly) FQueryParams *params;
-
-- (id)initWithPath:(FPath *)path params:(FQueryParams *)params;
-
-+ (FQuerySpec *)defaultQueryAtPath:(FPath *)path;
-
-- (id<FIndex>)index;
-- (BOOL)isDefault;
-- (BOOL)loadsAllData;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FQuerySpec.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FQuerySpec.m
deleted file mode 100644
index c408bf8..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FQuerySpec.m
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FQuerySpec.h"
-
-@interface FQuerySpec ()
-
-@property(nonatomic, strong, readwrite) FPath *path;
-@property(nonatomic, strong, readwrite) FQueryParams *params;
-
-@end
-
-@implementation FQuerySpec
-
-- (id)initWithPath:(FPath *)path params:(FQueryParams *)params {
-    self = [super init];
-    if (self != nil) {
-        self->_path = path;
-        self->_params = params;
-    }
-    return self;
-}
-
-+ (FQuerySpec *)defaultQueryAtPath:(FPath *)path {
-    return [[FQuerySpec alloc] initWithPath:path
-                                     params:[FQueryParams defaultInstance]];
-}
-
-- (id)copyWithZone:(NSZone *)zone {
-    // Immutable
-    return self;
-}
-
-- (id<FIndex>)index {
-    return self.params.index;
-}
-
-- (BOOL)isDefault {
-    return self.params.isDefault;
-}
-
-- (BOOL)loadsAllData {
-    return self.params.loadsAllData;
-}
-
-- (BOOL)isEqual:(id)object {
-    if (self == object) {
-        return YES;
-    }
-
-    if (![object isKindOfClass:[FQuerySpec class]]) {
-        return NO;
-    }
-
-    FQuerySpec *other = (FQuerySpec *)object;
-
-    if (![self.path isEqual:other.path]) {
-        return NO;
-    }
-
-    return [self.params isEqual:other.params];
-}
-
-- (NSUInteger)hash {
-    return self.path.hash * 31 + self.params.hash;
-}
-
-- (NSString *)description {
-    return [NSString stringWithFormat:@"FQuerySpec (path: %@, params: %@)",
-                                      self.path, self.params];
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRangeMerge.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRangeMerge.h
deleted file mode 100644
index 5f7938a..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRangeMerge.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#import "FNode.h"
-
-/**
- * Applies a merge of a snap for a given interval of paths.
- * Each leaf in the current node which the relative path lies *after* (the
- * optional) start and lies *before or at* (the optional) end will be deleted.
- * Each leaf in snap that lies in the interval will be added to the resulting
- * node. Nodes outside of the range are ignored. nil for start and end are
- * sentinel values that represent -infinity and +infinity respectively (aka
- * includes any path). Priorities of children nodes are treated as leaf children
- * of that node.
- */
-@interface FRangeMerge : NSObject
-
-- (instancetype)initWithStart:(FPath *)start
-                          end:(FPath *)end
-                      updates:(id<FNode>)updates;
-
-- (id<FNode>)applyToNode:(id<FNode>)node;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRangeMerge.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRangeMerge.m
deleted file mode 100644
index 3dc1576..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRangeMerge.m
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FRangeMerge.h"
-
-#import "FEmptyNode.h"
-
-@interface FRangeMerge ()
-
-@property(nonatomic, strong) FPath *optExclusiveStart;
-@property(nonatomic, strong) FPath *optInclusiveEnd;
-@property(nonatomic, strong) id<FNode> updates;
-
-@end
-
-@implementation FRangeMerge
-
-- (instancetype)initWithStart:(FPath *)start
-                          end:(FPath *)end
-                      updates:(id<FNode>)updates {
-    self = [super init];
-    if (self != nil) {
-        self->_optExclusiveStart = start;
-        self->_optInclusiveEnd = end;
-        self->_updates = updates;
-    }
-    return self;
-}
-
-- (id<FNode>)applyToNode:(id<FNode>)node {
-    return [self updateRangeInNode:[FPath empty]
-                              node:node
-                           updates:self.updates];
-}
-
-- (id<FNode>)updateRangeInNode:(FPath *)currentPath
-                          node:(id<FNode>)node
-                       updates:(id<FNode>)updates {
-    NSComparisonResult startComparison =
-        (self.optExclusiveStart == nil)
-            ? NSOrderedDescending
-            : [currentPath compare:self.optExclusiveStart];
-    NSComparisonResult endComparison =
-        (self.optInclusiveEnd == nil)
-            ? NSOrderedAscending
-            : [currentPath compare:self.optInclusiveEnd];
-    BOOL startInNode = self.optExclusiveStart != nil &&
-                       [currentPath contains:self.optExclusiveStart];
-    BOOL endInNode = self.optInclusiveEnd != nil &&
-                     [currentPath contains:self.optInclusiveEnd];
-    if (startComparison == NSOrderedDescending &&
-        endComparison == NSOrderedAscending && !endInNode) {
-        // child is completly contained
-        return updates;
-    } else if (startComparison == NSOrderedDescending && endInNode &&
-               [updates isLeafNode]) {
-        return updates;
-    } else if (startComparison == NSOrderedDescending &&
-               endComparison == NSOrderedSame) {
-        NSAssert(endInNode, @"End not in node");
-        NSAssert(![updates isLeafNode], @"Found leaf node update, this case "
-                                        @"should have been handled above.");
-        if ([node isLeafNode]) {
-            // Update node was not a leaf node, so we can delete it
-            return [FEmptyNode emptyNode];
-        } else {
-            // Unaffected by range, ignore
-            return node;
-        }
-    } else if (startInNode || endInNode) {
-        // There is a partial update we need to do, so collect all relevant
-        // children
-        NSMutableSet *allChildren = [NSMutableSet set];
-        [node enumerateChildrenUsingBlock:^(NSString *key, id<FNode> node,
-                                            BOOL *stop) {
-          [allChildren addObject:key];
-        }];
-        [updates enumerateChildrenUsingBlock:^(NSString *key, id<FNode> node,
-                                               BOOL *stop) {
-          [allChildren addObject:key];
-        }];
-
-        __block id<FNode> newNode = node;
-        void (^action)(id, BOOL *) = ^void(NSString *key, BOOL *stop) {
-          id<FNode> currentChild = [node getImmediateChild:key];
-          id<FNode> updatedChild =
-              [self updateRangeInNode:[currentPath childFromString:key]
-                                 node:currentChild
-                              updates:[updates getImmediateChild:key]];
-          // Only need to update if the node changed
-          if (updatedChild != currentChild) {
-              newNode = [newNode updateImmediateChild:key
-                                         withNewChild:updatedChild];
-          }
-        };
-
-        [allChildren enumerateObjectsUsingBlock:action];
-
-        // Add priority last, so the node is not empty when applying
-        if (!updates.getPriority.isEmpty || !node.getPriority.isEmpty) {
-            BOOL stop = NO;
-            action(@".priority", &stop);
-        }
-        return newNode;
-    } else {
-        // Unaffected by this range
-        NSAssert(endComparison == NSOrderedDescending ||
-                     startComparison <= NSOrderedSame,
-                 @"Invalid range for update");
-        return node;
-    }
-}
-
-- (NSString *)description {
-    return [NSString stringWithFormat:@"RangeMerge (optExclusiveStart = %@, "
-                                      @"optExclusiveEng = %@, updates = %@)",
-                                      self.optExclusiveStart,
-                                      self.optInclusiveEnd, self.updates];
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepo.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepo.h
deleted file mode 100644
index 4e3899a..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepo.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FIRDataEventType.h"
-#import "FPersistentConnection.h"
-#import "FRepoInfo.h"
-#import "FTupleUserCallback.h"
-#import <Foundation/Foundation.h>
-
-@class FQuerySpec;
-@class FPersistence;
-@class FAuthenticationManager;
-@class FIRDatabaseConfig;
-@protocol FEventRegistration;
-@class FCompoundWrite;
-@protocol FClock;
-@class FIRDatabase;
-
-@interface FRepo : NSObject <FPersistentConnectionDelegate>
-
-@property(nonatomic, strong) FIRDatabaseConfig *config;
-
-- (id)initWithRepoInfo:(FRepoInfo *)info
-                config:(FIRDatabaseConfig *)config
-              database:(FIRDatabase *)database;
-
-- (void)set:(FPath *)path
-        withNode:(id)node
-    withCallback:(fbt_void_nserror_ref)onComplete;
-- (void)update:(FPath *)path
-       withNodes:(FCompoundWrite *)compoundWrite
-    withCallback:(fbt_void_nserror_ref)callback;
-- (void)purgeOutstandingWrites;
-
-- (void)addEventRegistration:(id<FEventRegistration>)eventRegistration
-                    forQuery:(FQuerySpec *)query;
-- (void)removeEventRegistration:(id<FEventRegistration>)eventRegistration
-                       forQuery:(FQuerySpec *)query;
-- (void)keepQuery:(FQuerySpec *)query synced:(BOOL)synced;
-
-- (NSString *)name;
-- (NSTimeInterval)serverTime;
-
-- (void)onDataUpdate:(FPersistentConnection *)fpconnection
-             forPath:(NSString *)pathString
-             message:(id)message
-             isMerge:(BOOL)isMerge
-               tagId:(NSNumber *)tagId;
-- (void)onConnect:(FPersistentConnection *)fpconnection;
-- (void)onDisconnect:(FPersistentConnection *)fpconnection;
-
-// Disconnect methods
-- (void)onDisconnectCancel:(FPath *)path
-              withCallback:(fbt_void_nserror_ref)callback;
-- (void)onDisconnectSet:(FPath *)path
-               withNode:(id<FNode>)node
-           withCallback:(fbt_void_nserror_ref)callback;
-- (void)onDisconnectUpdate:(FPath *)path
-                 withNodes:(FCompoundWrite *)compoundWrite
-              withCallback:(fbt_void_nserror_ref)callback;
-
-// Connection Management.
-- (void)interrupt;
-- (void)resume;
-
-// Transactions
-- (void)startTransactionOnPath:(FPath *)path
-                        update:(fbt_transactionresult_mutabledata)update
-                    onComplete:(fbt_void_nserror_bool_datasnapshot)onComplete
-               withLocalEvents:(BOOL)applyLocally;
-
-// Testing methods
-- (NSDictionary *)dumpListens;
-- (void)dispose;
-- (void)setHijackHash:(BOOL)hijack;
-
-@property(nonatomic, strong, readonly) FAuthenticationManager *auth;
-@property(nonatomic, strong, readonly) FIRDatabase *database;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepo.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepo.m
deleted file mode 100644
index 27332f3..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepo.m
+++ /dev/null
@@ -1,1467 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#import "FAtomicNumber.h"
-#import "FCachePolicy.h"
-#import "FClock.h"
-#import "FConstants.h"
-#import "FEmptyNode.h"
-#import "FEventRaiser.h"
-#import "FEventRegistration.h"
-#import "FIRDataSnapshot.h"
-#import "FIRDataSnapshot_Private.h"
-#import "FIRDatabaseConfig_Private.h"
-#import "FIRDatabaseQuery_Private.h"
-#import "FIRDatabase_Private.h"
-#import "FIRMutableData.h"
-#import "FIRMutableData_Private.h"
-#import "FIRTransactionResult.h"
-#import "FIRTransactionResult_Private.h"
-#import "FLevelDBStorageEngine.h"
-#import "FListenProvider.h"
-#import "FPersistenceManager.h"
-#import "FQuerySpec.h"
-#import "FRepo.h"
-#import "FRepoManager.h"
-#import "FRepo_Private.h"
-#import "FServerValues.h"
-#import "FSnapshotHolder.h"
-#import "FSnapshotUtilities.h"
-#import "FSyncTree.h"
-#import "FTree.h"
-#import "FTupleNodePath.h"
-#import "FTupleSetIdPath.h"
-#import "FTupleTransaction.h"
-#import "FValueEventRegistration.h"
-#import "FWriteRecord.h"
-#import <FirebaseCore/FIRLogger.h>
-#import <dlfcn.h>
-
-#if TARGET_OS_IOS || TARGET_OS_TV
-#import <UIKit/UIKit.h>
-#endif
-
-@interface FRepo ()
-
-@property(nonatomic, strong) FOffsetClock *serverClock;
-@property(nonatomic, strong) FPersistenceManager *persistenceManager;
-@property(nonatomic, strong) FIRDatabase *database;
-@property(nonatomic, strong, readwrite) FAuthenticationManager *auth;
-@property(nonatomic, strong) FSyncTree *infoSyncTree;
-@property(nonatomic) NSInteger writeIdCounter;
-@property(nonatomic) BOOL hijackHash;
-@property(nonatomic, strong) FTree *transactionQueueTree;
-@property(nonatomic) BOOL loggedTransactionPersistenceWarning;
-
-/**
- * Test only. For load testing the server.
- */
-@property(nonatomic, strong) id (^interceptServerDataCallback)
-    (NSString *pathString, id data);
-@end
-
-@implementation FRepo
-
-- (id)initWithRepoInfo:(FRepoInfo *)info
-                config:(FIRDatabaseConfig *)config
-              database:(FIRDatabase *)database {
-    self = [super init];
-    if (self) {
-        self.repoInfo = info;
-        self.config = config;
-        self.database = database;
-
-        // Access can occur outside of shared queue, so the clock needs to be
-        // initialized here
-        self.serverClock =
-            [[FOffsetClock alloc] initWithClock:[FSystemClock clock] offset:0];
-
-        self.connection = [[FPersistentConnection alloc]
-            initWithRepoInfo:self.repoInfo
-               dispatchQueue:[FIRDatabaseQuery sharedQueue]
-                      config:self.config];
-
-        // Needs to be called before authentication manager is instantiated
-        self.eventRaiser =
-            [[FEventRaiser alloc] initWithQueue:self.config.callbackQueue];
-
-        dispatch_async([FIRDatabaseQuery sharedQueue], ^{
-          [self deferredInit];
-        });
-    }
-    return self;
-}
-
-- (void)deferredInit {
-    // TODO: cleanup on dealloc
-    __weak FRepo *weakSelf = self;
-    [self.config.authTokenProvider listenForTokenChanges:^(NSString *token) {
-      [weakSelf.connection refreshAuthToken:token];
-    }];
-
-    // Open connection now so that by the time we are connected the deferred
-    // init has run This relies on the fact that all callbacks run on repos
-    // queue
-    self.connection.delegate = self;
-    [self.connection open];
-
-    self.dataUpdateCount = 0;
-    self.rangeMergeUpdateCount = 0;
-    self.interceptServerDataCallback = nil;
-
-    if (self.config.persistenceEnabled) {
-        NSString *repoHashString =
-            [NSString stringWithFormat:@"%@_%@", self.repoInfo.host,
-                                       self.repoInfo.namespace];
-        NSString *persistencePrefix =
-            [NSString stringWithFormat:@"%@/%@", self.config.sessionIdentifier,
-                                       repoHashString];
-
-        id<FCachePolicy> cachePolicy = [[FLRUCachePolicy alloc]
-            initWithMaxSize:self.config.persistenceCacheSizeBytes];
-
-        id<FStorageEngine> engine;
-        if (self.config.forceStorageEngine != nil) {
-            engine = self.config.forceStorageEngine;
-        } else {
-            FLevelDBStorageEngine *levelDBEngine =
-                [[FLevelDBStorageEngine alloc] initWithPath:persistencePrefix];
-            // We need the repo info to run the legacy migration. Future
-            // migrations will be managed by the database itself Remove this
-            // once we are confident that no-one is using legacy migration
-            // anymore...
-            [levelDBEngine runLegacyMigration:self.repoInfo];
-            engine = levelDBEngine;
-        }
-
-        self.persistenceManager =
-            [[FPersistenceManager alloc] initWithStorageEngine:engine
-                                                   cachePolicy:cachePolicy];
-    } else {
-        self.persistenceManager = nil;
-    }
-
-    [self initTransactions];
-
-    // A list of data pieces and paths to be set when this client disconnects
-    self.onDisconnect = [[FSparseSnapshotTree alloc] init];
-    self.infoData = [[FSnapshotHolder alloc] init];
-
-    FListenProvider *infoListenProvider = [[FListenProvider alloc] init];
-    infoListenProvider.startListening =
-        ^(FQuerySpec *query, NSNumber *tagId, id<FSyncTreeHash> hash,
-          fbt_nsarray_nsstring onComplete) {
-          NSArray *infoEvents = @[];
-          FRepo *strongSelf = weakSelf;
-          id<FNode> node = [strongSelf.infoData getNode:query.path];
-          // This is possibly a hack, but we have different semantics for .info
-          // endpoints. We don't raise null events on initial data...
-          if (![node isEmpty]) {
-              infoEvents =
-                  [strongSelf.infoSyncTree applyServerOverwriteAtPath:query.path
-                                                              newData:node];
-              [strongSelf.eventRaiser raiseCallback:^{
-                onComplete(kFWPResponseForActionStatusOk);
-              }];
-          }
-          return infoEvents;
-        };
-    infoListenProvider.stopListening = ^(FQuerySpec *query, NSNumber *tagId) {
-    };
-    self.infoSyncTree =
-        [[FSyncTree alloc] initWithListenProvider:infoListenProvider];
-
-    FListenProvider *serverListenProvider = [[FListenProvider alloc] init];
-    serverListenProvider.startListening =
-        ^(FQuerySpec *query, NSNumber *tagId, id<FSyncTreeHash> hash,
-          fbt_nsarray_nsstring onComplete) {
-          [weakSelf.connection listen:query
-                                tagId:tagId
-                                 hash:hash
-                           onComplete:^(NSString *status) {
-                             NSArray *events = onComplete(status);
-                             [weakSelf.eventRaiser raiseEvents:events];
-                           }];
-          // No synchronous events for network-backed sync trees
-          return @[];
-        };
-    serverListenProvider.stopListening = ^(FQuerySpec *query, NSNumber *tag) {
-      [weakSelf.connection unlisten:query tagId:tag];
-    };
-    self.serverSyncTree =
-        [[FSyncTree alloc] initWithPersistenceManager:self.persistenceManager
-                                       listenProvider:serverListenProvider];
-
-    [self restoreWrites];
-
-    [self updateInfo:kDotInfoConnected withValue:@NO];
-
-    [self setupNotifications];
-}
-
-- (void)restoreWrites {
-    NSArray *writes = self.persistenceManager.userWrites;
-
-    NSDictionary *serverValues =
-        [FServerValues generateServerValues:self.serverClock];
-    __block NSInteger lastWriteId = NSIntegerMin;
-    [writes enumerateObjectsUsingBlock:^(FWriteRecord *write, NSUInteger idx,
-                                         BOOL *stop) {
-      NSInteger writeId = write.writeId;
-      fbt_void_nsstring_nsstring callback =
-          ^(NSString *status, NSString *errorReason) {
-            [self warnIfWriteFailedAtPath:write.path
-                                   status:status
-                                  message:@"Persisted write"];
-            [self ackWrite:writeId
-                rerunTransactionsAtPath:write.path
-                                 status:status];
-          };
-      if (lastWriteId >= writeId) {
-          [NSException raise:NSInternalInconsistencyException
-                      format:@"Restored writes were not in order!"];
-      }
-      lastWriteId = writeId;
-      self.writeIdCounter = writeId + 1;
-
-      if ([write isOverwrite]) {
-          FFLog(@"I-RDB038001", @"Restoring overwrite with id %ld",
-                (long)write.writeId);
-          [self.connection putData:[write.overwrite valForExport:YES]
-                           forPath:[write.path toString]
-                          withHash:nil
-                      withCallback:callback];
-          id<FNode> resolved =
-              [FServerValues resolveDeferredValueSnapshot:write.overwrite
-                                             withSyncTree:self.serverSyncTree
-                                                   atPath:write.path
-                                             serverValues:serverValues];
-          [self.serverSyncTree applyUserOverwriteAtPath:write.path
-                                                newData:resolved
-                                                writeId:writeId
-                                              isVisible:YES];
-      } else {
-          FFLog(@"I-RDB038002", @"Restoring merge with id %ld",
-                (long)write.writeId);
-          [self.connection mergeData:[write.merge valForExport:YES]
-                             forPath:[write.path toString]
-                        withCallback:callback];
-          FCompoundWrite *resolved = [FServerValues
-              resolveDeferredValueCompoundWrite:write.merge
-                                   withSyncTree:self.serverSyncTree
-                                         atPath:write.path
-                                   serverValues:serverValues];
-          [self.serverSyncTree applyUserMergeAtPath:write.path
-                                    changedChildren:resolved
-                                            writeId:writeId];
-      }
-    }];
-}
-
-- (NSString *)name {
-    return self.repoInfo.namespace;
-}
-
-- (NSString *)description {
-    return [self.repoInfo description];
-}
-
-- (void)interrupt {
-    [self.connection interruptForReason:kFInterruptReasonRepoInterrupt];
-}
-
-- (void)resume {
-    [self.connection resumeForReason:kFInterruptReasonRepoInterrupt];
-}
-
-// NOTE: Typically if you're calling this, you should be in an @autoreleasepool
-// block to make sure that ARC kicks in and cleans up things no longer
-// referenced (i.e. pendingPutsDB).
-- (void)dispose {
-    [self.connection interruptForReason:kFInterruptReasonRepoInterrupt];
-
-    // We need to nil out any references to LevelDB, to make sure the
-    // LevelDB exclusive locks are released.
-    [self.persistenceManager close];
-}
-
-- (NSInteger)nextWriteId {
-    return self->_writeIdCounter++;
-}
-
-- (NSTimeInterval)serverTime {
-    return [self.serverClock currentTime];
-}
-
-- (void)set:(FPath *)path
-        withNode:(id<FNode>)node
-    withCallback:(fbt_void_nserror_ref)onComplete {
-    id value = [node valForExport:YES];
-    FFLog(@"I-RDB038003", @"Setting: %@ with %@ pri: %@", [path toString],
-          [value description], [[node getPriority] val]);
-
-    // TODO: Optimize this behavior to either (a) store flag to skip resolving
-    // where possible and / or (b) store unresolved paths on JSON parse
-    NSDictionary *serverValues =
-        [FServerValues generateServerValues:self.serverClock];
-    id<FNode> existing = [self.serverSyncTree calcCompleteEventCacheAtPath:path
-                                                           excludeWriteIds:@[]];
-    id<FNode> newNode =
-        [FServerValues resolveDeferredValueSnapshot:node
-                                       withExisting:existing
-                                       serverValues:serverValues];
-
-    NSInteger writeId = [self nextWriteId];
-    [self.persistenceManager saveUserOverwrite:node
-                                        atPath:path
-                                       writeId:writeId];
-    NSArray *events = [self.serverSyncTree applyUserOverwriteAtPath:path
-                                                            newData:newNode
-                                                            writeId:writeId
-                                                          isVisible:YES];
-    [self.eventRaiser raiseEvents:events];
-
-    [self.connection putData:value
-                     forPath:[path toString]
-                    withHash:nil
-                withCallback:^(NSString *status, NSString *errorReason) {
-                  [self warnIfWriteFailedAtPath:path
-                                         status:status
-                                        message:@"setValue: or removeValue:"];
-                  [self ackWrite:writeId
-                      rerunTransactionsAtPath:path
-                                       status:status];
-                  [self callOnComplete:onComplete
-                            withStatus:status
-                           errorReason:errorReason
-                               andPath:path];
-                }];
-
-    FPath *affectedPath = [self abortTransactionsAtPath:path
-                                                  error:kFTransactionSet];
-    [self rerunTransactionsForPath:affectedPath];
-}
-
-- (void)update:(FPath *)path
-       withNodes:(FCompoundWrite *)nodes
-    withCallback:(fbt_void_nserror_ref)callback {
-    NSDictionary *values = [nodes valForExport:YES];
-
-    FFLog(@"I-RDB038004", @"Updating: %@ with %@", [path toString],
-          [values description]);
-    NSDictionary *serverValues =
-        [FServerValues generateServerValues:self.serverClock];
-    FCompoundWrite *resolved =
-        [FServerValues resolveDeferredValueCompoundWrite:nodes
-                                            withSyncTree:self.serverSyncTree
-                                                  atPath:path
-                                            serverValues:serverValues];
-
-    if (!resolved.isEmpty) {
-        NSInteger writeId = [self nextWriteId];
-        [self.persistenceManager saveUserMerge:nodes
-                                        atPath:path
-                                       writeId:writeId];
-        NSArray *events = [self.serverSyncTree applyUserMergeAtPath:path
-                                                    changedChildren:resolved
-                                                            writeId:writeId];
-        [self.eventRaiser raiseEvents:events];
-
-        [self.connection mergeData:values
-                           forPath:[path description]
-                      withCallback:^(NSString *status, NSString *errorReason) {
-                        [self warnIfWriteFailedAtPath:path
-                                               status:status
-                                              message:@"updateChildValues:"];
-                        [self ackWrite:writeId
-                            rerunTransactionsAtPath:path
-                                             status:status];
-                        [self callOnComplete:callback
-                                  withStatus:status
-                                 errorReason:errorReason
-                                     andPath:path];
-                      }];
-
-        [nodes enumerateWrites:^(FPath *childPath, id<FNode> node, BOOL *stop) {
-          FPath *pathFromRoot = [path child:childPath];
-          FFLog(@"I-RDB038005", @"Cancelling transactions at path: %@",
-                pathFromRoot);
-          FPath *affectedPath = [self abortTransactionsAtPath:pathFromRoot
-                                                        error:kFTransactionSet];
-          [self rerunTransactionsForPath:affectedPath];
-        }];
-    } else {
-        FFLog(@"I-RDB038006", @"update called with empty data. Doing nothing");
-        // Do nothing, just call the callback
-        [self callOnComplete:callback
-                  withStatus:@"ok"
-                 errorReason:nil
-                     andPath:path];
-    }
-}
-
-- (void)onDisconnectCancel:(FPath *)path
-              withCallback:(fbt_void_nserror_ref)callback {
-    [self.connection
-        onDisconnectCancelPath:path
-                  withCallback:^(NSString *status, NSString *errorReason) {
-                    BOOL success =
-                        [status isEqualToString:kFWPResponseForActionStatusOk];
-                    if (success) {
-                        [self.onDisconnect forgetPath:path];
-                    } else {
-                        FFLog(@"I-RDB038007",
-                              @"cancelDisconnectOperations: at %@ failed: %@",
-                              path, status);
-                    }
-
-                    [self callOnComplete:callback
-                              withStatus:status
-                             errorReason:errorReason
-                                 andPath:path];
-                  }];
-}
-
-- (void)onDisconnectSet:(FPath *)path
-               withNode:(id<FNode>)node
-           withCallback:(fbt_void_nserror_ref)callback {
-    [self.connection
-        onDisconnectPutData:[node valForExport:YES]
-                    forPath:path
-               withCallback:^(NSString *status, NSString *errorReason) {
-                 BOOL success =
-                     [status isEqualToString:kFWPResponseForActionStatusOk];
-                 if (success) {
-                     [self.onDisconnect rememberData:node onPath:path];
-                 } else {
-                     FFWarn(@"I-RDB038008",
-                            @"onDisconnectSetValue: or "
-                            @"onDisconnectRemoveValue: at %@ failed: %@",
-                            path, status);
-                 }
-
-                 [self callOnComplete:callback
-                           withStatus:status
-                          errorReason:errorReason
-                              andPath:path];
-               }];
-}
-
-- (void)onDisconnectUpdate:(FPath *)path
-                 withNodes:(FCompoundWrite *)nodes
-              withCallback:(fbt_void_nserror_ref)callback {
-    if (!nodes.isEmpty) {
-        NSDictionary *values = [nodes valForExport:YES];
-
-        [self.connection
-            onDisconnectMergeData:values
-                          forPath:path
-                     withCallback:^(NSString *status, NSString *errorReason) {
-                       BOOL success = [status
-                           isEqualToString:kFWPResponseForActionStatusOk];
-                       if (success) {
-                           [nodes enumerateWrites:^(FPath *relativePath,
-                                                    id<FNode> nodeUnresolved,
-                                                    BOOL *stop) {
-                             FPath *childPath = [path child:relativePath];
-                             [self.onDisconnect rememberData:nodeUnresolved
-                                                      onPath:childPath];
-                           }];
-                       } else {
-                           FFWarn(@"I-RDB038009",
-                                  @"onDisconnectUpdateChildValues: at %@ "
-                                  @"failed %@",
-                                  path, status);
-                       }
-
-                       [self callOnComplete:callback
-                                 withStatus:status
-                                errorReason:errorReason
-                                    andPath:path];
-                     }];
-    } else {
-        // Do nothing, just call the callback
-        [self callOnComplete:callback
-                  withStatus:@"ok"
-                 errorReason:nil
-                     andPath:path];
-    }
-}
-
-- (void)purgeOutstandingWrites {
-    FFLog(@"I-RDB038010", @"Purging outstanding writes");
-    NSArray *events = [self.serverSyncTree removeAllWrites];
-    [self.eventRaiser raiseEvents:events];
-    // Abort any transactions
-    [self abortTransactionsAtPath:[FPath empty] error:kFErrorWriteCanceled];
-    // Remove outstanding writes from connection
-    [self.connection purgeOutstandingWrites];
-}
-
-- (void)addEventRegistration:(id<FEventRegistration>)eventRegistration
-                    forQuery:(FQuerySpec *)query {
-    NSArray *events = nil;
-    if ([[query.path getFront] isEqualToString:kDotInfoPrefix]) {
-        events = [self.infoSyncTree addEventRegistration:eventRegistration
-                                                forQuery:query];
-    } else {
-        events = [self.serverSyncTree addEventRegistration:eventRegistration
-                                                  forQuery:query];
-    }
-    [self.eventRaiser raiseEvents:events];
-}
-
-- (void)removeEventRegistration:(id<FEventRegistration>)eventRegistration
-                       forQuery:(FQuerySpec *)query {
-    // These are guaranteed not to raise events, since we're not passing in a
-    // cancelError. However we can future-proof a little bit by handling the
-    // return values anyways.
-    FFLog(@"I-RDB038011", @"Removing event registration with hande: %lu",
-          (unsigned long)eventRegistration.handle);
-    NSArray *events = nil;
-    if ([[query.path getFront] isEqualToString:kDotInfoPrefix]) {
-        events = [self.infoSyncTree removeEventRegistration:eventRegistration
-                                                   forQuery:query
-                                                cancelError:nil];
-    } else {
-        events = [self.serverSyncTree removeEventRegistration:eventRegistration
-                                                     forQuery:query
-                                                  cancelError:nil];
-    }
-    [self.eventRaiser raiseEvents:events];
-}
-
-- (void)keepQuery:(FQuerySpec *)query synced:(BOOL)synced {
-    NSAssert(![[query.path getFront] isEqualToString:kDotInfoPrefix],
-             @"Can't keep .info tree synced!");
-    [self.serverSyncTree keepQuery:query synced:synced];
-}
-
-- (void)updateInfo:(NSString *)pathString withValue:(id)value {
-    // hack to make serverTimeOffset available in a threadsafe way. Property is
-    // marked as atomic
-    if ([pathString isEqualToString:kDotInfoServerTimeOffset]) {
-        NSTimeInterval offset = [(NSNumber *)value doubleValue] / 1000.0;
-        self.serverClock =
-            [[FOffsetClock alloc] initWithClock:[FSystemClock clock]
-                                         offset:offset];
-    }
-
-    FPath *path = [[FPath alloc]
-        initWith:[NSString
-                     stringWithFormat:@"%@/%@", kDotInfoPrefix, pathString]];
-    id<FNode> newNode = [FSnapshotUtilities nodeFrom:value];
-    [self.infoData updateSnapshot:path withNewSnapshot:newNode];
-    NSArray *events = [self.infoSyncTree applyServerOverwriteAtPath:path
-                                                            newData:newNode];
-    [self.eventRaiser raiseEvents:events];
-}
-
-- (void)callOnComplete:(fbt_void_nserror_ref)onComplete
-            withStatus:(NSString *)status
-           errorReason:(NSString *)errorReason
-               andPath:(FPath *)path {
-    if (onComplete) {
-        FIRDatabaseReference *ref =
-            [[FIRDatabaseReference alloc] initWithRepo:self path:path];
-        BOOL statusOk = [status isEqualToString:kFWPResponseForActionStatusOk];
-        NSError *err = nil;
-        if (!statusOk) {
-            err = [FUtilities errorForStatus:status andReason:errorReason];
-        }
-        [self.eventRaiser raiseCallback:^{
-          onComplete(err, ref);
-        }];
-    }
-}
-
-- (void)ackWrite:(NSInteger)writeId
-    rerunTransactionsAtPath:(FPath *)path
-                     status:(NSString *)status {
-    if ([status isEqualToString:kFErrorWriteCanceled]) {
-        // This write was already removed, we just need to ignore it...
-    } else {
-        BOOL success = [status isEqualToString:kFWPResponseForActionStatusOk];
-        NSArray *clearEvents =
-            [self.serverSyncTree ackUserWriteWithWriteId:writeId
-                                                  revert:!success
-                                                 persist:YES
-                                                   clock:self.serverClock];
-        if ([clearEvents count] > 0) {
-            [self rerunTransactionsForPath:path];
-        }
-        [self.eventRaiser raiseEvents:clearEvents];
-    }
-}
-
-- (void)warnIfWriteFailedAtPath:(FPath *)path
-                         status:(NSString *)status
-                        message:(NSString *)message {
-    if (!([status isEqualToString:kFWPResponseForActionStatusOk] ||
-          [status isEqualToString:kFErrorWriteCanceled])) {
-        FFWarn(@"I-RDB038012", @"%@ at %@ failed: %@", message, path, status);
-    }
-}
-
-#pragma mark -
-#pragma mark FPersistentConnectionDelegate methods
-
-- (void)onDataUpdate:(FPersistentConnection *)fpconnection
-             forPath:(NSString *)pathString
-             message:(id)data
-             isMerge:(BOOL)isMerge
-               tagId:(NSNumber *)tagId {
-    FFLog(@"I-RDB038013", @"onDataUpdateForPath: %@ withMessage: %@",
-          pathString, data);
-
-    // For testing.
-    self.dataUpdateCount++;
-
-    FPath *path = [[FPath alloc] initWith:pathString];
-    data = self.interceptServerDataCallback
-               ? self.interceptServerDataCallback(pathString, data)
-               : data;
-    NSArray *events = nil;
-
-    if (tagId != nil) {
-        if (isMerge) {
-            NSDictionary *message = data;
-            FCompoundWrite *taggedChildren =
-                [FCompoundWrite compoundWriteWithValueDictionary:message];
-            events =
-                [self.serverSyncTree applyTaggedQueryMergeAtPath:path
-                                                 changedChildren:taggedChildren
-                                                           tagId:tagId];
-        } else {
-            id<FNode> taggedSnap = [FSnapshotUtilities nodeFrom:data];
-            events =
-                [self.serverSyncTree applyTaggedQueryOverwriteAtPath:path
-                                                             newData:taggedSnap
-                                                               tagId:tagId];
-        }
-    } else if (isMerge) {
-        NSDictionary *message = data;
-        FCompoundWrite *changedChildren =
-            [FCompoundWrite compoundWriteWithValueDictionary:message];
-        events = [self.serverSyncTree applyServerMergeAtPath:path
-                                             changedChildren:changedChildren];
-    } else {
-        id<FNode> snap = [FSnapshotUtilities nodeFrom:data];
-        events = [self.serverSyncTree applyServerOverwriteAtPath:path
-                                                         newData:snap];
-    }
-
-    if ([events count] > 0) {
-        // Since we have a listener outstanding for each transaction, receiving
-        // any events is a proxy for some change having occurred.
-        [self rerunTransactionsForPath:path];
-    }
-
-    [self.eventRaiser raiseEvents:events];
-}
-
-- (void)onRangeMerge:(NSArray *)ranges
-             forPath:(NSString *)pathString
-               tagId:(NSNumber *)tag {
-    FFLog(@"I-RDB038014", @"onRangeMerge: %@ => %@", pathString, ranges);
-
-    // For testing
-    self.rangeMergeUpdateCount++;
-
-    FPath *path = [[FPath alloc] initWith:pathString];
-    NSArray *events;
-    if (tag != nil) {
-        events = [self.serverSyncTree applyTaggedServerRangeMergeAtPath:path
-                                                                updates:ranges
-                                                                  tagId:tag];
-    } else {
-        events = [self.serverSyncTree applyServerRangeMergeAtPath:path
-                                                          updates:ranges];
-    }
-    if (events.count > 0) {
-        // Since we have a listener outstanding for each transaction, receiving
-        // any events is a proxy for some change having occurred.
-        [self rerunTransactionsForPath:path];
-    }
-
-    [self.eventRaiser raiseEvents:events];
-}
-
-- (void)onConnect:(FPersistentConnection *)fpconnection {
-    [self updateInfo:kDotInfoConnected withValue:@YES];
-}
-
-- (void)onDisconnect:(FPersistentConnection *)fpconnection {
-    [self updateInfo:kDotInfoConnected withValue:@NO];
-    [self runOnDisconnectEvents];
-}
-
-- (void)onServerInfoUpdate:(FPersistentConnection *)fpconnection
-                   updates:(NSDictionary *)updates {
-    for (NSString *key in updates) {
-        id val = [updates objectForKey:key];
-        [self updateInfo:key withValue:val];
-    }
-}
-
-- (void)setupNotifications {
-    NSString *const *backgroundConstant = (NSString *const *)dlsym(
-        RTLD_DEFAULT, "UIApplicationDidEnterBackgroundNotification");
-    if (backgroundConstant) {
-        FFLog(@"I-RDB038015", @"Registering for background notification.");
-        [[NSNotificationCenter defaultCenter]
-            addObserver:self
-               selector:@selector(didEnterBackground)
-                   name:*backgroundConstant
-                 object:nil];
-    } else {
-        FFLog(@"I-RDB038016",
-              @"Skipped registering for background notification.");
-    }
-}
-
-- (void)didEnterBackground {
-    if (!self.config.persistenceEnabled)
-        return;
-
-// Targetted compilation is ONLY for testing. UIKit is weak-linked in actual
-// release build.
-#if TARGET_OS_IOS || TARGET_OS_TV
-    // The idea is to wait until any outstanding sets get written to disk. Since
-    // the sets might still be in our dispatch queue, we wait for the dispatch
-    // queue to catch up and for persistence to catch up. This may be
-    // undesirable though.  The dispatch queue might just be processing a bunch
-    // of incoming data or something.  We might want to keep track of whether
-    // there are any unpersisted sets or something.
-    FFLog(@"I-RDB038017",
-          @"Entering background.  Starting background task to finish work.");
-    Class uiApplicationClass = NSClassFromString(@"UIApplication");
-    assert(uiApplicationClass); // If we are here, we should be on iOS and
-                                // UIApplication should be available.
-
-    UIApplication *application = [uiApplicationClass sharedApplication];
-    __block UIBackgroundTaskIdentifier bgTask =
-        [application beginBackgroundTaskWithExpirationHandler:^{
-          [application endBackgroundTask:bgTask];
-        }];
-
-    NSDate *start = [NSDate date];
-    dispatch_async([FIRDatabaseQuery sharedQueue], ^{
-      NSTimeInterval finishTime = [start timeIntervalSinceNow] * -1;
-      FFLog(@"I-RDB038018", @"Background task completed.  Queue time: %f",
-            finishTime);
-      [application endBackgroundTask:bgTask];
-    });
-#endif
-}
-
-#pragma mark -
-#pragma mark Internal methods
-
-/**
- * Applies all the changes stored up in the onDisconnect tree
- */
-- (void)runOnDisconnectEvents {
-    FFLog(@"I-RDB038019", @"Running onDisconnectEvents");
-    NSDictionary *serverValues =
-        [FServerValues generateServerValues:self.serverClock];
-    NSMutableArray *events = [[NSMutableArray alloc] init];
-
-    [self.onDisconnect
-        forEachTreeAtPath:[FPath empty]
-                       do:^(FPath *path, id<FNode> node) {
-                         id<FNode> existing = [self.serverSyncTree
-                             calcCompleteEventCacheAtPath:path
-                                          excludeWriteIds:@[]];
-                         id<FNode> resolved = [FServerValues
-                             resolveDeferredValueSnapshot:node
-                                             withExisting:existing
-                                             serverValues:serverValues];
-                         [events addObjectsFromArray:
-                                     [self.serverSyncTree
-                                         applyServerOverwriteAtPath:path
-                                                            newData:resolved]];
-                         FPath *affectedPath =
-                             [self abortTransactionsAtPath:path
-                                                     error:kFTransactionSet];
-                         [self rerunTransactionsForPath:affectedPath];
-                       }];
-
-    self.onDisconnect = [[FSparseSnapshotTree alloc] init];
-    [self.eventRaiser raiseEvents:events];
-}
-
-- (NSDictionary *)dumpListens {
-    return [self.connection dumpListens];
-}
-
-#pragma mark -
-#pragma mark Transactions
-
-/**
- * Setup the transaction data structures
- */
-- (void)initTransactions {
-    self.transactionQueueTree = [[FTree alloc] init];
-    self.hijackHash = NO;
-    self.loggedTransactionPersistenceWarning = NO;
-}
-
-/**
- * Creates a new transaction, add its to the transactions we're tracking, and
- * sends it to the server if possible
- */
-- (void)startTransactionOnPath:(FPath *)path
-                        update:(fbt_transactionresult_mutabledata)update
-                    onComplete:(fbt_void_nserror_bool_datasnapshot)onComplete
-               withLocalEvents:(BOOL)applyLocally {
-    if (self.config.persistenceEnabled &&
-        !self.loggedTransactionPersistenceWarning) {
-        self.loggedTransactionPersistenceWarning = YES;
-        FFInfo(@"I-RDB038020",
-               @"runTransactionBlock: usage detected while persistence is "
-               @"enabled. Please be aware that transactions "
-               @"*will not* be persisted across app restarts. "
-               @"See "
-               @"https://www.firebase.com/docs/ios/guide/"
-               @"offline-capabilities.html#section-handling-transactions-"
-               @"offline for more details.");
-    }
-
-    FIRDatabaseReference *watchRef =
-        [[FIRDatabaseReference alloc] initWithRepo:self path:path];
-    // make sure we're listening on this node
-    // Note: we can't do this asynchronously. To preserve event ordering, it has
-    // to be done in this block. This is ok, this block is guaranteed to be our
-    // own event loop
-    NSUInteger handle = [[FUtilities LUIDGenerator] integerValue];
-    fbt_void_datasnapshot cb = ^(FIRDataSnapshot *snapshot) {
-    };
-    FValueEventRegistration *registration =
-        [[FValueEventRegistration alloc] initWithRepo:self
-                                               handle:handle
-                                             callback:cb
-                                       cancelCallback:nil];
-    [watchRef.repo addEventRegistration:registration
-                               forQuery:watchRef.querySpec];
-    fbt_void_void unwatcher = ^{
-      [watchRef removeObserverWithHandle:handle];
-    };
-
-    // Save all the data that represents this transaction
-    FTupleTransaction *transaction = [[FTupleTransaction alloc] init];
-    transaction.path = path;
-    transaction.update = update;
-    transaction.onComplete = onComplete;
-    transaction.status = FTransactionInitializing;
-    transaction.order = [FUtilities LUIDGenerator];
-    transaction.applyLocally = applyLocally;
-    transaction.retryCount = 0;
-    transaction.unwatcher = unwatcher;
-    transaction.currentWriteId = nil;
-    transaction.currentInputSnapshot = nil;
-    transaction.currentOutputSnapshotRaw = nil;
-    transaction.currentOutputSnapshotResolved = nil;
-
-    // Run transaction initially
-    id<FNode> currentState = [self latestStateAtPath:path excludeWriteIds:nil];
-    transaction.currentInputSnapshot = currentState;
-    FIRMutableData *mutableCurrent =
-        [[FIRMutableData alloc] initWithNode:currentState];
-    FIRTransactionResult *result = transaction.update(mutableCurrent);
-
-    if (!result.isSuccess) {
-        // Abort the transaction
-        transaction.unwatcher();
-        transaction.currentOutputSnapshotRaw = nil;
-        transaction.currentOutputSnapshotResolved = nil;
-        if (transaction.onComplete) {
-            FIRDatabaseReference *ref =
-                [[FIRDatabaseReference alloc] initWithRepo:self
-                                                      path:transaction.path];
-            FIndexedNode *indexedNode = [FIndexedNode
-                indexedNodeWithNode:transaction.currentInputSnapshot];
-            FIRDataSnapshot *snap =
-                [[FIRDataSnapshot alloc] initWithRef:ref
-                                         indexedNode:indexedNode];
-            [self.eventRaiser raiseCallback:^{
-              transaction.onComplete(nil, NO, snap);
-            }];
-        }
-    } else {
-        // Note: different from js. We don't need to validate, FIRMutableData
-        // does validation. We also don't have to worry about priorities. Just
-        // mark as run and add to queue.
-        transaction.status = FTransactionRun;
-        FTree *queueNode = [self.transactionQueueTree subTree:transaction.path];
-        NSMutableArray *nodeQueue = [queueNode getValue];
-        if (nodeQueue == nil) {
-            nodeQueue = [[NSMutableArray alloc] init];
-        }
-        [nodeQueue addObject:transaction];
-        [queueNode setValue:nodeQueue];
-
-        // Update visibleData and raise events
-        // Note: We intentionally raise events after updating all of our
-        // transaction state, since the user could start new transactions from
-        // the event callbacks
-        NSDictionary *serverValues =
-            [FServerValues generateServerValues:self.serverClock];
-        id<FNode> newValUnresolved = [result.update nodeValue];
-        id<FNode> newVal =
-            [FServerValues resolveDeferredValueSnapshot:newValUnresolved
-                                           withExisting:currentState
-                                           serverValues:serverValues];
-        transaction.currentOutputSnapshotRaw = newValUnresolved;
-        transaction.currentOutputSnapshotResolved = newVal;
-        transaction.currentWriteId =
-            [NSNumber numberWithInteger:[self nextWriteId]];
-
-        NSArray *events = [self.serverSyncTree
-            applyUserOverwriteAtPath:path
-                             newData:newVal
-                             writeId:[transaction.currentWriteId integerValue]
-                           isVisible:transaction.applyLocally];
-        [self.eventRaiser raiseEvents:events];
-
-        [self sendAllReadyTransactions];
-    }
-}
-
-/**
- * @param writeIdsToExclude A specific set to exclude
- */
-- (id<FNode>)latestStateAtPath:(FPath *)path
-               excludeWriteIds:(NSArray *)writeIdsToExclude {
-    id<FNode> latestState =
-        [self.serverSyncTree calcCompleteEventCacheAtPath:path
-                                          excludeWriteIds:writeIdsToExclude];
-    return latestState ? latestState : [FEmptyNode emptyNode];
-}
-
-/**
- * Sends any already-run transactions that aren't waiting for outstanding
- * transactions to complete.
- *
- * Externally, call the version with no arguments.
- * Internally, calls itself recursively with a particular transactionQueueTree
- * node to recurse through the tree
- */
-- (void)sendAllReadyTransactions {
-    FTree *node = self.transactionQueueTree;
-
-    [self pruneCompletedTransactionsBelowNode:node];
-    [self sendReadyTransactionsForTree:node];
-}
-
-- (void)sendReadyTransactionsForTree:(FTree *)node {
-    NSMutableArray *queue = [node getValue];
-    if (queue != nil) {
-        queue = [self buildTransactionQueueAtNode:node];
-        NSAssert([queue count] > 0, @"Sending zero length transaction queue");
-
-        NSUInteger notRunIndex = [queue
-            indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
-              return ((FTupleTransaction *)obj).status != FTransactionRun;
-            }];
-
-        // If they're all run (and not sent), we can send them.  Else, we must
-        // wait.
-        if (notRunIndex == NSNotFound) {
-            [self sendTransactionQueue:queue atPath:node.path];
-        }
-    } else if ([node hasChildren]) {
-        [node forEachChild:^(FTree *child) {
-          [self sendReadyTransactionsForTree:child];
-        }];
-    }
-}
-
-/**
- * Given a list of run transactions, send them to the server and then handle the
- * result (success or failure).
- */
-- (void)sendTransactionQueue:(NSMutableArray *)queue atPath:(FPath *)path {
-    // Mark transactions as sent and bump the retry count
-    NSMutableArray *writeIdsToExclude = [[NSMutableArray alloc] init];
-    for (FTupleTransaction *transaction in queue) {
-        [writeIdsToExclude addObject:transaction.currentWriteId];
-    }
-    id<FNode> latestState = [self latestStateAtPath:path
-                                    excludeWriteIds:writeIdsToExclude];
-    id<FNode> snapToSend = latestState;
-    NSString *latestHash = [latestState dataHash];
-    for (FTupleTransaction *transaction in queue) {
-        NSAssert(
-            transaction.status == FTransactionRun,
-            @"[FRepo sendTransactionQueue:] items in queue should all be run.");
-        FFLog(@"I-RDB038021", @"Transaction at %@ set to SENT",
-              transaction.path);
-        transaction.status = FTransactionSent;
-        transaction.retryCount++;
-        FPath *relativePath = [FPath relativePathFrom:path to:transaction.path];
-        // If we've gotten to this point, the output snapshot must be defined.
-        snapToSend =
-            [snapToSend updateChild:relativePath
-                       withNewChild:transaction.currentOutputSnapshotRaw];
-    }
-
-    id dataToSend = [snapToSend valForExport:YES];
-    NSString *pathToSend = [path description];
-    latestHash = self.hijackHash ? @"badhash" : latestHash;
-
-    // Send the put
-    [self.connection
-             putData:dataToSend
-             forPath:pathToSend
-            withHash:latestHash
-        withCallback:^(NSString *status, NSString *errorReason) {
-          FFLog(@"I-RDB038022", @"Transaction put response: %@ : %@",
-                pathToSend, status);
-
-          NSMutableArray *events = [[NSMutableArray alloc] init];
-          if ([status isEqualToString:kFWPResponseForActionStatusOk]) {
-              // Queue up the callbacks and fire them after cleaning up all of
-              // our transaction state, since the callback could trigger more
-              // transactions or sets.
-              NSMutableArray *callbacks = [[NSMutableArray alloc] init];
-              for (FTupleTransaction *transaction in queue) {
-                  transaction.status = FTransactionCompleted;
-                  [events addObjectsFromArray:
-                              [self.serverSyncTree
-                                  ackUserWriteWithWriteId:
-                                      [transaction.currentWriteId integerValue]
-                                                   revert:NO
-                                                  persist:NO
-                                                    clock:self.serverClock]];
-                  if (transaction.onComplete) {
-                      // We never unset the output snapshot, and given that this
-                      // transaction is complete, it should be set
-                      id<FNode> node =
-                          transaction.currentOutputSnapshotResolved;
-                      FIndexedNode *indexedNode =
-                          [FIndexedNode indexedNodeWithNode:node];
-                      FIRDatabaseReference *ref = [[FIRDatabaseReference alloc]
-                          initWithRepo:self
-                                  path:transaction.path];
-                      FIRDataSnapshot *snapshot =
-                          [[FIRDataSnapshot alloc] initWithRef:ref
-                                                   indexedNode:indexedNode];
-                      fbt_void_void cb = ^{
-                        transaction.onComplete(nil, YES, snapshot);
-                      };
-                      [callbacks addObject:[cb copy]];
-                  }
-                  transaction.unwatcher();
-              }
-
-              // Now remove the completed transactions.
-              [self
-                  pruneCompletedTransactionsBelowNode:[self.transactionQueueTree
-                                                          subTree:path]];
-              // There may be pending transactions that we can now send.
-              [self sendAllReadyTransactions];
-
-              // Finally, trigger onComplete callbacks
-              [self.eventRaiser raiseCallbacks:callbacks];
-          } else {
-              // transactions are no longer sent. Update their status
-              // appropriately.
-              if ([status
-                      isEqualToString:kFWPResponseForActionStatusDataStale]) {
-                  for (FTupleTransaction *transaction in queue) {
-                      if (transaction.status == FTransactionSentNeedsAbort) {
-                          transaction.status = FTransactionNeedsAbort;
-                      } else {
-                          transaction.status = FTransactionRun;
-                      }
-                  }
-              } else {
-                  FFWarn(@"I-RDB038023",
-                         @"runTransactionBlock: at %@ failed: %@", path,
-                         status);
-                  for (FTupleTransaction *transaction in queue) {
-                      transaction.status = FTransactionNeedsAbort;
-                      [transaction setAbortStatus:status reason:errorReason];
-                  }
-              }
-          }
-
-          [self rerunTransactionsForPath:path];
-          [self.eventRaiser raiseEvents:events];
-        }];
-}
-
-/**
- * Finds all transactions dependent on the data at changed Path and reruns them.
- *
- * Should be called any time cached data changes.
- *
- * Return the highest path that was affected by rerunning transactions. This is
- * the path at which events need to be raised for.
- */
-- (FPath *)rerunTransactionsForPath:(FPath *)changedPath {
-    // For the common case that there are no transactions going on, skip all
-    // this!
-    if ([self.transactionQueueTree isEmpty]) {
-        return changedPath;
-    } else {
-        FTree *rootMostTransactionNode =
-            [self getAncestorTransactionNodeForPath:changedPath];
-        FPath *path = rootMostTransactionNode.path;
-
-        NSArray *queue =
-            [self buildTransactionQueueAtNode:rootMostTransactionNode];
-        [self rerunTransactionQueue:queue atPath:path];
-
-        return path;
-    }
-}
-
-/**
- * Does all the work of rerunning transactions (as well as cleans up aborted
- * transactions and whatnot).
- */
-- (void)rerunTransactionQueue:(NSArray *)queue atPath:(FPath *)path {
-    if (queue.count == 0) {
-        return; // nothing to do
-    }
-
-    // Queue up the callbacks and fire them after cleaning up all of our
-    // transaction state, since the callback could trigger more transactions or
-    // sets.
-    NSMutableArray *events = [[NSMutableArray alloc] init];
-    NSMutableArray *callbacks = [[NSMutableArray alloc] init];
-
-    // Ignore, by default, all of the sets in this queue, since we're re-running
-    // all of them. However, we want to include the results of new sets
-    // triggered as part of this re-run, so we don't want to ignore a range,
-    // just these specific sets.
-    NSMutableArray *writeIdsToExclude = [[NSMutableArray alloc] init];
-    for (FTupleTransaction *transaction in queue) {
-        [writeIdsToExclude addObject:transaction.currentWriteId];
-    }
-
-    for (FTupleTransaction *transaction in queue) {
-        FPath *relativePath __unused =
-            [FPath relativePathFrom:path to:transaction.path];
-        BOOL abortTransaction = NO;
-        NSAssert(relativePath != nil, @"[FRepo rerunTransactionsQueue:] "
-                                      @"relativePath should not be null.");
-
-        if (transaction.status == FTransactionNeedsAbort) {
-            abortTransaction = YES;
-            if (![transaction.abortStatus
-                    isEqualToString:kFErrorWriteCanceled]) {
-                NSArray *ackEvents = [self.serverSyncTree
-                    ackUserWriteWithWriteId:[transaction.currentWriteId
-                                                    integerValue]
-                                     revert:YES
-                                    persist:NO
-                                      clock:self.serverClock];
-                [events addObjectsFromArray:ackEvents];
-            }
-        } else if (transaction.status == FTransactionRun) {
-            if (transaction.retryCount >= kFTransactionMaxRetries) {
-                abortTransaction = YES;
-                [transaction setAbortStatus:kFTransactionTooManyRetries
-                                     reason:nil];
-                [events
-                    addObjectsFromArray:
-                        [self.serverSyncTree
-                            ackUserWriteWithWriteId:[transaction.currentWriteId
-                                                            integerValue]
-                                             revert:YES
-                                            persist:NO
-                                              clock:self.serverClock]];
-            } else {
-                // This code reruns a transaction
-                id<FNode> currentNode =
-                    [self latestStateAtPath:transaction.path
-                            excludeWriteIds:writeIdsToExclude];
-                transaction.currentInputSnapshot = currentNode;
-                FIRMutableData *mutableCurrent =
-                    [[FIRMutableData alloc] initWithNode:currentNode];
-                FIRTransactionResult *result =
-                    transaction.update(mutableCurrent);
-                if (result.isSuccess) {
-                    NSNumber *oldWriteId = transaction.currentWriteId;
-                    NSDictionary *serverValues =
-                        [FServerValues generateServerValues:self.serverClock];
-
-                    id<FNode> newVal = [result.update nodeValue];
-                    id<FNode> newValResolved = [FServerValues
-                        resolveDeferredValueSnapshot:newVal
-                                        withExisting:transaction
-                                                         .currentInputSnapshot
-                                        serverValues:serverValues];
-
-                    transaction.currentOutputSnapshotRaw = newVal;
-                    transaction.currentOutputSnapshotResolved = newValResolved;
-
-                    transaction.currentWriteId =
-                        [NSNumber numberWithInteger:[self nextWriteId]];
-                    // Mutates writeIdsToExclude in place
-                    [writeIdsToExclude removeObject:oldWriteId];
-                    [events
-                        addObjectsFromArray:
-                            [self.serverSyncTree
-                                applyUserOverwriteAtPath:transaction.path
-                                                 newData:
-                                                     transaction
-                                                         .currentOutputSnapshotResolved
-                                                 writeId:
-                                                     [transaction.currentWriteId
-                                                             integerValue]
-                                               isVisible:transaction
-                                                             .applyLocally]];
-                    [events addObjectsFromArray:
-                                [self.serverSyncTree
-                                    ackUserWriteWithWriteId:[oldWriteId
-                                                                integerValue]
-                                                     revert:YES
-                                                    persist:NO
-                                                      clock:self.serverClock]];
-                } else {
-                    abortTransaction = YES;
-                    // The user aborted the transaction. JS treats ths as a
-                    // "nodata" abort, but it's not an error, so we don't send
-                    // them an error.
-                    [transaction setAbortStatus:nil reason:nil];
-                    [events
-                        addObjectsFromArray:
-                            [self.serverSyncTree
-                                ackUserWriteWithWriteId:
-                                    [transaction.currentWriteId integerValue]
-                                                 revert:YES
-                                                persist:NO
-                                                  clock:self.serverClock]];
-                }
-            }
-        }
-
-        [self.eventRaiser raiseEvents:events];
-        events = nil;
-
-        if (abortTransaction) {
-            // Abort
-            transaction.status = FTransactionCompleted;
-            transaction.unwatcher();
-            if (transaction.onComplete) {
-                FIRDatabaseReference *ref = [[FIRDatabaseReference alloc]
-                    initWithRepo:self
-                            path:transaction.path];
-                FIndexedNode *lastInput = [FIndexedNode
-                    indexedNodeWithNode:transaction.currentInputSnapshot];
-                FIRDataSnapshot *snap =
-                    [[FIRDataSnapshot alloc] initWithRef:ref
-                                             indexedNode:lastInput];
-                fbt_void_void cb = ^{
-                  // Unlike JS, no need to check for "nodata" because ObjC has
-                  // abortError = nil
-                  transaction.onComplete(transaction.abortError, NO, snap);
-                };
-                [callbacks addObject:[cb copy]];
-            }
-        }
-    }
-
-    // Note: unlike current js client, we don't need to preserve priority. Users
-    // can set priority via FIRMutableData
-
-    // Clean up completed transactions.
-    [self pruneCompletedTransactionsBelowNode:self.transactionQueueTree];
-
-    // Now fire callbacks, now that we're in a good, known state.
-    [self.eventRaiser raiseCallbacks:callbacks];
-
-    // Try to send the transaction result to the server
-    [self sendAllReadyTransactions];
-}
-
-- (FTree *)getAncestorTransactionNodeForPath:(FPath *)path {
-    FTree *transactionNode = self.transactionQueueTree;
-
-    while (![path isEmpty] && [transactionNode getValue] == nil) {
-        NSString *front = [path getFront];
-        transactionNode =
-            [transactionNode subTree:[[FPath alloc] initWith:front]];
-        path = [path popFront];
-    }
-
-    return transactionNode;
-}
-
-- (NSMutableArray *)buildTransactionQueueAtNode:(FTree *)node {
-    NSMutableArray *queue = [[NSMutableArray alloc] init];
-    [self aggregateTransactionQueuesForNode:node andQueue:queue];
-
-    [queue sortUsingComparator:^NSComparisonResult(FTupleTransaction *obj1,
-                                                   FTupleTransaction *obj2) {
-      return [obj1.order compare:obj2.order];
-    }];
-
-    return queue;
-}
-
-- (void)aggregateTransactionQueuesForNode:(FTree *)node
-                                 andQueue:(NSMutableArray *)queue {
-    NSArray *nodeQueue = [node getValue];
-    [queue addObjectsFromArray:nodeQueue];
-
-    [node forEachChild:^(FTree *child) {
-      [self aggregateTransactionQueuesForNode:child andQueue:queue];
-    }];
-}
-
-/**
- * Remove COMPLETED transactions at or below this node in the
- * transactionQueueTree
- */
-- (void)pruneCompletedTransactionsBelowNode:(FTree *)node {
-    NSMutableArray *queue = [node getValue];
-    if (queue != nil) {
-        int i = 0;
-        // remove all of the completed transactions from the queue
-        while (i < queue.count) {
-            FTupleTransaction *transaction = [queue objectAtIndex:i];
-            if (transaction.status == FTransactionCompleted) {
-                [queue removeObjectAtIndex:i];
-            } else {
-                i++;
-            }
-        }
-        if (queue.count > 0) {
-            [node setValue:queue];
-        } else {
-            [node setValue:nil];
-        }
-    }
-
-    [node forEachChildMutationSafe:^(FTree *child) {
-      [self pruneCompletedTransactionsBelowNode:child];
-    }];
-}
-
-/**
- *  Aborts all transactions on ancestors or descendants of the specified path.
- * Called when doing a setValue: or updateChildValues: since we consider them
- * incompatible with transactions
- *
- *  @param path path for which we want to abort related transactions.
- */
-- (FPath *)abortTransactionsAtPath:(FPath *)path error:(NSString *)error {
-    // For the common case that there are no transactions going on, skip all
-    // this!
-    if ([self.transactionQueueTree isEmpty]) {
-        return path;
-    } else {
-        FPath *affectedPath =
-            [self getAncestorTransactionNodeForPath:path].path;
-
-        FTree *transactionNode = [self.transactionQueueTree subTree:path];
-        [transactionNode forEachAncestor:^BOOL(FTree *ancestor) {
-          [self abortTransactionsAtNode:ancestor error:error];
-          return NO;
-        }];
-
-        [self abortTransactionsAtNode:transactionNode error:error];
-
-        [transactionNode forEachDescendant:^(FTree *child) {
-          [self abortTransactionsAtNode:child error:error];
-        }];
-
-        return affectedPath;
-    }
-}
-
-/**
- * Abort transactions stored in this transactions queue node.
- *
- * @param node Node to abort transactions for.
- */
-- (void)abortTransactionsAtNode:(FTree *)node error:(NSString *)error {
-    NSMutableArray *queue = [node getValue];
-    if (queue != nil) {
-
-        // Queue up the callbacks and fire them after cleaning up all of our
-        // transaction state, since can be immediately aborted and removed.
-        NSMutableArray *callbacks = [[NSMutableArray alloc] init];
-
-        // Go through queue. Any already-sent transactions must be marked for
-        // abort, while the unsent ones can be immediately aborted and removed
-        NSMutableArray *events = [[NSMutableArray alloc] init];
-        int lastSent = -1;
-        // Note: all of the sent transactions will be at the front of the queue,
-        // so safe to increment lastSent
-        for (FTupleTransaction *transaction in queue) {
-            if (transaction.status == FTransactionSentNeedsAbort) {
-                // No-op. already marked.
-            } else if (transaction.status == FTransactionSent) {
-                // Mark this transaction for abort when it returns
-                lastSent++;
-                transaction.status = FTransactionSentNeedsAbort;
-                [transaction setAbortStatus:error reason:nil];
-            } else {
-                // we can abort this immediately
-                transaction.unwatcher();
-                if ([error isEqualToString:kFTransactionSet]) {
-                    [events
-                        addObjectsFromArray:
-                            [self.serverSyncTree
-                                ackUserWriteWithWriteId:
-                                    [transaction.currentWriteId integerValue]
-                                                 revert:YES
-                                                persist:NO
-                                                  clock:self.serverClock]];
-                } else {
-                    // If it was cancelled it was already removed from the sync
-                    // tree, no need to ack
-                    NSAssert([error isEqualToString:kFErrorWriteCanceled], nil);
-                }
-
-                if (transaction.onComplete) {
-                    NSError *abortReason = [FUtilities errorForStatus:error
-                                                            andReason:nil];
-                    FIRDataSnapshot *snapshot = nil;
-                    fbt_void_void cb = ^{
-                      transaction.onComplete(abortReason, NO, snapshot);
-                    };
-                    [callbacks addObject:[cb copy]];
-                }
-            }
-        }
-        if (lastSent == -1) {
-            // We're not waiting for any sent transactions. We can clear the
-            // queue.
-            [node setValue:nil];
-        } else {
-            // Remove the transactions we aborted
-            NSRange theRange;
-            theRange.location = lastSent + 1;
-            theRange.length = queue.count - theRange.location;
-            [queue removeObjectsInRange:theRange];
-        }
-
-        // Now fire the callbacks
-        [self.eventRaiser raiseEvents:events];
-        [self.eventRaiser raiseCallbacks:callbacks];
-    }
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepoInfo.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepoInfo.h
deleted file mode 100644
index 46e9b8b..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepoInfo.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@interface FRepoInfo : NSObject <NSCopying>
-
-@property(nonatomic, readonly, strong) NSString *host;
-@property(nonatomic, readonly, strong) NSString *namespace;
-@property(nonatomic, strong) NSString *internalHost;
-@property(nonatomic, readonly) bool secure;
-
-- (id)initWithHost:(NSString *)host
-          isSecure:(bool)secure
-     withNamespace:(NSString *)namespace;
-
-- (NSString *)connectionURLWithLastSessionID:(NSString *)lastSessionID;
-- (NSString *)connectionURL;
-- (void)clearInternalHostCache;
-- (BOOL)isDemoHost;
-- (BOOL)isCustomHost;
-
-- (id)copyWithZone:(NSZone *)zone;
-- (NSUInteger)hash;
-- (BOOL)isEqual:(id)anObject;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepoInfo.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepoInfo.m
deleted file mode 100644
index b2dd2e2..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepoInfo.m
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FRepoInfo.h"
-#import "FConstants.h"
-
-@interface FRepoInfo ()
-
-@property(nonatomic, strong) NSString *domain;
-
-@end
-
-@implementation FRepoInfo
-
-@synthesize namespace;
-@synthesize host;
-@synthesize internalHost;
-@synthesize secure;
-@synthesize domain;
-
-- (id)initWithHost:(NSString *)aHost
-          isSecure:(bool)isSecure
-     withNamespace:(NSString *)aNamespace {
-    self = [super init];
-    if (self) {
-        host = aHost;
-        domain =
-            [host containsString:@"."]
-                ? [host
-                      substringFromIndex:[host rangeOfString:@"."].location + 1]
-                : host;
-        secure = isSecure;
-        namespace = aNamespace;
-
-        // Get cached internal host if it exists
-        NSString *internalHostKey =
-            [NSString stringWithFormat:@"firebase:host:%@", self.host];
-        NSString *cachedInternalHost = [[NSUserDefaults standardUserDefaults]
-            stringForKey:internalHostKey];
-        if (cachedInternalHost != nil) {
-            internalHost = cachedInternalHost;
-        } else {
-            internalHost = self.host;
-        }
-    }
-    return self;
-}
-
-- (NSString *)description {
-    // The namespace is encoded in the hostname, so we can just return this.
-    return [NSString
-        stringWithFormat:@"http%@://%@", (self.secure ? @"s" : @""), self.host];
-}
-
-- (void)setInternalHost:(NSString *)newHost {
-    if (![internalHost isEqualToString:newHost]) {
-        internalHost = newHost;
-
-        // Cache the internal host so we don't need to redirect later on
-        NSString *internalHostKey =
-            [NSString stringWithFormat:@"firebase:host:%@", self.host];
-        NSUserDefaults *cache = [NSUserDefaults standardUserDefaults];
-        [cache setObject:internalHost forKey:internalHostKey];
-        [cache synchronize];
-    }
-}
-
-- (void)clearInternalHostCache {
-    internalHost = self.host;
-
-    // Remove the cached entry
-    NSString *internalHostKey =
-        [NSString stringWithFormat:@"firebase:host:%@", self.host];
-    NSUserDefaults *cache = [NSUserDefaults standardUserDefaults];
-    [cache removeObjectForKey:internalHostKey];
-    [cache synchronize];
-}
-
-- (BOOL)isDemoHost {
-    return [self.domain isEqualToString:@"firebaseio-demo.com"];
-}
-
-- (BOOL)isCustomHost {
-    return ![self.domain isEqualToString:@"firebaseio-demo.com"] &&
-           ![self.domain isEqualToString:@"firebaseio.com"];
-}
-
-- (NSString *)connectionURL {
-    return [self connectionURLWithLastSessionID:nil];
-}
-
-- (NSString *)connectionURLWithLastSessionID:(NSString *)lastSessionID {
-    NSString *scheme;
-    if (self.secure) {
-        scheme = @"wss";
-    } else {
-        scheme = @"ws";
-    }
-    NSString *url =
-        [NSString stringWithFormat:@"%@://%@/.ws?%@=%@&ns=%@", scheme,
-                                   self.internalHost, kWireProtocolVersionParam,
-                                   kWebsocketProtocolVersion, self.namespace];
-
-    if (lastSessionID != nil) {
-        url = [NSString stringWithFormat:@"%@&ls=%@", url, lastSessionID];
-    }
-    return url;
-}
-
-- (id)copyWithZone:(NSZone *)zone;
-{
-    return self; // Immutable
-}
-
-- (NSUInteger)hash {
-    NSUInteger result = host.hash;
-    result = 31 * result + (secure ? 1 : 0);
-    result = 31 * result + namespace.hash;
-    result = 31 * result + host.hash;
-    return result;
-}
-
-- (BOOL)isEqual:(id)anObject {
-    if (![anObject isKindOfClass:[FRepoInfo class]])
-        return NO;
-    FRepoInfo *other = (FRepoInfo *)anObject;
-    return secure == other.secure && [host isEqualToString:other.host] &&
-           [namespace isEqualToString:other.namespace];
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepoManager.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepoManager.h
deleted file mode 100644
index ba8d1fc..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepoManager.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FIRDatabaseConfig.h"
-#import "FRepo.h"
-#import "FRepoInfo.h"
-#import <Foundation/Foundation.h>
-
-@interface FRepoManager : NSObject
-
-+ (FRepo *)getRepo:(FRepoInfo *)repoInfo config:(FIRDatabaseConfig *)config;
-+ (FRepo *)createRepo:(FRepoInfo *)repoInfo
-               config:(FIRDatabaseConfig *)config
-             database:(FIRDatabase *)database;
-+ (void)interruptAll;
-+ (void)interrupt:(FIRDatabaseConfig *)config;
-+ (void)resumeAll;
-+ (void)resume:(FIRDatabaseConfig *)config;
-+ (void)disposeRepos:(FIRDatabaseConfig *)config;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepoManager.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepoManager.m
deleted file mode 100644
index 54ad196..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepoManager.m
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FRepoManager.h"
-#import "FAtomicNumber.h"
-#import "FIRDatabaseConfig_Private.h"
-#import "FIRDatabaseQuery_Private.h"
-#import "FIRDatabase_Private.h"
-#import "FRepo.h"
-#import <FirebaseCore/FIRLogger.h>
-
-@implementation FRepoManager
-
-typedef NSMutableDictionary<NSString *,
-                            NSMutableDictionary<FRepoInfo *, FRepo *> *>
-    FRepoDictionary;
-
-+ (FRepoDictionary *)configs {
-    static dispatch_once_t pred = 0;
-    static FRepoDictionary *configs;
-    dispatch_once(&pred, ^{
-      configs = [NSMutableDictionary dictionary];
-    });
-    return configs;
-}
-
-/**
- * Used for legacy unit tests.  The public API should go through
- * FirebaseDatabase which calls createRepo.
- */
-+ (FRepo *)getRepo:(FRepoInfo *)repoInfo config:(FIRDatabaseConfig *)config {
-    [config freeze];
-    FRepoDictionary *configs = [FRepoManager configs];
-    @synchronized(configs) {
-        NSMutableDictionary<FRepoInfo *, FRepo *> *repos =
-            configs[config.sessionIdentifier];
-        if (!repos || repos[repoInfo] == nil) {
-            // Calling this should create the repo.
-            [FIRDatabase createDatabaseForTests:repoInfo config:config];
-        }
-
-        return configs[config.sessionIdentifier][repoInfo];
-    }
-}
-
-+ (FRepo *)createRepo:(FRepoInfo *)repoInfo
-               config:(FIRDatabaseConfig *)config
-             database:(FIRDatabase *)database {
-    [config freeze];
-    FRepoDictionary *configs = [FRepoManager configs];
-    @synchronized(configs) {
-        NSMutableDictionary<FRepoInfo *, FRepo *> *repos =
-            configs[config.sessionIdentifier];
-        if (!repos) {
-            repos = [NSMutableDictionary dictionary];
-            configs[config.sessionIdentifier] = repos;
-        }
-        FRepo *repo = repos[repoInfo];
-        if (repo == nil) {
-            repo = [[FRepo alloc] initWithRepoInfo:repoInfo
-                                            config:config
-                                          database:database];
-            repos[repoInfo] = repo;
-            return repo;
-        } else {
-            [NSException
-                 raise:@"RepoExists"
-                format:@"createRepo called for Repo that already exists."];
-            return nil;
-        }
-    }
-}
-
-+ (void)interrupt:(FIRDatabaseConfig *)config {
-    dispatch_async([FIRDatabaseQuery sharedQueue], ^{
-      FRepoDictionary *configs = [FRepoManager configs];
-      NSMutableDictionary<FRepoInfo *, FRepo *> *repos =
-          configs[config.sessionIdentifier];
-      for (FRepo *repo in [repos allValues]) {
-          [repo interrupt];
-      }
-    });
-}
-
-+ (void)interruptAll {
-    dispatch_async([FIRDatabaseQuery sharedQueue], ^{
-      FRepoDictionary *configs = [FRepoManager configs];
-      for (NSMutableDictionary<FRepoInfo *, FRepo *> *repos in
-           [configs allValues]) {
-          for (FRepo *repo in [repos allValues]) {
-              [repo interrupt];
-          }
-      }
-    });
-}
-
-+ (void)resume:(FIRDatabaseConfig *)config {
-    dispatch_async([FIRDatabaseQuery sharedQueue], ^{
-      FRepoDictionary *configs = [FRepoManager configs];
-      NSMutableDictionary<FRepoInfo *, FRepo *> *repos =
-          configs[config.sessionIdentifier];
-      for (FRepo *repo in [repos allValues]) {
-          [repo resume];
-      }
-    });
-}
-
-+ (void)resumeAll {
-    dispatch_async([FIRDatabaseQuery sharedQueue], ^{
-      FRepoDictionary *configs = [FRepoManager configs];
-      for (NSMutableDictionary<FRepoInfo *, FRepo *> *repos in
-           [configs allValues]) {
-          for (FRepo *repo in [repos allValues]) {
-              [repo resume];
-          }
-      }
-    });
-}
-
-+ (void)disposeRepos:(FIRDatabaseConfig *)config {
-    // Do this synchronously to make sure we release our references to LevelDB
-    // before returning, allowing LevelDB to close and release its exclusive
-    // locks.
-    dispatch_sync([FIRDatabaseQuery sharedQueue], ^{
-      FFLog(@"I-RDB040001", @"Disposing all repos for Config with name %@",
-            config.sessionIdentifier);
-      NSMutableDictionary *configs = [FRepoManager configs];
-      for (FRepo *repo in [configs[config.sessionIdentifier] allValues]) {
-          [repo dispose];
-      }
-      [configs removeObjectForKey:config.sessionIdentifier];
-    });
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepo_Private.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepo_Private.h
deleted file mode 100644
index 8dc1350..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepo_Private.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FRepo.h"
-#import "FSparseSnapshotTree.h"
-
-@class FSyncTree;
-@class FAtomicNumber;
-@class FEventRaiser;
-@class FSnapshotHolder;
-
-@interface FRepo ()
-
-- (void)runOnDisconnectEvents;
-
-@property(nonatomic, strong) FRepoInfo *repoInfo;
-@property(nonatomic, strong) FPersistentConnection *connection;
-@property(nonatomic, strong) FSnapshotHolder *infoData;
-@property(nonatomic, strong) FSparseSnapshotTree *onDisconnect;
-@property(nonatomic, strong) FEventRaiser *eventRaiser;
-@property(nonatomic, strong) FSyncTree *serverSyncTree;
-
-// For testing.
-@property(nonatomic) long dataUpdateCount;
-@property(nonatomic) long rangeMergeUpdateCount;
-
-- (NSInteger)nextWriteId;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FServerValues.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FServerValues.h
deleted file mode 100644
index c4dc7c5..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FServerValues.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FClock.h"
-#import "FCompoundWrite.h"
-#import "FNode.h"
-#import "FSparseSnapshotTree.h"
-#import "FSyncTree.h"
-#import <Foundation/Foundation.h>
-
-@interface FServerValues : NSObject
-
-+ (NSDictionary *)generateServerValues:(id<FClock>)clock;
-
-+ (FCompoundWrite *)resolveDeferredValueCompoundWrite:(FCompoundWrite *)write
-                                         withSyncTree:(FSyncTree *)tree
-                                               atPath:(FPath *)path
-                                         serverValues:
-                                             (NSDictionary *)serverValues;
-+ (id<FNode>)resolveDeferredValueSnapshot:(id<FNode>)node
-                             withSyncTree:(FSyncTree *)existing
-                                   atPath:(FPath *)path
-                             serverValues:(NSDictionary *)serverValues;
-+ (id<FNode>)resolveDeferredValueSnapshot:(id<FNode>)node
-                             withExisting:(id<FNode>)existing
-                             serverValues:(NSDictionary *)serverValues;
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FServerValues.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FServerValues.m
deleted file mode 100644
index dfda2d6..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FServerValues.m
+++ /dev/null
@@ -1,269 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FServerValues.h"
-#import "FChildrenNode.h"
-#import "FConstants.h"
-#import "FLeafNode.h"
-#import "FSnapshotUtilities.h"
-
-const NSString *kTimestamp = @"timestamp";
-const NSString *kIncrement = @"increment";
-
-BOOL canBeRepresentedAsLong(NSNumber *num) {
-    switch (num.objCType[0]) {
-    case 'f': // float; fallthrough
-    case 'd': // double
-        return NO;
-    case 'L': // unsigned long; fallthrough
-    case 'Q': // unsigned long long; fallthrough
-        // Only use ulong(long) if there isn't an overflow.
-        if (num.unsignedLongLongValue > LONG_MAX) {
-            return NO;
-        }
-    }
-    return YES;
-}
-
-// Running through CompoundWrites for all update paths has been shown to
-// be a 20% pessimization in microbenchmarks. This is because it slows
-// down by O(N) of the write queue length. To eliminate the performance
-// hit, we wrap around existing data of either snapshot or CompoundWrite
-// (allowing us to share code) and read from the CompoundWrite only when/where
-// we need to calculate an incremented value's prior state.
-@protocol ValueProvider <NSObject>
-- (id<ValueProvider>)getChild:(NSString *)pathSegment;
-- (id<FNode>)value;
-@end
-
-@interface DeferredValueProvider : NSObject <ValueProvider>
-- (instancetype)initWithSyncTree:(FSyncTree *)tree atPath:(FPath *)path;
-- (id<ValueProvider>)getChild:(NSString *)pathSegment;
-- (id<FNode>)value;
-@property FPath *path;
-@property FSyncTree *tree;
-@end
-
-@interface ExistingValueProvider : NSObject <ValueProvider>
-- (instancetype)initWithSnapshot:(id<FNode>)snapshot;
-- (id<ValueProvider>)getChild:(NSString *)pathSegment;
-- (id<FNode>)value;
-@property id<FNode> snapshot;
-@end
-
-@implementation DeferredValueProvider
-- (instancetype)initWithSyncTree:(FSyncTree *)tree atPath:(FPath *)path {
-    self.tree = tree;
-    self.path = path;
-    return self;
-}
-
-- (id<ValueProvider>)getChild:(NSString *)pathSegment {
-    FPath *child = [self.path childFromString:pathSegment];
-    return [[DeferredValueProvider alloc] initWithSyncTree:self.tree
-                                                    atPath:child];
-}
-
-- (id<FNode>)value {
-    return [self.tree calcCompleteEventCacheAtPath:self.path
-                                   excludeWriteIds:@[]];
-}
-@end
-
-@implementation ExistingValueProvider
-- (instancetype)initWithSnapshot:(id<FNode>)snapshot {
-    self.snapshot = snapshot;
-    return self;
-}
-
-- (id<ValueProvider>)getChild:(NSString *)pathSegment {
-    return [[ExistingValueProvider alloc]
-        initWithSnapshot:[self.snapshot getImmediateChild:pathSegment]];
-}
-
-- (id<FNode>)value {
-    return self.snapshot;
-}
-@end
-
-@interface FServerValues ()
-+ (id)resolveScalarServerOp:(NSString *)op
-           withServerValues:(NSDictionary *)serverValues;
-+ (id)resolveComplexServerOp:(NSDictionary *)op
-           withValueProvider:(id<ValueProvider>)existing
-                serverValues:(NSDictionary *)serverValues;
-+ (id<FNode>)resolveDeferredValueSnapshot:(id<FNode>)node
-                        withValueProvider:(id<ValueProvider>)existing
-                             serverValues:(NSDictionary *)serverValues;
-
-@end
-
-@implementation FServerValues
-
-+ (NSDictionary *)generateServerValues:(id<FClock>)clock {
-    long long millis = (long long)([clock currentTime] * 1000);
-    return @{kTimestamp : [NSNumber numberWithLongLong:millis]};
-}
-
-+ (id)resolveDeferredValue:(id)val
-              withExisting:(id<ValueProvider>)existing
-              serverValues:(NSDictionary *)serverValues {
-    if (![val isKindOfClass:[NSDictionary class]]) {
-        return val;
-    }
-    NSDictionary *dict = val;
-    id op = dict[kServerValueSubKey];
-
-    if (op == nil) {
-        return val;
-    } else if ([op isKindOfClass:NSString.class]) {
-        return [FServerValues resolveScalarServerOp:op
-                                   withServerValues:serverValues];
-    } else if ([op isKindOfClass:NSDictionary.class]) {
-        return [FServerValues resolveComplexServerOp:op
-                                   withValueProvider:existing
-                                        serverValues:serverValues];
-    }
-    return val;
-}
-
-+ (id)resolveScalarServerOp:(NSString *)op
-           withServerValues:(NSDictionary *)serverValues {
-    return serverValues[op];
-}
-
-+ (id)resolveComplexServerOp:(NSDictionary *)op
-           withValueProvider:(id<ValueProvider>)jitExisting
-                serverValues:(NSDictionary *)serverValues {
-    // Only increment is supported as of now
-    if (op[kIncrement] == nil) {
-        return nil;
-    }
-
-    // Incrementing a non-number sets the value to the incremented amount
-    NSNumber *delta = op[kIncrement];
-    id<FNode> existing = jitExisting.value;
-    if (![existing isLeafNode]) {
-        return delta;
-    }
-    FLeafNode *existingLeaf = existing;
-    if (![existingLeaf.value isKindOfClass:NSNumber.class]) {
-        return delta;
-    }
-
-    NSNumber *existingNum = existingLeaf.value;
-    BOOL incrLong = canBeRepresentedAsLong(delta);
-    BOOL baseLong = canBeRepresentedAsLong(existingNum);
-
-    if (incrLong && baseLong) {
-        long x = delta.longValue;
-        long y = existingNum.longValue;
-        long r = x + y;
-
-        // See "Hacker's Delight" 2-12: Overflow if both arguments have the
-        // opposite sign of the result
-        if (((x ^ r) & (y ^ r)) >= 0) {
-            return @(r);
-        }
-    }
-    return @(delta.doubleValue + existingNum.doubleValue);
-}
-
-+ (FCompoundWrite *)resolveDeferredValueCompoundWrite:(FCompoundWrite *)write
-                                         withSyncTree:(FSyncTree *)tree
-                                               atPath:(FPath *)path
-                                         serverValues:
-                                             (NSDictionary *)serverValues {
-    __block FCompoundWrite *resolved = write;
-    [write enumerateWrites:^(FPath *subPath, id<FNode> node, BOOL *stop) {
-      id<ValueProvider> existing =
-          [[DeferredValueProvider alloc] initWithSyncTree:tree
-                                                   atPath:[path child:subPath]];
-      id<FNode> resolvedNode =
-          [FServerValues resolveDeferredValueSnapshot:node
-                                    withValueProvider:existing
-                                         serverValues:serverValues];
-      // Node actually changed, use pointer inequality here
-      if (resolvedNode != node) {
-          resolved = [resolved addWrite:resolvedNode atPath:subPath];
-      }
-    }];
-    return resolved;
-}
-
-+ (id<FNode>)resolveDeferredValueSnapshot:(id<FNode>)node
-                             withSyncTree:(FSyncTree *)tree
-                                   atPath:(FPath *)path
-                             serverValues:(NSDictionary *)serverValues {
-    id<ValueProvider> jitExisting =
-        [[DeferredValueProvider alloc] initWithSyncTree:tree atPath:path];
-    return [FServerValues resolveDeferredValueSnapshot:node
-                                     withValueProvider:jitExisting
-                                          serverValues:serverValues];
-}
-
-+ (id<FNode>)resolveDeferredValueSnapshot:(id<FNode>)node
-                             withExisting:(id<FNode>)existing
-                             serverValues:(NSDictionary *)serverValues {
-    id<ValueProvider> jitExisting =
-        [[ExistingValueProvider alloc] initWithSnapshot:existing];
-    return [FServerValues resolveDeferredValueSnapshot:node
-                                     withValueProvider:jitExisting
-                                          serverValues:serverValues];
-}
-
-+ (id<FNode>)resolveDeferredValueSnapshot:(id<FNode>)node
-                        withValueProvider:(id<ValueProvider>)existing
-                             serverValues:(NSDictionary *)serverValues {
-    id priorityVal =
-        [FServerValues resolveDeferredValue:[[node getPriority] val]
-                               withExisting:[existing getChild:@".priority"]
-                               serverValues:serverValues];
-    id<FNode> priority = [FSnapshotUtilities nodeFrom:priorityVal];
-
-    if ([node isLeafNode]) {
-        id value = [self resolveDeferredValue:[node val]
-                                 withExisting:existing
-                                 serverValues:serverValues];
-        if (![value isEqual:[node val]] ||
-            ![priority isEqual:[node getPriority]]) {
-            return [[FLeafNode alloc] initWithValue:value
-                                       withPriority:priority];
-        } else {
-            return node;
-        }
-    } else {
-        __block FChildrenNode *newNode = node;
-        if (![priority isEqual:[node getPriority]]) {
-            newNode = [newNode updatePriority:priority];
-        }
-
-        [node enumerateChildrenUsingBlock:^(NSString *childKey,
-                                            id<FNode> childNode, BOOL *stop) {
-          id newChildNode = [FServerValues
-              resolveDeferredValueSnapshot:childNode
-                         withValueProvider:[existing getChild:childKey]
-                              serverValues:serverValues];
-          if (![newChildNode isEqual:childNode]) {
-              newNode = [newNode updateImmediateChild:childKey
-                                         withNewChild:newChildNode];
-          }
-        }];
-        return newNode;
-    }
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSnapshotHolder.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSnapshotHolder.h
deleted file mode 100644
index d682a8e..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSnapshotHolder.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FNode.h"
-#import <Foundation/Foundation.h>
-
-@interface FSnapshotHolder : NSObject
-
-- (id<FNode>)getNode:(FPath *)path;
-- (void)updateSnapshot:(FPath *)path withNewSnapshot:(id<FNode>)newSnapshotNode;
-
-@property(nonatomic, strong) id<FNode> rootNode;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSnapshotHolder.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSnapshotHolder.m
deleted file mode 100644
index 59a7b52..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSnapshotHolder.m
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FSnapshotHolder.h"
-#import "FEmptyNode.h"
-
-@interface FSnapshotHolder ()
-
-@end
-
-@implementation FSnapshotHolder
-
-@synthesize rootNode;
-
-- (id)init {
-    self = [super init];
-    if (self) {
-        self.rootNode = [FEmptyNode emptyNode];
-    }
-    return self;
-}
-
-- (id<FNode>)getNode:(FPath *)path {
-    return [self.rootNode getChild:path];
-}
-
-- (void)updateSnapshot:(FPath *)path
-       withNewSnapshot:(id<FNode>)newSnapshotNode {
-    self.rootNode = [self.rootNode updateChild:path
-                                  withNewChild:newSnapshotNode];
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSparseSnapshotTree.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSparseSnapshotTree.h
deleted file mode 100644
index dab5406..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSparseSnapshotTree.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FNode.h"
-#import "FPath.h"
-#import "FTypedefs_Private.h"
-#import <Foundation/Foundation.h>
-
-@class FSparseSnapshotTree;
-
-typedef void (^fbt_void_nsstring_sstree)(NSString *, FSparseSnapshotTree *);
-
-@interface FSparseSnapshotTree : NSObject
-
-- (id<FNode>)findPath:(FPath *)path;
-- (void)rememberData:(id<FNode>)data onPath:(FPath *)path;
-- (BOOL)forgetPath:(FPath *)path;
-- (void)forEachTreeAtPath:(FPath *)prefixPath do:(fbt_void_path_node)func;
-- (void)forEachChild:(fbt_void_nsstring_sstree)func;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSparseSnapshotTree.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSparseSnapshotTree.m
deleted file mode 100644
index 6219309..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSparseSnapshotTree.m
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FSparseSnapshotTree.h"
-#import "FChildrenNode.h"
-
-@interface FSparseSnapshotTree () {
-    id<FNode> value;
-    NSMutableDictionary *children;
-}
-
-@end
-
-@implementation FSparseSnapshotTree
-
-- (id)init {
-    self = [super init];
-    if (self) {
-        value = nil;
-        children = nil;
-    }
-    return self;
-}
-
-- (id<FNode>)findPath:(FPath *)path {
-    if (value != nil) {
-        return [value getChild:path];
-    } else if (![path isEmpty] && children != nil) {
-        NSString *childKey = [path getFront];
-        path = [path popFront];
-        FSparseSnapshotTree *childTree = children[childKey];
-        if (childTree != nil) {
-            return [childTree findPath:path];
-        } else {
-            return nil;
-        }
-    } else {
-        return nil;
-    }
-}
-
-- (void)rememberData:(id<FNode>)data onPath:(FPath *)path {
-    if ([path isEmpty]) {
-        value = data;
-        children = nil;
-    } else if (value != nil) {
-        value = [value updateChild:path withNewChild:data];
-    } else {
-        if (children == nil) {
-            children = [[NSMutableDictionary alloc] init];
-        }
-
-        NSString *childKey = [path getFront];
-        if (children[childKey] == nil) {
-            children[childKey] = [[FSparseSnapshotTree alloc] init];
-        }
-
-        FSparseSnapshotTree *child = children[childKey];
-        path = [path popFront];
-        [child rememberData:data onPath:path];
-    }
-}
-
-- (BOOL)forgetPath:(FPath *)path {
-    if ([path isEmpty]) {
-        value = nil;
-        children = nil;
-        return YES;
-    } else {
-        if (value != nil) {
-            if ([value isLeafNode]) {
-                // non-empty path at leaf. the path leads to nowhere
-                return NO;
-            } else {
-                id<FNode> tmp = value;
-                value = nil;
-
-                [tmp enumerateChildrenUsingBlock:^(NSString *key,
-                                                   id<FNode> node, BOOL *stop) {
-                  [self rememberData:node onPath:[[FPath alloc] initWith:key]];
-                }];
-
-                // we've cleared out the value and set children. Call ourself
-                // again to hit the next case
-                return [self forgetPath:path];
-            }
-        } else if (children != nil) {
-            NSString *childKey = [path getFront];
-            path = [path popFront];
-
-            if (children[childKey] != nil) {
-                FSparseSnapshotTree *child = children[childKey];
-                BOOL safeToRemove = [child forgetPath:path];
-                if (safeToRemove) {
-                    [children removeObjectForKey:childKey];
-                }
-            }
-
-            if ([children count] == 0) {
-                children = nil;
-                return YES;
-            } else {
-                return NO;
-            }
-        } else {
-            return YES;
-        }
-    }
-}
-
-- (void)forEachTreeAtPath:(FPath *)prefixPath do:(fbt_void_path_node)func {
-    if (value != nil) {
-        func(prefixPath, value);
-    } else {
-        [self forEachChild:^(NSString *key, FSparseSnapshotTree *tree) {
-          FPath *path = [prefixPath childFromString:key];
-          [tree forEachTreeAtPath:path do:func];
-        }];
-    }
-}
-
-- (void)forEachChild:(fbt_void_nsstring_sstree)func {
-    if (children != nil) {
-        for (NSString *key in children) {
-            FSparseSnapshotTree *tree = [children objectForKey:key];
-            func(key, tree);
-        }
-    }
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSyncPoint.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSyncPoint.h
deleted file mode 100644
index a9bd4d9..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSyncPoint.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@protocol FOperation;
-@class FWriteTreeRef;
-@protocol FNode;
-@protocol FEventRegistration;
-@class FQuerySpec;
-@class FChildrenNode;
-@class FTupleRemovedQueriesEvents;
-@class FView;
-@class FPath;
-@class FCacheNode;
-@class FPersistenceManager;
-
-@interface FSyncPoint : NSObject
-
-- (id)initWithPersistenceManager:(FPersistenceManager *)persistence;
-
-- (BOOL)isEmpty;
-
-/**
- * Returns array of FEvent
- */
-- (NSArray *)applyOperation:(id<FOperation>)operation
-                writesCache:(FWriteTreeRef *)writesCache
-                serverCache:(id<FNode>)optCompleteServerCache;
-
-/**
- * Returns array of FEvent
- */
-- (NSArray *)addEventRegistration:(id<FEventRegistration>)eventRegistration
-       forNonExistingViewForQuery:(FQuerySpec *)query
-                      writesCache:(FWriteTreeRef *)writesCache
-                      serverCache:(FCacheNode *)serverCache;
-
-- (NSArray *)addEventRegistration:(id<FEventRegistration>)eventRegistration
-          forExistingViewForQuery:(FQuerySpec *)query;
-
-- (FTupleRemovedQueriesEvents *)removeEventRegistration:
-                                    (id<FEventRegistration>)eventRegistration
-                                               forQuery:(FQuerySpec *)query
-                                            cancelError:(NSError *)cancelError;
-/**
- * Returns array of FViews
- */
-- (NSArray *)queryViews;
-- (id<FNode>)completeServerCacheAtPath:(FPath *)path;
-- (FView *)viewForQuery:(FQuerySpec *)query;
-- (BOOL)viewExistsForQuery:(FQuerySpec *)query;
-- (BOOL)hasCompleteView;
-- (FView *)completeView;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSyncPoint.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSyncPoint.m
deleted file mode 100644
index 6496ae8..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSyncPoint.m
+++ /dev/null
@@ -1,302 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FSyncPoint.h"
-#import "FCacheNode.h"
-#import "FChildrenNode.h"
-#import "FDataEvent.h"
-#import "FEmptyNode.h"
-#import "FEventRegistration.h"
-#import "FIRDatabaseQuery.h"
-#import "FNode.h"
-#import "FOperation.h"
-#import "FOperationSource.h"
-#import "FPath.h"
-#import "FPersistenceManager.h"
-#import "FQueryParams.h"
-#import "FQuerySpec.h"
-#import "FTupleRemovedQueriesEvents.h"
-#import "FView.h"
-#import "FViewCache.h"
-#import "FWriteTreeRef.h"
-
-/**
- * SyncPoint represents a single location in a SyncTree with 1 or more event
- * registrations, meaning we need to maintain 1 or more Views at this location
- * to cache server data and raise appropriate events for server changes and user
- * writes (set, transaction, update).
- *
- * It's responsible for:
- *  - Maintaining the set of 1 or more views necessary at this location (a
- * SyncPoint with 0 views should be removed).
- *  - Proxying user / server operations to the views as appropriate (i.e.
- * applyServerOverwrite, applyUserOverwrite, etc.)
- */
-@interface FSyncPoint ()
-/**
- * The Views being tracked at this location in the tree, stored as a map where
- * the key is a queryParams and the value is the View for that query.
- *
- * NOTE: This list will be quite small (usually 1, but perhaps 2 or 3; any more
- * is an odd use case).
- *
- * Maps NSString -> FView
- */
-@property(nonatomic, strong) NSMutableDictionary *views;
-
-@property(nonatomic, strong) FPersistenceManager *persistenceManager;
-@end
-
-@implementation FSyncPoint
-
-- (id)initWithPersistenceManager:(FPersistenceManager *)persistence {
-    self = [super init];
-    if (self) {
-        self.persistenceManager = persistence;
-        self.views = [[NSMutableDictionary alloc] init];
-    }
-    return self;
-}
-
-- (BOOL)isEmpty {
-    return [self.views count] == 0;
-}
-
-- (NSArray *)applyOperation:(id<FOperation>)operation
-                     toView:(FView *)view
-                writesCache:(FWriteTreeRef *)writesCache
-                serverCache:(id<FNode>)optCompleteServerCache {
-    FViewOperationResult *result = [view applyOperation:operation
-                                            writesCache:writesCache
-                                            serverCache:optCompleteServerCache];
-    if (!view.query.loadsAllData) {
-        NSMutableSet *removed = [NSMutableSet set];
-        NSMutableSet *added = [NSMutableSet set];
-        [result.changes enumerateObjectsUsingBlock:^(
-                            FChange *change, NSUInteger idx, BOOL *stop) {
-          if (change.type == FIRDataEventTypeChildAdded) {
-              [added addObject:change.childKey];
-          } else if (change.type == FIRDataEventTypeChildRemoved) {
-              [removed addObject:change.childKey];
-          }
-        }];
-        if ([removed count] > 0 || [added count] > 0) {
-            [self.persistenceManager
-                updateTrackedQueryKeysWithAddedKeys:added
-                                        removedKeys:removed
-                                           forQuery:view.query];
-        }
-    }
-    return result.events;
-}
-
-- (NSArray *)applyOperation:(id<FOperation>)operation
-                writesCache:(FWriteTreeRef *)writesCache
-                serverCache:(id<FNode>)optCompleteServerCache {
-    FQueryParams *queryParams = operation.source.queryParams;
-    if (queryParams != nil) {
-        FView *view = [self.views objectForKey:queryParams];
-        NSAssert(view != nil, @"SyncTree gave us an op for an invalid query.");
-        return [self applyOperation:operation
-                             toView:view
-                        writesCache:writesCache
-                        serverCache:optCompleteServerCache];
-    } else {
-        NSMutableArray *events = [[NSMutableArray alloc] init];
-        [self.views enumerateKeysAndObjectsUsingBlock:^(
-                        FQueryParams *key, FView *view, BOOL *stop) {
-          NSArray *eventsForView = [self applyOperation:operation
-                                                 toView:view
-                                            writesCache:writesCache
-                                            serverCache:optCompleteServerCache];
-          [events addObjectsFromArray:eventsForView];
-        }];
-        return events;
-    }
-}
-
-/**
- * Add an event callback for the specified query
- * Returns Array of FEvent events to raise.
- */
-- (NSArray *)addEventRegistration:(id<FEventRegistration>)eventRegistration
-       forNonExistingViewForQuery:(FQuerySpec *)query
-                      writesCache:(FWriteTreeRef *)writesCache
-                      serverCache:(FCacheNode *)serverCache {
-    NSAssert(self.views[query.params] == nil, @"Found view for query: %@",
-             query.params);
-    // TODO: make writesCache take flag for complete server node
-    id<FNode> eventCache = [writesCache
-        calculateCompleteEventCacheWithCompleteServerCache:
-            serverCache.isFullyInitialized ? serverCache.node : nil];
-    BOOL eventCacheComplete;
-    if (eventCache != nil) {
-        eventCacheComplete = YES;
-    } else {
-        eventCache = [writesCache
-            calculateCompleteEventChildrenWithCompleteServerChildren:serverCache
-                                                                         .node];
-        eventCacheComplete = NO;
-    }
-
-    FIndexedNode *indexed = [FIndexedNode indexedNodeWithNode:eventCache
-                                                        index:query.index];
-    FCacheNode *eventCacheNode =
-        [[FCacheNode alloc] initWithIndexedNode:indexed
-                             isFullyInitialized:eventCacheComplete
-                                     isFiltered:NO];
-    FViewCache *viewCache =
-        [[FViewCache alloc] initWithEventCache:eventCacheNode
-                                   serverCache:serverCache];
-    FView *view = [[FView alloc] initWithQuery:query
-                              initialViewCache:viewCache];
-    // If this is a non-default query we need to tell persistence our current
-    // view of the data
-    if (!query.loadsAllData) {
-        NSMutableSet *allKeys = [NSMutableSet set];
-        [view.eventCache enumerateChildrenUsingBlock:^(
-                             NSString *key, id<FNode> node, BOOL *stop) {
-          [allKeys addObject:key];
-        }];
-        [self.persistenceManager setTrackedQueryKeys:allKeys forQuery:query];
-    }
-    self.views[query.params] = view;
-    return [self addEventRegistration:eventRegistration
-              forExistingViewForQuery:query];
-}
-
-- (NSArray *)addEventRegistration:(id<FEventRegistration>)eventRegistration
-          forExistingViewForQuery:(FQuerySpec *)query {
-    FView *view = self.views[query.params];
-    NSAssert(view != nil, @"No view for query: %@", query);
-    [view addEventRegistration:eventRegistration];
-    return [view initialEvents:eventRegistration];
-}
-
-/**
- * Remove event callback(s). Return cancelEvents if a cancelError is specified.
- *
- * If query is the default query, we'll check all views for the specified
- * eventRegistration. If eventRegistration is nil, we'll remove all callbacks
- * for the specified view(s).
- *
- * @return FTupleRemovedQueriesEvents removed queries and any cancel events
- */
-- (FTupleRemovedQueriesEvents *)removeEventRegistration:
-                                    (id<FEventRegistration>)eventRegistration
-                                               forQuery:(FQuerySpec *)query
-                                            cancelError:(NSError *)cancelError {
-    NSMutableArray *removedQueries = [[NSMutableArray alloc] init];
-    __block NSMutableArray *cancelEvents = [[NSMutableArray alloc] init];
-    BOOL hadCompleteView = [self hasCompleteView];
-    if ([query isDefault]) {
-        // When you do [ref removeObserverWithHandle:], we search all views for
-        // the registration to remove.
-        [self.views enumerateKeysAndObjectsUsingBlock:^(
-                        FQueryParams *viewQueryParams, FView *view,
-                        BOOL *stop) {
-          [cancelEvents
-              addObjectsFromArray:[view
-                                      removeEventRegistration:eventRegistration
-                                                  cancelError:cancelError]];
-          if ([view isEmpty]) {
-              [self.views removeObjectForKey:viewQueryParams];
-
-              // We'll deal with complete views later
-              if (![view.query loadsAllData]) {
-                  [removedQueries addObject:view.query];
-              }
-          }
-        }];
-    } else {
-        // remove the callback from the specific view
-        FView *view = [self.views objectForKey:query.params];
-        if (view != nil) {
-            [cancelEvents addObjectsFromArray:
-                              [view removeEventRegistration:eventRegistration
-                                                cancelError:cancelError]];
-
-            if ([view isEmpty]) {
-                [self.views removeObjectForKey:query.params];
-
-                // We'll deal with complete views later
-                if (![view.query loadsAllData]) {
-                    [removedQueries addObject:view.query];
-                }
-            }
-        }
-    }
-
-    if (hadCompleteView && ![self hasCompleteView]) {
-        // We removed our last complete view
-        [removedQueries addObject:[FQuerySpec defaultQueryAtPath:query.path]];
-    }
-
-    return [[FTupleRemovedQueriesEvents alloc]
-        initWithRemovedQueries:removedQueries
-                  cancelEvents:cancelEvents];
-}
-
-- (NSArray *)queryViews {
-    __block NSMutableArray *filteredViews = [[NSMutableArray alloc] init];
-
-    [self.views enumerateKeysAndObjectsUsingBlock:^(FQueryParams *key,
-                                                    FView *view, BOOL *stop) {
-      if (![view.query loadsAllData]) {
-          [filteredViews addObject:view];
-      }
-    }];
-
-    return filteredViews;
-}
-
-- (id<FNode>)completeServerCacheAtPath:(FPath *)path {
-    __block id<FNode> serverCache = nil;
-    [self.views enumerateKeysAndObjectsUsingBlock:^(FQueryParams *key,
-                                                    FView *view, BOOL *stop) {
-      serverCache = [view completeServerCacheFor:path];
-      *stop = (serverCache != nil);
-    }];
-    return serverCache;
-}
-
-- (FView *)viewForQuery:(FQuerySpec *)query {
-    return [self.views objectForKey:query.params];
-}
-
-- (BOOL)viewExistsForQuery:(FQuerySpec *)query {
-    return [self viewForQuery:query] != nil;
-}
-
-- (BOOL)hasCompleteView {
-    return [self completeView] != nil;
-}
-
-- (FView *)completeView {
-    __block FView *completeView = nil;
-
-    [self.views enumerateKeysAndObjectsUsingBlock:^(FQueryParams *key,
-                                                    FView *view, BOOL *stop) {
-      if ([view.query loadsAllData]) {
-          completeView = view;
-          *stop = YES;
-      }
-    }];
-
-    return completeView;
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSyncTree.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSyncTree.h
deleted file mode 100644
index ef89774..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSyncTree.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@class FListenProvider;
-@protocol FNode;
-@class FPath;
-@protocol FEventRegistration;
-@protocol FPersistedServerCache;
-@class FQuerySpec;
-@class FCompoundWrite;
-@class FPersistenceManager;
-@class FCompoundHash;
-@protocol FClock;
-
-@protocol FSyncTreeHash <NSObject>
-
-- (NSString *)simpleHash;
-- (FCompoundHash *)compoundHash;
-- (BOOL)includeCompoundHash;
-
-@end
-
-@interface FSyncTree : NSObject
-
-- (id)initWithListenProvider:(FListenProvider *)provider;
-- (id)initWithPersistenceManager:(FPersistenceManager *)persistenceManager
-                  listenProvider:(FListenProvider *)provider;
-
-// These methods all return NSArray of FEvent
-- (NSArray *)applyUserOverwriteAtPath:(FPath *)path
-                              newData:(id<FNode>)newData
-                              writeId:(NSInteger)writeId
-                            isVisible:(BOOL)visible;
-- (NSArray *)applyUserMergeAtPath:(FPath *)path
-                  changedChildren:(FCompoundWrite *)changedChildren
-                          writeId:(NSInteger)writeId;
-- (NSArray *)ackUserWriteWithWriteId:(NSInteger)writeId
-                              revert:(BOOL)revert
-                             persist:(BOOL)persist
-                               clock:(id<FClock>)clock;
-- (NSArray *)applyServerOverwriteAtPath:(FPath *)path
-                                newData:(id<FNode>)newData;
-- (NSArray *)applyServerMergeAtPath:(FPath *)path
-                    changedChildren:(FCompoundWrite *)changedChildren;
-- (NSArray *)applyServerRangeMergeAtPath:(FPath *)path
-                                 updates:(NSArray *)ranges;
-- (NSArray *)applyTaggedQueryOverwriteAtPath:(FPath *)path
-                                     newData:(id<FNode>)newData
-                                       tagId:(NSNumber *)tagId;
-- (NSArray *)applyTaggedQueryMergeAtPath:(FPath *)path
-                         changedChildren:(FCompoundWrite *)changedChildren
-                                   tagId:(NSNumber *)tagId;
-- (NSArray *)applyTaggedServerRangeMergeAtPath:(FPath *)path
-                                       updates:(NSArray *)ranges
-                                         tagId:(NSNumber *)tagId;
-- (NSArray *)addEventRegistration:(id<FEventRegistration>)eventRegistration
-                         forQuery:(FQuerySpec *)query;
-- (NSArray *)removeEventRegistration:(id<FEventRegistration>)eventRegistration
-                            forQuery:(FQuerySpec *)query
-                         cancelError:(NSError *)cancelError;
-- (void)keepQuery:(FQuerySpec *)query synced:(BOOL)keepSynced;
-- (NSArray *)removeAllWrites;
-
-- (id<FNode>)calcCompleteEventCacheAtPath:(FPath *)path
-                          excludeWriteIds:(NSArray *)writeIdsToExclude;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSyncTree.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSyncTree.m
deleted file mode 100644
index 6905302..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSyncTree.m
+++ /dev/null
@@ -1,1042 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FSyncTree.h"
-#import "FAckUserWrite.h"
-#import "FAtomicNumber.h"
-#import "FCacheNode.h"
-#import "FChildrenNode.h"
-#import "FCompoundHash.h"
-#import "FCompoundWrite.h"
-#import "FEmptyNode.h"
-#import "FEventRaiser.h"
-#import "FEventRegistration.h"
-#import "FImmutableTree.h"
-#import "FKeepSyncedEventRegistration.h"
-#import "FListenComplete.h"
-#import "FListenProvider.h"
-#import "FMerge.h"
-#import "FNode.h"
-#import "FOperation.h"
-#import "FOperationSource.h"
-#import "FOverwrite.h"
-#import "FPath.h"
-#import "FPersistenceManager.h"
-#import "FQueryParams.h"
-#import "FQuerySpec.h"
-#import "FRangeMerge.h"
-#import "FServerValues.h"
-#import "FSnapshotHolder.h"
-#import "FSnapshotUtilities.h"
-#import "FSyncPoint.h"
-#import "FTupleRemovedQueriesEvents.h"
-#import "FUtilities.h"
-#import "FView.h"
-#import "FWriteRecord.h"
-#import "FWriteTree.h"
-#import "FWriteTreeRef.h"
-#import <FirebaseCore/FIRLogger.h>
-
-// Size after which we start including the compound hash
-static const NSUInteger kFSizeThresholdForCompoundHash = 1024;
-
-@interface FListenContainer : NSObject <FSyncTreeHash>
-
-@property(nonatomic, strong) FView *view;
-@property(nonatomic, copy) fbt_nsarray_nsstring onComplete;
-
-@end
-
-@implementation FListenContainer
-
-- (instancetype)initWithView:(FView *)view
-                  onComplete:(fbt_nsarray_nsstring)onComplete {
-    self = [super init];
-    if (self != nil) {
-        self->_view = view;
-        self->_onComplete = onComplete;
-    }
-    return self;
-}
-
-- (id<FNode>)serverCache {
-    return self.view.serverCache;
-}
-
-- (FCompoundHash *)compoundHash {
-    return [FCompoundHash fromNode:[self serverCache]];
-}
-
-- (NSString *)simpleHash {
-    return [[self serverCache] dataHash];
-}
-
-- (BOOL)includeCompoundHash {
-    return [FSnapshotUtilities estimateSerializedNodeSize:[self serverCache]] >
-           kFSizeThresholdForCompoundHash;
-}
-
-@end
-
-@interface FSyncTree ()
-
-/**
- * Tree of SyncPoints. There's a SyncPoint at any location that has 1 or more
- * views.
- */
-@property(nonatomic, strong) FImmutableTree *syncPointTree;
-
-/**
- * A tree of all pending user writes (user-initiated set, transactions, updates,
- * etc)
- */
-@property(nonatomic, strong) FWriteTree *pendingWriteTree;
-
-/**
- * Maps tagId -> FTuplePathQueryParams
- */
-@property(nonatomic, strong) NSMutableDictionary *tagToQueryMap;
-@property(nonatomic, strong) NSMutableDictionary *queryToTagMap;
-@property(nonatomic, strong) FListenProvider *listenProvider;
-@property(nonatomic, strong) FPersistenceManager *persistenceManager;
-@property(nonatomic, strong) FAtomicNumber *queryTagCounter;
-@property(nonatomic, strong) NSMutableSet *keepSyncedQueries;
-
-@end
-
-/**
- * SyncTree is the central class for managing event callback registration, data
- * caching, views (query processing), and event generation.  There are typically
- * two SyncTree instances for each Repo, one for the normal Firebase data, and
- * one for the .info data.
- *
- * It has a number of responsibilities, including:
- *  - Tracking all user event callbacks (registered via addEventRegistration:
- * and removeEventRegistration:).
- *  - Applying and caching data changes for user setValue:,
- * runTransactionBlock:, and updateChildValues: calls
- *    (applyUserOverwriteAtPath:, applyUserMergeAtPath:).
- *  - Applying and caching data changes for server data changes
- * (applyServerOverwriteAtPath:, applyServerMergeAtPath:).
- *  - Generating user-facing events for server and user changes (all of the
- * apply* methods return the set of events that need to be raised as a result).
- *  - Maintaining the appropriate set of server listens to ensure we are always
- * subscribed to the correct set of paths and queries to satisfy the current set
- * of user event callbacks (listens are started/stopped using the provided
- * listenProvider).
- *
- * NOTE: Although SyncTree tracks event callbacks and calculates events to
- * raise, the actual events are returned to the caller rather than raised
- * synchronously.
- */
-@implementation FSyncTree
-
-- (id)initWithListenProvider:(FListenProvider *)provider {
-    return [self initWithPersistenceManager:nil listenProvider:provider];
-}
-
-- (id)initWithPersistenceManager:(FPersistenceManager *)persistenceManager
-                  listenProvider:(FListenProvider *)provider {
-    self = [super init];
-    if (self) {
-        self.syncPointTree = [FImmutableTree empty];
-        self.pendingWriteTree = [[FWriteTree alloc] init];
-        self.tagToQueryMap = [[NSMutableDictionary alloc] init];
-        self.queryToTagMap = [[NSMutableDictionary alloc] init];
-        self.listenProvider = provider;
-        self.persistenceManager = persistenceManager;
-        self.queryTagCounter = [[FAtomicNumber alloc] init];
-        self.keepSyncedQueries = [NSMutableSet set];
-    }
-    return self;
-}
-
-#pragma mark -
-#pragma mark Apply Operations
-
-/**
- * Apply data changes for a user-generated setValue: runTransactionBlock:
- * updateChildValues:, etc.
- * @return NSArray of FEvent to raise.
- */
-- (NSArray *)applyUserOverwriteAtPath:(FPath *)path
-                              newData:(id<FNode>)newData
-                              writeId:(NSInteger)writeId
-                            isVisible:(BOOL)visible {
-    // Record pending write
-    [self.pendingWriteTree addOverwriteAtPath:path
-                                      newData:newData
-                                      writeId:writeId
-                                    isVisible:visible];
-    if (!visible) {
-        return @[];
-    } else {
-        FOverwrite *operation =
-            [[FOverwrite alloc] initWithSource:[FOperationSource userInstance]
-                                          path:path
-                                          snap:newData];
-        return [self applyOperationToSyncPoints:operation];
-    }
-}
-
-/**
- * Apply the data from a user-generated updateChildValues: call
- * @return NSArray of FEvent to raise.
- */
-- (NSArray *)applyUserMergeAtPath:(FPath *)path
-                  changedChildren:(FCompoundWrite *)changedChildren
-                          writeId:(NSInteger)writeId {
-    // Record pending merge
-    [self.pendingWriteTree addMergeAtPath:path
-                          changedChildren:changedChildren
-                                  writeId:writeId];
-
-    FMerge *operation =
-        [[FMerge alloc] initWithSource:[FOperationSource userInstance]
-                                  path:path
-                              children:changedChildren];
-    return [self applyOperationToSyncPoints:operation];
-}
-
-/**
- * Acknowledge a pending user write that was previously registered with
- * applyUserOverwriteAtPath: or applyUserMergeAtPath:
- * TODO[offline]: Taking a serverClock here is awkward, but server values are
- * awkward. :-(
- * @return NSArray of FEvent to raise.
- */
-- (NSArray *)ackUserWriteWithWriteId:(NSInteger)writeId
-                              revert:(BOOL)revert
-                             persist:(BOOL)persist
-                               clock:(id<FClock>)clock {
-    FWriteRecord *write = [self.pendingWriteTree writeForId:writeId];
-    BOOL needToReevaluate = [self.pendingWriteTree removeWriteId:writeId];
-    if (write.visible) {
-        if (persist) {
-            [self.persistenceManager removeUserWrite:writeId];
-        }
-        if (!revert) {
-            NSDictionary *serverValues =
-                [FServerValues generateServerValues:clock];
-            if ([write isOverwrite]) {
-                id<FNode> resolvedNode =
-                    [FServerValues resolveDeferredValueSnapshot:write.overwrite
-                                                   withSyncTree:self
-                                                         atPath:write.path
-                                                   serverValues:serverValues];
-                [self.persistenceManager applyUserWrite:resolvedNode
-                                    toServerCacheAtPath:write.path];
-            } else {
-                FCompoundWrite *resolvedMerge = [FServerValues
-                    resolveDeferredValueCompoundWrite:write.merge
-                                         withSyncTree:self
-                                               atPath:write.path
-                                         serverValues:serverValues];
-                [self.persistenceManager applyUserMerge:resolvedMerge
-                                    toServerCacheAtPath:write.path];
-            }
-        }
-    }
-    if (!needToReevaluate) {
-        return @[];
-    } else {
-        __block FImmutableTree *affectedTree = [FImmutableTree empty];
-        if (write.isOverwrite) {
-            affectedTree = [affectedTree setValue:@YES atPath:[FPath empty]];
-        } else {
-            [write.merge
-                enumerateWrites:^(FPath *path, id<FNode> node, BOOL *stop) {
-                  affectedTree = [affectedTree setValue:@YES atPath:path];
-                }];
-        }
-        FAckUserWrite *operation =
-            [[FAckUserWrite alloc] initWithPath:write.path
-                                   affectedTree:affectedTree
-                                         revert:revert];
-        return [self applyOperationToSyncPoints:operation];
-    }
-}
-
-/**
- * Apply new server data for the specified path
- * @return NSArray of FEvent to raise.
- */
-- (NSArray *)applyServerOverwriteAtPath:(FPath *)path
-                                newData:(id<FNode>)newData {
-    [self.persistenceManager
-        updateServerCacheWithNode:newData
-                         forQuery:[FQuerySpec defaultQueryAtPath:path]];
-    FOverwrite *operation =
-        [[FOverwrite alloc] initWithSource:[FOperationSource serverInstance]
-                                      path:path
-                                      snap:newData];
-    return [self applyOperationToSyncPoints:operation];
-}
-
-/**
- * Applied new server data to be merged in at the specified path
- * @return NSArray of FEvent to raise.
- */
-- (NSArray *)applyServerMergeAtPath:(FPath *)path
-                    changedChildren:(FCompoundWrite *)changedChildren {
-    [self.persistenceManager updateServerCacheWithMerge:changedChildren
-                                                 atPath:path];
-    FMerge *operation =
-        [[FMerge alloc] initWithSource:[FOperationSource serverInstance]
-                                  path:path
-                              children:changedChildren];
-    return [self applyOperationToSyncPoints:operation];
-}
-
-- (NSArray *)applyServerRangeMergeAtPath:(FPath *)path
-                                 updates:(NSArray *)ranges {
-    FSyncPoint *syncPoint = [self.syncPointTree valueAtPath:path];
-    if (syncPoint == nil) {
-        // Removed view, so it's safe to just ignore this update
-        return @[];
-    } else {
-        // This could be for any "complete" (unfiltered) view, and if there is
-        // more than one complete view, they should each have the same cache so
-        // it doesn't matter which one we use.
-        FView *view = [syncPoint completeView];
-        if (view != nil) {
-            id<FNode> serverNode = [view serverCache];
-            for (FRangeMerge *merge in ranges) {
-                serverNode = [merge applyToNode:serverNode];
-            }
-            return [self applyServerOverwriteAtPath:path newData:serverNode];
-        } else {
-            // There doesn't exist a view for this update, so it was removed and
-            // it's safe to just ignore this range merge
-            return @[];
-        }
-    }
-}
-
-/**
- * Apply a listen complete to a path
- * @return NSArray of FEvent to raise.
- */
-- (NSArray *)applyListenCompleteAtPath:(FPath *)path {
-    [self.persistenceManager
-        setQueryComplete:[FQuerySpec defaultQueryAtPath:path]];
-    id<FOperation> operation = [[FListenComplete alloc]
-        initWithSource:[FOperationSource serverInstance]
-                  path:path];
-    return [self applyOperationToSyncPoints:operation];
-}
-
-/**
- * Apply a listen complete to a path
- * @return NSArray of FEvent to raise.
- */
-- (NSArray *)applyTaggedListenCompleteAtPath:(FPath *)path
-                                       tagId:(NSNumber *)tagId {
-    FQuerySpec *query = [self queryForTag:tagId];
-    if (query != nil) {
-        [self.persistenceManager setQueryComplete:query];
-        FPath *relativePath = [FPath relativePathFrom:query.path to:path];
-        id<FOperation> op = [[FListenComplete alloc]
-            initWithSource:[FOperationSource forServerTaggedQuery:query.params]
-                      path:relativePath];
-        return [self applyTaggedOperation:op atPath:query.path];
-    } else {
-        // We've already removed the query. No big deal, ignore the update.
-        return @[];
-    }
-}
-
-/**
- * Internal helper method to apply tagged operation
- */
-- (NSArray *)applyTaggedOperation:(id<FOperation>)operation
-                           atPath:(FPath *)path {
-    FSyncPoint *syncPoint = [self.syncPointTree valueAtPath:path];
-    NSAssert(syncPoint != nil,
-             @"Missing sync point for query tag that we're tracking.");
-    FWriteTreeRef *writesCache =
-        [self.pendingWriteTree childWritesForPath:path];
-    return [syncPoint applyOperation:operation
-                         writesCache:writesCache
-                         serverCache:nil];
-}
-
-/**
- * Apply new server data for the specified tagged query
- * @return NSArray of FEvent to raise.
- */
-- (NSArray *)applyTaggedQueryOverwriteAtPath:(FPath *)path
-                                     newData:(id<FNode>)newData
-                                       tagId:(NSNumber *)tagId {
-    FQuerySpec *query = [self queryForTag:tagId];
-    if (query != nil) {
-        FPath *relativePath = [FPath relativePathFrom:query.path to:path];
-        FQuerySpec *queryToOverwrite =
-            relativePath.isEmpty ? query : [FQuerySpec defaultQueryAtPath:path];
-        [self.persistenceManager updateServerCacheWithNode:newData
-                                                  forQuery:queryToOverwrite];
-        FOverwrite *operation = [[FOverwrite alloc]
-            initWithSource:[FOperationSource forServerTaggedQuery:query.params]
-                      path:relativePath
-                      snap:newData];
-        return [self applyTaggedOperation:operation atPath:query.path];
-    } else {
-        // Query must have been removed already
-        return @[];
-    }
-}
-
-/**
- * Apply server data to be merged in for the specified tagged query
- * @return NSArray of FEvent to raise.
- */
-- (NSArray *)applyTaggedQueryMergeAtPath:(FPath *)path
-                         changedChildren:(FCompoundWrite *)changedChildren
-                                   tagId:(NSNumber *)tagId {
-    FQuerySpec *query = [self queryForTag:tagId];
-    if (query != nil) {
-        FPath *relativePath = [FPath relativePathFrom:query.path to:path];
-        [self.persistenceManager updateServerCacheWithMerge:changedChildren
-                                                     atPath:path];
-        FMerge *operation = [[FMerge alloc]
-            initWithSource:[FOperationSource forServerTaggedQuery:query.params]
-                      path:relativePath
-                  children:changedChildren];
-        return [self applyTaggedOperation:operation atPath:query.path];
-    } else {
-        // We've already removed the query. No big deal, ignore the update.
-        return @[];
-    }
-}
-
-- (NSArray *)applyTaggedServerRangeMergeAtPath:(FPath *)path
-                                       updates:(NSArray *)ranges
-                                         tagId:(NSNumber *)tagId {
-    FQuerySpec *query = [self queryForTag:tagId];
-    if (query != nil) {
-        NSAssert([path isEqual:query.path],
-                 @"Tagged update path and query path must match");
-        FSyncPoint *syncPoint = [self.syncPointTree valueAtPath:path];
-        NSAssert(syncPoint != nil,
-                 @"Missing sync point for query tag that we're tracking.");
-        FView *view = [syncPoint viewForQuery:query];
-        NSAssert(view != nil,
-                 @"Missing view for query tag that we're tracking");
-        id<FNode> serverNode = [view serverCache];
-        for (FRangeMerge *merge in ranges) {
-            serverNode = [merge applyToNode:serverNode];
-        }
-        return [self applyTaggedQueryOverwriteAtPath:path
-                                             newData:serverNode
-                                               tagId:tagId];
-    } else {
-        // We've already removed the query. No big deal, ignore the update.
-        return @[];
-    }
-}
-
-/**
- * Add an event callback for the specified query
- * @return NSArray of FEvent to raise.
- */
-- (NSArray *)addEventRegistration:(id<FEventRegistration>)eventRegistration
-                         forQuery:(FQuerySpec *)query {
-    FPath *path = query.path;
-
-    __block BOOL foundAncestorDefaultView = NO;
-    [self.syncPointTree
-        forEachOnPath:query.path
-           whileBlock:^BOOL(FPath *pathToSyncPoint, FSyncPoint *syncPoint) {
-             foundAncestorDefaultView =
-                 foundAncestorDefaultView || [syncPoint hasCompleteView];
-             return !foundAncestorDefaultView;
-           }];
-
-    [self.persistenceManager setQueryActive:query];
-
-    FSyncPoint *syncPoint = [self.syncPointTree valueAtPath:path];
-    if (syncPoint == nil) {
-        syncPoint = [[FSyncPoint alloc]
-            initWithPersistenceManager:self.persistenceManager];
-        self.syncPointTree = [self.syncPointTree setValue:syncPoint
-                                                   atPath:path];
-    }
-
-    BOOL viewAlreadyExists = [syncPoint viewExistsForQuery:query];
-    NSArray *events;
-    if (viewAlreadyExists) {
-        events = [syncPoint addEventRegistration:eventRegistration
-                         forExistingViewForQuery:query];
-    } else {
-        if (![query loadsAllData]) {
-            // We need to track a tag for this query
-            NSAssert(self.queryToTagMap[query] == nil,
-                     @"View does not exist, but we have a tag");
-            NSNumber *tagId = [self.queryTagCounter getAndIncrement];
-            self.queryToTagMap[query] = tagId;
-            self.tagToQueryMap[tagId] = query;
-        }
-
-        FWriteTreeRef *writesCache =
-            [self.pendingWriteTree childWritesForPath:path];
-        FCacheNode *serverCache = [self serverCacheForQuery:query];
-        events = [syncPoint addEventRegistration:eventRegistration
-                      forNonExistingViewForQuery:query
-                                     writesCache:writesCache
-                                     serverCache:serverCache];
-
-        // There was no view and no default listen
-        if (!foundAncestorDefaultView) {
-            FView *view = [syncPoint viewForQuery:query];
-            NSMutableArray *mutableEvents = [events mutableCopy];
-            [mutableEvents
-                addObjectsFromArray:[self setupListenerOnQuery:query
-                                                          view:view]];
-            events = mutableEvents;
-        }
-    }
-
-    return events;
-}
-
-- (FCacheNode *)serverCacheForQuery:(FQuerySpec *)query {
-    __block id<FNode> serverCacheNode = nil;
-
-    [self.syncPointTree
-        forEachOnPath:query.path
-           whileBlock:^BOOL(FPath *pathToSyncPoint, FSyncPoint *syncPoint) {
-             FPath *relativePath = [FPath relativePathFrom:pathToSyncPoint
-                                                        to:query.path];
-             serverCacheNode =
-                 [syncPoint completeServerCacheAtPath:relativePath];
-             return serverCacheNode == nil;
-           }];
-
-    FCacheNode *serverCache;
-    if (serverCacheNode != nil) {
-        FIndexedNode *indexed =
-            [FIndexedNode indexedNodeWithNode:serverCacheNode
-                                        index:query.index];
-        serverCache = [[FCacheNode alloc] initWithIndexedNode:indexed
-                                           isFullyInitialized:YES
-                                                   isFiltered:NO];
-    } else {
-        FCacheNode *persistenceServerCache =
-            [self.persistenceManager serverCacheForQuery:query];
-        if (persistenceServerCache.isFullyInitialized) {
-            serverCache = persistenceServerCache;
-        } else {
-            serverCacheNode = [FEmptyNode emptyNode];
-
-            FImmutableTree *subtree =
-                [self.syncPointTree subtreeAtPath:query.path];
-            [subtree
-                forEachChild:^(NSString *childKey, FSyncPoint *childSyncPoint) {
-                  id<FNode> completeCache =
-                      [childSyncPoint completeServerCacheAtPath:[FPath empty]];
-                  if (completeCache) {
-                      serverCacheNode =
-                          [serverCacheNode updateImmediateChild:childKey
-                                                   withNewChild:completeCache];
-                  }
-                }];
-            // Fill the node with any available children we have
-            [persistenceServerCache.node
-                enumerateChildrenUsingBlock:^(NSString *key, id<FNode> node,
-                                              BOOL *stop) {
-                  if (![serverCacheNode hasChild:key]) {
-                      serverCacheNode =
-                          [serverCacheNode updateImmediateChild:key
-                                                   withNewChild:node];
-                  }
-                }];
-            FIndexedNode *indexed =
-                [FIndexedNode indexedNodeWithNode:serverCacheNode
-                                            index:query.index];
-            serverCache = [[FCacheNode alloc] initWithIndexedNode:indexed
-                                               isFullyInitialized:NO
-                                                       isFiltered:NO];
-        }
-    }
-
-    return serverCache;
-}
-
-/**
- * Remove event callback(s).
- *
- * If query is the default query, we'll check all queries for the specified
- * eventRegistration. If eventRegistration is null, we'll remove all callbacks
- * for the specified query/queries.
- *
- * @param eventRegistration if nil, all callbacks are removed
- * @param cancelError If provided, appropriate cancel events will be returned
- * @return NSArray of FEvent to raise.
- */
-- (NSArray *)removeEventRegistration:(id<FEventRegistration>)eventRegistration
-                            forQuery:(FQuerySpec *)query
-                         cancelError:(NSError *)cancelError {
-    // Find the syncPoint first. Then deal with whether or not it has matching
-    // listeners
-    FPath *path = query.path;
-    FSyncPoint *maybeSyncPoint = [self.syncPointTree valueAtPath:path];
-    NSArray *cancelEvents = @[];
-
-    // A removal on a default query affects all queries at that location. A
-    // removal on an indexed query, even one without other query constraints,
-    // does *not* affect all queries at that location. So this check must be for
-    // 'default', and not loadsAllData:
-    if (maybeSyncPoint &&
-        ([query isDefault] || [maybeSyncPoint viewExistsForQuery:query])) {
-        FTupleRemovedQueriesEvents *removedAndEvents =
-            [maybeSyncPoint removeEventRegistration:eventRegistration
-                                           forQuery:query
-                                        cancelError:cancelError];
-        if ([maybeSyncPoint isEmpty]) {
-            self.syncPointTree = [self.syncPointTree removeValueAtPath:path];
-        }
-        NSArray *removed = removedAndEvents.removedQueries;
-        cancelEvents = removedAndEvents.cancelEvents;
-
-        // We may have just removed one of many listeners and can short-circuit
-        // this whole process We may also not have removed a default listener,
-        // in which case all of the descendant listeners should already be
-        // properly set up.
-        //
-        // Since indexed queries can shadow if they don't have other query
-        // constraints, check for loadsAllData: instead of isDefault:
-        NSUInteger defaultQueryIndex = [removed
-            indexOfObjectPassingTest:^BOOL(FQuerySpec *q, NSUInteger idx,
-                                           BOOL *stop) {
-              return [q loadsAllData];
-            }];
-        BOOL removingDefault = defaultQueryIndex != NSNotFound;
-        [removed enumerateObjectsUsingBlock:^(FQuerySpec *query, NSUInteger idx,
-                                              BOOL *stop) {
-          [self.persistenceManager setQueryInactive:query];
-        }];
-        NSNumber *covered = [self.syncPointTree
-               findOnPath:path
-            andApplyBlock:^id(FPath *relativePath,
-                              FSyncPoint *parentSyncPoint) {
-              return
-                  [NSNumber numberWithBool:[parentSyncPoint hasCompleteView]];
-            }];
-
-        if (removingDefault && ![covered boolValue]) {
-            FImmutableTree *subtree = [self.syncPointTree subtreeAtPath:path];
-            // There are potentially child listeners. Determine what if any
-            // listens we need to send before executing the removal
-            if (![subtree isEmpty]) {
-                // We need to fold over our subtree and collect the listeners to
-                // send
-                NSArray *newViews =
-                    [self collectDistinctViewsForSubTree:subtree];
-
-                // Ok, we've collected all the listens we need. Set them up.
-                [newViews enumerateObjectsUsingBlock:^(
-                              FView *view, NSUInteger idx, BOOL *stop) {
-                  FQuerySpec *newQuery = view.query;
-                  FListenContainer *listenContainer =
-                      [self createListenerForView:view];
-                  self.listenProvider.startListening(
-                      [self queryForListening:newQuery],
-                      [self tagForQuery:newQuery], listenContainer,
-                      listenContainer.onComplete);
-                }];
-            } else {
-                // There's nothing below us, so nothing we need to start
-                // listening on
-            }
-        }
-
-        // If we removed anything and we're not covered by a higher up listen,
-        // we need to stop listening on this query. The above block has us
-        // covered in terms of making sure we're set up on listens lower in the
-        // tree. Also, note that if we have a cancelError, it's already been
-        // removed at the provider level.
-        if (![covered boolValue] && [removed count] > 0 && cancelError == nil) {
-            // If we removed a default, then we weren't listening on any of the
-            // other queries here. Just cancel the one default. Otherwise, we
-            // need to iterate through and cancel each individual query
-            if (removingDefault) {
-                // We don't tag default listeners
-                self.listenProvider.stopListening(
-                    [self queryForListening:query], nil);
-            } else {
-                [removed
-                    enumerateObjectsUsingBlock:^(FQuerySpec *queryToRemove,
-                                                 NSUInteger idx, BOOL *stop) {
-                      NSNumber *tagToRemove =
-                          [self.queryToTagMap objectForKey:queryToRemove];
-                      self.listenProvider.stopListening(
-                          [self queryForListening:queryToRemove], tagToRemove);
-                    }];
-            }
-        }
-        // Now, clear all the tags we're tracking for the removed listens.
-        [self removeTags:removed];
-    } else {
-        // No-op, this listener must've been already removed
-    }
-    return cancelEvents;
-}
-
-- (void)keepQuery:(FQuerySpec *)query synced:(BOOL)keepSynced {
-    // Only do something if we actually need to add/remove an event registration
-    if (keepSynced && ![self.keepSyncedQueries containsObject:query]) {
-        [self addEventRegistration:[FKeepSyncedEventRegistration instance]
-                          forQuery:query];
-        [self.keepSyncedQueries addObject:query];
-    } else if (!keepSynced && [self.keepSyncedQueries containsObject:query]) {
-        [self removeEventRegistration:[FKeepSyncedEventRegistration instance]
-                             forQuery:query
-                          cancelError:nil];
-        [self.keepSyncedQueries removeObject:query];
-    }
-}
-
-- (NSArray *)removeAllWrites {
-    [self.persistenceManager removeAllUserWrites];
-    NSArray *removedWrites = [self.pendingWriteTree removeAllWrites];
-    if (removedWrites.count > 0) {
-        FImmutableTree *affectedTree =
-            [[FImmutableTree empty] setValue:@YES atPath:[FPath empty]];
-        return [self applyOperationToSyncPoints:[[FAckUserWrite alloc]
-                                                    initWithPath:[FPath empty]
-                                                    affectedTree:affectedTree
-                                                          revert:YES]];
-    } else {
-        return @[];
-    }
-}
-
-/**
- * Returns a complete cache, if we have one, of the data at a particular path.
- * The location must have a listener above it, but as this is only used by
- * transaction code, that should always be the case anyways.
- *
- * Note: this method will *include* hidden writes from transaction with
- * applyLocally set to false.
- * @param path The path to the data we want
- * @param writeIdsToExclude A specific set to be excluded
- */
-- (id<FNode>)calcCompleteEventCacheAtPath:(FPath *)path
-                          excludeWriteIds:(NSArray *)writeIdsToExclude {
-    BOOL includeHiddenSets = YES;
-    FWriteTree *writeTree = self.pendingWriteTree;
-    id<FNode> serverCache = [self.syncPointTree
-           findOnPath:path
-        andApplyBlock:^id<FNode>(FPath *pathSoFar, FSyncPoint *syncPoint) {
-          FPath *relativePath = [FPath relativePathFrom:pathSoFar to:path];
-          id<FNode> serverCache =
-              [syncPoint completeServerCacheAtPath:relativePath];
-          if (serverCache) {
-              return serverCache;
-          } else {
-              return nil;
-          }
-        }];
-    return [writeTree calculateCompleteEventCacheAtPath:path
-                                    completeServerCache:serverCache
-                                        excludeWriteIds:writeIdsToExclude
-                                    includeHiddenWrites:includeHiddenSets];
-}
-
-#pragma mark -
-#pragma mark Private Methods
-/**
- * This collapses multiple unfiltered views into a single view, since we only
- * need a single listener for them.
- * @return NSArray of FView
- */
-- (NSArray *)collectDistinctViewsForSubTree:(FImmutableTree *)subtree {
-    return [subtree foldWithBlock:^NSArray *(FPath *relativePath,
-                                             FSyncPoint *maybeChildSyncPoint,
-                                             NSDictionary *childMap) {
-      if (maybeChildSyncPoint && [maybeChildSyncPoint hasCompleteView]) {
-          FView *completeView = [maybeChildSyncPoint completeView];
-          return @[ completeView ];
-      } else {
-          // No complete view here, flatten any deeper listens into an array
-          NSMutableArray *views = [[NSMutableArray alloc] init];
-          if (maybeChildSyncPoint) {
-              views = [[maybeChildSyncPoint queryViews] mutableCopy];
-          }
-          [childMap enumerateKeysAndObjectsUsingBlock:^(
-                        NSString *childKey, NSArray *childViews, BOOL *stop) {
-            [views addObjectsFromArray:childViews];
-          }];
-          return views;
-      }
-    }];
-}
-
-/**
- * @param queries NSArray of FQuerySpec
- */
-- (void)removeTags:(NSArray *)queries {
-    [queries enumerateObjectsUsingBlock:^(FQuerySpec *removedQuery,
-                                          NSUInteger idx, BOOL *stop) {
-      if (![removedQuery loadsAllData]) {
-          // We should have a tag for this
-          NSNumber *removedQueryTag = self.queryToTagMap[removedQuery];
-          [self.queryToTagMap removeObjectForKey:removedQuery];
-          [self.tagToQueryMap removeObjectForKey:removedQueryTag];
-      }
-    }];
-}
-
-- (FQuerySpec *)queryForListening:(FQuerySpec *)query {
-    if (query.loadsAllData && !query.isDefault) {
-        // We treat queries that load all data as default queries
-        return [FQuerySpec defaultQueryAtPath:query.path];
-    } else {
-        return query;
-    }
-}
-
-/**
- * For a given new listen, manage the de-duplication of outstanding
- * subscriptions.
- * @return NSArray of FEvent events to support synchronous data sources
- */
-- (NSArray *)setupListenerOnQuery:(FQuerySpec *)query view:(FView *)view {
-    FPath *path = query.path;
-    NSNumber *tagId = [self tagForQuery:query];
-    FListenContainer *listenContainer = [self createListenerForView:view];
-
-    NSArray *events = self.listenProvider.startListening(
-        [self queryForListening:query], tagId, listenContainer,
-        listenContainer.onComplete);
-
-    FImmutableTree *subtree = [self.syncPointTree subtreeAtPath:path];
-    // The root of this subtree has our query. We're here because we definitely
-    // need to send a listen for that, but we may need to shadow other listens
-    // as well.
-    if (tagId != nil) {
-        NSAssert(![subtree.value hasCompleteView],
-                 @"If we're adding a query, it shouldn't be shadowed");
-    } else {
-        // Shadow everything at or below this location, this is a default
-        // listener.
-        NSArray *queriesToStop =
-            [subtree foldWithBlock:^id(FPath *relativePath,
-                                       FSyncPoint *maybeChildSyncPoint,
-                                       NSDictionary *childMap) {
-              if (![relativePath isEmpty] && maybeChildSyncPoint != nil &&
-                  [maybeChildSyncPoint hasCompleteView]) {
-                  return @[ [maybeChildSyncPoint completeView].query ];
-              } else {
-                  // No default listener here, flatten any deeper queries into
-                  // an array
-                  NSMutableArray *queries = [[NSMutableArray alloc] init];
-                  if (maybeChildSyncPoint != nil) {
-                      for (FView *view in [maybeChildSyncPoint queryViews]) {
-                          [queries addObject:view.query];
-                      }
-                  }
-                  [childMap
-                      enumerateKeysAndObjectsUsingBlock:^(
-                          NSString *key, NSArray *childQueries, BOOL *stop) {
-                        [queries addObjectsFromArray:childQueries];
-                      }];
-                  return queries;
-              }
-            }];
-        for (FQuerySpec *queryToStop in queriesToStop) {
-            self.listenProvider.stopListening(
-                [self queryForListening:queryToStop],
-                [self tagForQuery:queryToStop]);
-        }
-    }
-    return events;
-}
-
-- (FListenContainer *)createListenerForView:(FView *)view {
-    FQuerySpec *query = view.query;
-    NSNumber *tagId = [self tagForQuery:query];
-
-    FListenContainer *listenContainer = [[FListenContainer alloc]
-        initWithView:view
-          onComplete:^(NSString *status) {
-            if ([status isEqualToString:@"ok"]) {
-                if (tagId != nil) {
-                    return [self applyTaggedListenCompleteAtPath:query.path
-                                                           tagId:tagId];
-                } else {
-                    return [self applyListenCompleteAtPath:query.path];
-                }
-            } else {
-                // If a listen failed, kill all of the listeners here, not just
-                // the one that triggered the error. Note that this may need to
-                // be scoped to just this listener if we change permissions on
-                // filtered children
-                NSError *error = [FUtilities errorForStatus:status
-                                                  andReason:nil];
-                FFWarn(@"I-RDB038012", @"Listener at %@ failed: %@", query.path,
-                       status);
-                return [self removeEventRegistration:nil
-                                            forQuery:query
-                                         cancelError:error];
-            }
-          }];
-
-    return listenContainer;
-}
-
-/**
- * @return The query associated with the given tag, if we have one
- */
-- (FQuerySpec *)queryForTag:(NSNumber *)tagId {
-    return self.tagToQueryMap[tagId];
-}
-
-/**
- * @return The tag associated with the given query
- */
-- (NSNumber *)tagForQuery:(FQuerySpec *)query {
-    return self.queryToTagMap[query];
-}
-
-#pragma mark -
-#pragma mark applyOperation Helpers
-
-/**
-* A helper method that visits all descendant and ancestor SyncPoints, applying
-the operation.
-*
-* NOTES:
-* - Descendant SyncPoints will be visited first (since we raise events
-depth-first).
-
-* - We call applyOperation: on each SyncPoint passing three things:
-*   1. A version of the Operation that has been made relative to the SyncPoint
-location.
-*   2. A WriteTreeRef of any writes we have cached at the SyncPoint location.
-*   3. A snapshot Node with cached server data, if we have it.
-
-* - We concatenate all of the events returned by each SyncPoint and return the
-result.
-*
-* @return Array of FEvent
-*/
-- (NSArray *)applyOperationToSyncPoints:(id<FOperation>)operation {
-    return [self applyOperationHelper:operation
-                        syncPointTree:self.syncPointTree
-                          serverCache:nil
-                          writesCache:[self.pendingWriteTree
-                                          childWritesForPath:[FPath empty]]];
-}
-
-/**
- * Recursive helper for applyOperationToSyncPoints_
- */
-- (NSArray *)applyOperationHelper:(id<FOperation>)operation
-                    syncPointTree:(FImmutableTree *)syncPointTree
-                      serverCache:(id<FNode>)serverCache
-                      writesCache:(FWriteTreeRef *)writesCache {
-    if ([operation.path isEmpty]) {
-        return [self applyOperationDescendantsHelper:operation
-                                       syncPointTree:syncPointTree
-                                         serverCache:serverCache
-                                         writesCache:writesCache];
-    } else {
-        FSyncPoint *syncPoint = syncPointTree.value;
-
-        // If we don't have cached server data, see if we can get it from this
-        // SyncPoint
-        if (serverCache == nil && syncPoint != nil) {
-            serverCache = [syncPoint completeServerCacheAtPath:[FPath empty]];
-        }
-
-        NSMutableArray *events = [[NSMutableArray alloc] init];
-        NSString *childKey = [operation.path getFront];
-        id<FOperation> childOperation = [operation operationForChild:childKey];
-        FImmutableTree *childTree = [syncPointTree.children get:childKey];
-        if (childTree != nil && childOperation != nil) {
-            id<FNode> childServerCache =
-                serverCache ? [serverCache getImmediateChild:childKey] : nil;
-            FWriteTreeRef *childWritesCache =
-                [writesCache childWriteTreeRef:childKey];
-            [events
-                addObjectsFromArray:[self
-                                        applyOperationHelper:childOperation
-                                               syncPointTree:childTree
-                                                 serverCache:childServerCache
-                                                 writesCache:childWritesCache]];
-        }
-
-        if (syncPoint) {
-            [events addObjectsFromArray:[syncPoint applyOperation:operation
-                                                      writesCache:writesCache
-                                                      serverCache:serverCache]];
-        }
-
-        return events;
-    }
-}
-
-/**
- *  Recursive helper for applyOperationToSyncPoints:
- */
-- (NSArray *)applyOperationDescendantsHelper:(id<FOperation>)operation
-                               syncPointTree:(FImmutableTree *)syncPointTree
-                                 serverCache:(id<FNode>)serverCache
-                                 writesCache:(FWriteTreeRef *)writesCache {
-    FSyncPoint *syncPoint = syncPointTree.value;
-
-    // If we don't have cached server data, see if we can get it from this
-    // SyncPoint
-    id<FNode> resolvedServerCache;
-    if (serverCache == nil & syncPoint != nil) {
-        resolvedServerCache =
-            [syncPoint completeServerCacheAtPath:[FPath empty]];
-    } else {
-        resolvedServerCache = serverCache;
-    }
-
-    NSMutableArray *events = [[NSMutableArray alloc] init];
-    [syncPointTree.children enumerateKeysAndObjectsUsingBlock:^(
-                                NSString *childKey, FImmutableTree *childTree,
-                                BOOL *stop) {
-      id<FNode> childServerCache = nil;
-      if (resolvedServerCache != nil) {
-          childServerCache = [resolvedServerCache getImmediateChild:childKey];
-      }
-      FWriteTreeRef *childWritesCache =
-          [writesCache childWriteTreeRef:childKey];
-      id<FOperation> childOperation = [operation operationForChild:childKey];
-      if (childOperation != nil) {
-          [events addObjectsFromArray:
-                      [self applyOperationDescendantsHelper:childOperation
-                                              syncPointTree:childTree
-                                                serverCache:childServerCache
-                                                writesCache:childWritesCache]];
-      }
-    }];
-
-    if (syncPoint) {
-        [events
-            addObjectsFromArray:[syncPoint applyOperation:operation
-                                              writesCache:writesCache
-                                              serverCache:resolvedServerCache]];
-    }
-
-    return events;
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteRecord.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteRecord.h
deleted file mode 100644
index 435fb6a..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteRecord.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@class FPath;
-@class FCompoundWrite;
-@protocol FNode;
-
-@interface FWriteRecord : NSObject
-
-- initWithPath:(FPath *)path
-     overwrite:(id<FNode>)overwrite
-       writeId:(NSInteger)writeId
-       visible:(BOOL)isVisible;
-- initWithPath:(FPath *)path
-         merge:(FCompoundWrite *)merge
-       writeId:(NSInteger)writeId;
-
-@property(nonatomic, readonly) NSInteger writeId;
-@property(nonatomic, strong, readonly) FPath *path;
-@property(nonatomic, strong, readonly) id<FNode> overwrite;
-/**
- * Maps NSString -> id<FNode>
- */
-@property(nonatomic, strong, readonly) FCompoundWrite *merge;
-@property(nonatomic, readonly) BOOL visible;
-
-- (BOOL)isMerge;
-- (BOOL)isOverwrite;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteRecord.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteRecord.m
deleted file mode 100644
index be1816e..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteRecord.m
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FWriteRecord.h"
-#import "FCompoundWrite.h"
-#import "FNode.h"
-#import "FPath.h"
-
-@interface FWriteRecord ()
-@property(nonatomic, readwrite) NSInteger writeId;
-@property(nonatomic, strong, readwrite) FPath *path;
-@property(nonatomic, strong, readwrite) id<FNode> overwrite;
-@property(nonatomic, strong, readwrite) FCompoundWrite *merge;
-@property(nonatomic, readwrite) BOOL visible;
-@end
-
-@implementation FWriteRecord
-
-- (id)initWithPath:(FPath *)path
-         overwrite:(id<FNode>)overwrite
-           writeId:(NSInteger)writeId
-           visible:(BOOL)isVisible {
-    self = [super init];
-    if (self) {
-        self.path = path;
-        if (overwrite == nil) {
-            [NSException raise:NSInvalidArgumentException
-                        format:@"Can't pass nil as overwrite parameter to an "
-                               @"overwrite write record"];
-        }
-        self.overwrite = overwrite;
-        self.merge = nil;
-        self.writeId = writeId;
-        self.visible = isVisible;
-    }
-    return self;
-}
-
-- (id)initWithPath:(FPath *)path
-             merge:(FCompoundWrite *)merge
-           writeId:(NSInteger)writeId {
-    self = [super init];
-    if (self) {
-        self.path = path;
-        if (merge == nil) {
-            [NSException raise:NSInvalidArgumentException
-                        format:@"Can't pass nil as merge parameter to an merge "
-                               @"write record"];
-        }
-        self.overwrite = nil;
-        self.merge = merge;
-        self.writeId = writeId;
-        self.visible = YES;
-    }
-    return self;
-}
-
-- (id<FNode>)overwrite {
-    if (self->_overwrite == nil) {
-        [NSException raise:NSInvalidArgumentException
-                    format:@"Can't get overwrite for merge write record!"];
-    }
-    return self->_overwrite;
-}
-
-- (FCompoundWrite *)compoundWrite {
-    if (self->_merge == nil) {
-        [NSException raise:NSInvalidArgumentException
-                    format:@"Can't get merge for overwrite write record!"];
-    }
-    return self->_merge;
-}
-
-- (BOOL)isMerge {
-    return self->_merge != nil;
-}
-
-- (BOOL)isOverwrite {
-    return self->_overwrite != nil;
-}
-
-- (NSString *)description {
-    if (self.isOverwrite) {
-        return
-            [NSString stringWithFormat:@"FWriteRecord { writeId = %lu, path = "
-                                       @"%@, overwrite = %@, visible = %d }",
-                                       (unsigned long)self.writeId, self.path,
-                                       self.overwrite, self.visible];
-    } else {
-        return [NSString
-            stringWithFormat:
-                @"FWriteRecord { writeId = %lu, path = %@, merge = %@ }",
-                (unsigned long)self.writeId, self.path, self.merge];
-    }
-}
-
-- (BOOL)isEqual:(id)object {
-    if (![object isKindOfClass:[self class]]) {
-        return NO;
-    }
-    FWriteRecord *other = (FWriteRecord *)object;
-    if (self->_writeId != other->_writeId)
-        return NO;
-    if (self->_path != other->_path && ![self->_path isEqual:other->_path])
-        return NO;
-    if (self->_overwrite != other->_overwrite &&
-        ![self->_overwrite isEqual:other->_overwrite])
-        return NO;
-    if (self->_merge != other->_merge && ![self->_merge isEqual:other->_merge])
-        return NO;
-    if (self->_visible != other->_visible)
-        return NO;
-
-    return YES;
-}
-
-- (NSUInteger)hash {
-    NSUInteger hash = self->_writeId * 17;
-    hash = hash * 31 + self->_path.hash;
-    hash = hash * 31 + self->_overwrite.hash;
-    hash = hash * 31 + self->_merge.hash;
-    hash = hash * 31 + ((self->_visible) ? 1 : 0);
-    return hash;
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteTree.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteTree.h
deleted file mode 100644
index 178946b..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteTree.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@class FPath;
-@protocol FNode;
-@class FCompoundWrite;
-@class FWriteTreeRef;
-@class FChildrenNode;
-@class FNamedNode;
-@class FWriteRecord;
-@protocol FIndex;
-@class FCacheNode;
-
-@interface FWriteTree : NSObject
-
-- (FWriteTreeRef *)childWritesForPath:(FPath *)path;
-- (void)addOverwriteAtPath:(FPath *)path
-                   newData:(id<FNode>)newData
-                   writeId:(NSInteger)writeId
-                 isVisible:(BOOL)visible;
-- (void)addMergeAtPath:(FPath *)path
-       changedChildren:(FCompoundWrite *)changedChildren
-               writeId:(NSInteger)writeId;
-- (BOOL)removeWriteId:(NSInteger)writeId;
-- (NSArray *)removeAllWrites;
-- (FWriteRecord *)writeForId:(NSInteger)writeId;
-
-- (id<FNode>)calculateCompleteEventCacheAtPath:(FPath *)treePath
-                           completeServerCache:(id<FNode>)completeServerCache
-                               excludeWriteIds:(NSArray *)writeIdsToExclude
-                           includeHiddenWrites:(BOOL)includeHiddenWrites;
-
-- (id<FNode>)calculateCompleteEventChildrenAtPath:(FPath *)treePath
-                           completeServerChildren:
-                               (id<FNode>)completeServerChildren;
-
-- (id<FNode>)
-    calculateEventCacheAfterServerOverwriteAtPath:(FPath *)treePath
-                                        childPath:(FPath *)childPath
-                                existingEventSnap:(id<FNode>)existingEventSnap
-                               existingServerSnap:(id<FNode>)existingServerSnap;
-
-- (id<FNode>)calculateCompleteChildAtPath:(FPath *)treePath
-                                 childKey:(NSString *)childKey
-                                    cache:(FCacheNode *)existingServerCache;
-
-- (id<FNode>)shadowingWriteAtPath:(FPath *)path;
-
-- (FNamedNode *)calculateNextNodeAfterPost:(FNamedNode *)post
-                                    atPath:(FPath *)path
-                        completeServerData:(id<FNode>)completeServerData
-                                   reverse:(BOOL)reverse
-                                     index:(id<FIndex>)index;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteTree.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteTree.m
deleted file mode 100644
index d8592c0..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteTree.m
+++ /dev/null
@@ -1,577 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FWriteTree.h"
-#import "FCacheNode.h"
-#import "FChildrenNode.h"
-#import "FCompoundWrite.h"
-#import "FEmptyNode.h"
-#import "FImmutableTree.h"
-#import "FIndex.h"
-#import "FNamedNode.h"
-#import "FNode.h"
-#import "FPath.h"
-#import "FWriteRecord.h"
-#import "FWriteTreeRef.h"
-
-@interface FWriteTree ()
-/**
- * A tree tracking the results of applying all visible writes. This does not
- * include transactions with applyLocally=false or writes that are completely
- * shadowed by other writes. Contains id<FNode> as values.
- */
-@property(nonatomic, strong) FCompoundWrite *visibleWrites;
-/**
- * A list of pending writes, regardless of visibility and shadowed-ness. Used to
- * calcuate arbitrary sets of the changed data, such as hidden writes (from
- * transactions) or changes with certain writes excluded (also used by
- * transactions). Contains FWriteRecords.
- */
-@property(nonatomic, strong) NSMutableArray *allWrites;
-@property(nonatomic) NSInteger lastWriteId;
-@end
-
-/**
- * FWriteTree tracks all pending user-initiated writes and has methods to
- * calcuate the result of merging them with underlying server data (to create
- * "event cache" data). Pending writes are added with addOverwriteAtPath: and
- * addMergeAtPath: and removed with removeWriteId:.
- */
-@implementation FWriteTree
-
-@synthesize allWrites;
-@synthesize lastWriteId;
-
-- (id)init {
-    self = [super init];
-    if (self) {
-        self.visibleWrites = [FCompoundWrite emptyWrite];
-        self.allWrites = [[NSMutableArray alloc] init];
-        self.lastWriteId = -1;
-    }
-    return self;
-}
-
-/**
- * Create a new WriteTreeRef for the given path. For use with a new sync point
- * at the given path.
- */
-- (FWriteTreeRef *)childWritesForPath:(FPath *)path {
-    return [[FWriteTreeRef alloc] initWithPath:path writeTree:self];
-}
-
-/**
- * Record a new overwrite from user code.
- * @param visible Is set to false by some transactions. It should be excluded
- * from event caches.
- */
-- (void)addOverwriteAtPath:(FPath *)path
-                   newData:(id<FNode>)newData
-                   writeId:(NSInteger)writeId
-                 isVisible:(BOOL)visible {
-    NSAssert(writeId > self.lastWriteId,
-             @"Stacking an older write on top of a newer one");
-    FWriteRecord *record = [[FWriteRecord alloc] initWithPath:path
-                                                    overwrite:newData
-                                                      writeId:writeId
-                                                      visible:visible];
-    [self.allWrites addObject:record];
-
-    if (visible) {
-        self.visibleWrites = [self.visibleWrites addWrite:newData atPath:path];
-    }
-
-    self.lastWriteId = writeId;
-}
-
-/**
- * Record a new merge from user code.
- * @param changedChildren maps NSString -> id<FNode>
- */
-- (void)addMergeAtPath:(FPath *)path
-       changedChildren:(FCompoundWrite *)changedChildren
-               writeId:(NSInteger)writeId {
-    NSAssert(writeId > self.lastWriteId,
-             @"Stacking an older merge on top of newer one");
-    FWriteRecord *record = [[FWriteRecord alloc] initWithPath:path
-                                                        merge:changedChildren
-                                                      writeId:writeId];
-    [self.allWrites addObject:record];
-
-    self.visibleWrites = [self.visibleWrites addCompoundWrite:changedChildren
-                                                       atPath:path];
-    self.lastWriteId = writeId;
-}
-
-- (FWriteRecord *)writeForId:(NSInteger)writeId {
-    NSUInteger index = [self.allWrites
-        indexOfObjectPassingTest:^BOOL(FWriteRecord *write, NSUInteger idx,
-                                       BOOL *stop) {
-          return write.writeId == writeId;
-        }];
-    return (index == NSNotFound) ? nil : self.allWrites[index];
-}
-
-/**
- * Remove a write (either an overwrite or merge) that has been successfully
- * acknowledged by the server. Recalculates the tree if necessary. We return the
- * path of the write and whether it may have been visible, meaning views need to
- * reevaluate.
- *
- * @return YES if the write may have been visible (meaning we'll need to
- * reevaluate / raise events as a result).
- */
-- (BOOL)removeWriteId:(NSInteger)writeId {
-    NSUInteger index = [self.allWrites
-        indexOfObjectPassingTest:^BOOL(FWriteRecord *record, NSUInteger idx,
-                                       BOOL *stop) {
-          if (record.writeId == writeId) {
-              return YES;
-          } else {
-              return NO;
-          }
-        }];
-    NSAssert(index != NSNotFound,
-             @"[FWriteTree removeWriteId:] called with nonexistent writeId.");
-    FWriteRecord *writeToRemove = self.allWrites[index];
-    [self.allWrites removeObjectAtIndex:index];
-
-    BOOL removedWriteWasVisible = writeToRemove.visible;
-    BOOL removedWriteOverlapsWithOtherWrites = NO;
-    NSInteger i = [self.allWrites count] - 1;
-
-    while (removedWriteWasVisible && i >= 0) {
-        FWriteRecord *currentWrite = [self.allWrites objectAtIndex:i];
-        if (currentWrite.visible) {
-            if (i >= index && [self record:currentWrite
-                                  containsPath:writeToRemove.path]) {
-                // The removed write was completely shadowed by a subsequent
-                // write.
-                removedWriteWasVisible = NO;
-            } else if ([writeToRemove.path contains:currentWrite.path]) {
-                // Either we're covering some writes or they're covering part of
-                // us (depending on which came first).
-                removedWriteOverlapsWithOtherWrites = YES;
-            }
-        }
-        i--;
-    }
-
-    if (!removedWriteWasVisible) {
-        return NO;
-    } else if (removedWriteOverlapsWithOtherWrites) {
-        // There's some shadowing going on. Just rebuild the visible writes from
-        // scratch.
-        [self resetTree];
-        return YES;
-    } else {
-        // There's no shadowing.  We can safely just remove the write(s) from
-        // visibleWrites.
-        if ([writeToRemove isOverwrite]) {
-            self.visibleWrites =
-                [self.visibleWrites removeWriteAtPath:writeToRemove.path];
-        } else {
-            FCompoundWrite *merge = writeToRemove.merge;
-            [merge enumerateWrites:^(FPath *path, id<FNode> node, BOOL *stop) {
-              self.visibleWrites = [self.visibleWrites
-                  removeWriteAtPath:[writeToRemove.path child:path]];
-            }];
-        }
-        return YES;
-    }
-}
-
-- (NSArray *)removeAllWrites {
-    NSArray *writes = self.allWrites;
-    self.visibleWrites = [FCompoundWrite emptyWrite];
-    self.allWrites = [NSMutableArray array];
-    return writes;
-}
-
-/**
- * @return A complete snapshot for the given path if there's visible write data
- * at that path, else nil. No server data is considered.
- */
-- (id<FNode>)completeWriteDataAtPath:(FPath *)path {
-    return [self.visibleWrites completeNodeAtPath:path];
-}
-
-/**
- * Given optional, underlying server data, and an optional set of constraints
- * (exclude some sets, include hidden writes), attempt to calculate a complete
- * snapshot for the given path
- * @param includeHiddenWrites Defaults to false, whether or not to layer on
- * writes with visible set to false
- */
-- (id<FNode>)calculateCompleteEventCacheAtPath:(FPath *)treePath
-                           completeServerCache:(id<FNode>)completeServerCache
-                               excludeWriteIds:(NSArray *)writeIdsToExclude
-                           includeHiddenWrites:(BOOL)includeHiddenWrites {
-    if (writeIdsToExclude == nil && !includeHiddenWrites) {
-        id<FNode> shadowingNode =
-            [self.visibleWrites completeNodeAtPath:treePath];
-        if (shadowingNode != nil) {
-            return shadowingNode;
-        } else {
-            // No cache here. Can't claim complete knowledge.
-            FCompoundWrite *subMerge =
-                [self.visibleWrites childCompoundWriteAtPath:treePath];
-            if (subMerge.isEmpty) {
-                return completeServerCache;
-            } else if (completeServerCache == nil &&
-                       ![subMerge hasCompleteWriteAtPath:[FPath empty]]) {
-                // We wouldn't have a complete snapshot since there's no
-                // underlying data and no complete shadow
-                return nil;
-            } else {
-                id<FNode> layeredCache = completeServerCache != nil
-                                             ? completeServerCache
-                                             : [FEmptyNode emptyNode];
-                return [subMerge applyToNode:layeredCache];
-            }
-        }
-    } else {
-        FCompoundWrite *merge =
-            [self.visibleWrites childCompoundWriteAtPath:treePath];
-        if (!includeHiddenWrites && merge.isEmpty) {
-            return completeServerCache;
-        } else {
-            // If the server cache is null and we don't have a complete cache,
-            // we need to return nil
-            if (!includeHiddenWrites && completeServerCache == nil &&
-                ![merge hasCompleteWriteAtPath:[FPath empty]]) {
-                return nil;
-            } else {
-                BOOL (^filter)(FWriteRecord *) = ^(FWriteRecord *record) {
-                  return (BOOL)(
-                      (record.visible || includeHiddenWrites) &&
-                      (writeIdsToExclude == nil ||
-                       ![writeIdsToExclude
-                           containsObject:
-                               [NSNumber numberWithInteger:record.writeId]]) &&
-                      ([record.path contains:treePath] ||
-                       [treePath contains:record.path]));
-                };
-                FCompoundWrite *mergeAtPath =
-                    [FWriteTree layerTreeFromWrites:self.allWrites
-                                             filter:filter
-                                           treeRoot:treePath];
-                id<FNode> layeredCache = completeServerCache
-                                             ? completeServerCache
-                                             : [FEmptyNode emptyNode];
-                return [mergeAtPath applyToNode:layeredCache];
-            }
-        }
-    }
-}
-
-/**
- * With optional, underlying server data, attempt to return a children node of
- * children that we have complete data for. Used when creating new views, to
- * pre-fill their complete event children snapshot.
- */
-- (FChildrenNode *)calculateCompleteEventChildrenAtPath:(FPath *)treePath
-                                 completeServerChildren:
-                                     (id<FNode>)completeServerChildren {
-    __block id<FNode> completeChildren = [FEmptyNode emptyNode];
-    id<FNode> topLevelSet = [self.visibleWrites completeNodeAtPath:treePath];
-    if (topLevelSet != nil) {
-        if (![topLevelSet isLeafNode]) {
-            // We're shadowing everything. Return the children.
-            FChildrenNode *topChildrenNode = topLevelSet;
-            [topChildrenNode enumerateChildrenUsingBlock:^(
-                                 NSString *key, id<FNode> node, BOOL *stop) {
-              completeChildren = [completeChildren updateImmediateChild:key
-                                                           withNewChild:node];
-            }];
-        }
-        return completeChildren;
-    } else {
-        // Layer any children we have on top of this
-        // We know we don't have a top-level set, so just enumerate existing
-        // children, and apply any updates
-        FCompoundWrite *merge =
-            [self.visibleWrites childCompoundWriteAtPath:treePath];
-        [completeServerChildren enumerateChildrenUsingBlock:^(
-                                    NSString *key, id<FNode> node, BOOL *stop) {
-          FCompoundWrite *childMerge =
-              [merge childCompoundWriteAtPath:[[FPath alloc] initWith:key]];
-          id<FNode> newChildNode = [childMerge applyToNode:node];
-          completeChildren =
-              [completeChildren updateImmediateChild:key
-                                        withNewChild:newChildNode];
-        }];
-        // Add any complete children we have from the set.
-        for (FNamedNode *node in merge.completeChildren) {
-            completeChildren =
-                [completeChildren updateImmediateChild:node.name
-                                          withNewChild:node.node];
-        }
-        return completeChildren;
-    }
-}
-
-/**
- * Given that the underlying server data has updated, determine what, if
- * anything, needs to be applied to the event cache.
- *
- * Possibilities
- *
- * 1. No write are shadowing. Events should be raised, the snap to be applied
- * comes from the server data.
- *
- * 2. Some write is completely shadowing. No events to be raised.
- *
- * 3. Is partially shadowed. Events ..
- *
- * Either existingEventSnap or existingServerSnap must exist.
- */
-- (id<FNode>)calculateEventCacheAfterServerOverwriteAtPath:(FPath *)treePath
-                                                 childPath:(FPath *)childPath
-                                         existingEventSnap:
-                                             (id<FNode>)existingEventSnap
-                                        existingServerSnap:
-                                            (id<FNode>)existingServerSnap {
-    NSAssert(existingEventSnap != nil || existingServerSnap != nil,
-             @"Either existingEventSnap or existingServerSanp must exist.");
-
-    FPath *path = [treePath child:childPath];
-    if ([self.visibleWrites hasCompleteWriteAtPath:path]) {
-        // At this point we can probably guarantee that we're in case 2, meaning
-        // no events May need to check visibility while doing the
-        // findRootMostValueAndPath call
-        return nil;
-    } else {
-        // This could be more efficient if the serverNode + updates doesn't
-        // change the eventSnap However this is tricky to find out, since user
-        // updates don't necessary change the server snap, e.g. priority updates
-        // on empty nodes, or deep deletes. Another special case is if the
-        // server adds nodes, but doesn't change any existing writes. It is
-        // therefore not enough to only check if the updates change the
-        // serverNode. Maybe check if the merge tree contains these special
-        // cases and only do a full overwrite in that case?
-        FCompoundWrite *childMerge =
-            [self.visibleWrites childCompoundWriteAtPath:path];
-        if (childMerge.isEmpty) {
-            // We're not shadowing at all. Case 1
-            return [existingServerSnap getChild:childPath];
-        } else {
-            return [childMerge
-                applyToNode:[existingServerSnap getChild:childPath]];
-        }
-    }
-}
-
-/**
- * Returns a complete child for a given server snap after applying all user
- * writes or nil if there is no complete child for this child key.
- */
-- (id<FNode>)calculateCompleteChildAtPath:(FPath *)treePath
-                                 childKey:(NSString *)childKey
-                                    cache:(FCacheNode *)existingServerCache {
-    FPath *path = [treePath childFromString:childKey];
-    id<FNode> shadowingNode = [self.visibleWrites completeNodeAtPath:path];
-    if (shadowingNode != nil) {
-        return shadowingNode;
-    } else {
-        if ([existingServerCache isCompleteForChild:childKey]) {
-            FCompoundWrite *childMerge =
-                [self.visibleWrites childCompoundWriteAtPath:path];
-            return [childMerge applyToNode:[existingServerCache.node
-                                               getImmediateChild:childKey]];
-        } else {
-            return nil;
-        }
-    }
-}
-
-/**
- * Returns a node if there is a complete overwrite for this path. More
- * specifically, if there is a write at a higher path, this will return the
- * child of that write relative to the write and this path. Returns null if
- * there is no write at this path.
- */
-- (id<FNode>)shadowingWriteAtPath:(FPath *)path {
-    return [self.visibleWrites completeNodeAtPath:path];
-}
-
-/**
- * This method is used when processing child remove events on a query. If we
- * can, we pull in children that were outside the window, but may now be in the
- * window.
- */
-- (FNamedNode *)calculateNextNodeAfterPost:(FNamedNode *)post
-                                    atPath:(FPath *)treePath
-                        completeServerData:(id<FNode>)completeServerData
-                                   reverse:(BOOL)reverse
-                                     index:(id<FIndex>)index {
-    __block id<FNode> toIterate;
-    FCompoundWrite *merge =
-        [self.visibleWrites childCompoundWriteAtPath:treePath];
-    id<FNode> shadowingNode = [merge completeNodeAtPath:[FPath empty]];
-    if (shadowingNode != nil) {
-        toIterate = shadowingNode;
-    } else if (completeServerData != nil) {
-        toIterate = [merge applyToNode:completeServerData];
-    } else {
-        return nil;
-    }
-
-    __block NSString *currentNextKey = nil;
-    __block id<FNode> currentNextNode = nil;
-    [toIterate enumerateChildrenUsingBlock:^(NSString *key, id<FNode> node,
-                                             BOOL *stop) {
-      if ([index compareKey:key
-                    andNode:node
-                 toOtherKey:post.name
-                    andNode:post.node
-                    reverse:reverse] > NSOrderedSame &&
-          (!currentNextKey || [index compareKey:key
-                                        andNode:node
-                                     toOtherKey:currentNextKey
-                                        andNode:currentNextNode
-                                        reverse:reverse] < NSOrderedSame)) {
-          currentNextKey = key;
-          currentNextNode = node;
-      }
-    }];
-
-    if (currentNextKey != nil) {
-        return [FNamedNode nodeWithName:currentNextKey node:currentNextNode];
-    } else {
-        return nil;
-    }
-}
-
-#pragma mark -
-#pragma mark Private Methods
-
-- (BOOL)record:(FWriteRecord *)record containsPath:(FPath *)path {
-    if ([record isOverwrite]) {
-        return [record.path contains:path];
-    } else {
-        __block BOOL contains = NO;
-        [record.merge
-            enumerateWrites:^(FPath *childPath, id<FNode> node, BOOL *stop) {
-              contains = [[record.path child:childPath] contains:path];
-              *stop = contains;
-            }];
-        return contains;
-    }
-}
-
-/**
- * Re-layer the writes and merges into a tree so we can efficiently calculate
- * event snapshots
- */
-- (void)resetTree {
-    self.visibleWrites =
-        [FWriteTree layerTreeFromWrites:self.allWrites
-                                 filter:[FWriteTree defaultFilter]
-                               treeRoot:[FPath empty]];
-    if ([self.allWrites count] > 0) {
-        FWriteRecord *lastRecord = self.allWrites[[self.allWrites count] - 1];
-        self.lastWriteId = lastRecord.writeId;
-    } else {
-        self.lastWriteId = -1;
-    }
-}
-
-/**
- * The default filter used when constructing the tree. Keep everything that's
- * visible.
- */
-+ (BOOL (^)(FWriteRecord *record))defaultFilter {
-    static BOOL (^filter)(FWriteRecord *);
-    static dispatch_once_t filterToken;
-    dispatch_once(&filterToken, ^{
-      filter = ^(FWriteRecord *record) {
-        return YES;
-      };
-    });
-    return filter;
-}
-
-/**
- * Static method. Given an array of WriteRecords, a filter for which ones to
- * include, and a path, construct a merge at that path
- * @return An FImmutableTree of id<FNode>s.
- */
-+ (FCompoundWrite *)layerTreeFromWrites:(NSArray *)writes
-                                 filter:(BOOL (^)(FWriteRecord *record))filter
-                               treeRoot:(FPath *)treeRoot {
-    __block FCompoundWrite *compoundWrite = [FCompoundWrite emptyWrite];
-    [writes enumerateObjectsUsingBlock:^(FWriteRecord *record, NSUInteger idx,
-                                         BOOL *stop) {
-      // Theory, a later set will either:
-      // a) abort a relevant transaction, so no need to worry about excluding it
-      // from calculating that transaction b) not be relevant to a transaction
-      // (separate branch), so again will not affect the data for that
-      // transaction
-      if (filter(record)) {
-          FPath *writePath = record.path;
-          if ([record isOverwrite]) {
-              if ([treeRoot contains:writePath]) {
-                  FPath *relativePath = [FPath relativePathFrom:treeRoot
-                                                             to:writePath];
-                  compoundWrite = [compoundWrite addWrite:record.overwrite
-                                                   atPath:relativePath];
-              } else if ([writePath contains:treeRoot]) {
-                  id<FNode> child = [record.overwrite
-                      getChild:[FPath relativePathFrom:writePath to:treeRoot]];
-                  compoundWrite = [compoundWrite addWrite:child
-                                                   atPath:[FPath empty]];
-              } else {
-                  // There is no overlap between root path and write path,
-                  // ignore write
-              }
-          } else {
-              if ([treeRoot contains:writePath]) {
-                  FPath *relativePath = [FPath relativePathFrom:treeRoot
-                                                             to:writePath];
-                  compoundWrite = [compoundWrite addCompoundWrite:record.merge
-                                                           atPath:relativePath];
-              } else if ([writePath contains:treeRoot]) {
-                  FPath *relativePath = [FPath relativePathFrom:writePath
-                                                             to:treeRoot];
-                  if (relativePath.isEmpty) {
-                      compoundWrite =
-                          [compoundWrite addCompoundWrite:record.merge
-                                                   atPath:[FPath empty]];
-                  } else {
-                      id<FNode> child =
-                          [record.merge completeNodeAtPath:relativePath];
-                      if (child != nil) {
-                          // There exists a child in this node that matches the
-                          // root path
-                          id<FNode> deepNode =
-                              [child getChild:[relativePath popFront]];
-                          compoundWrite =
-                              [compoundWrite addWrite:deepNode
-                                               atPath:[FPath empty]];
-                      }
-                  }
-              } else {
-                  // There is no overlap between root path and write path,
-                  // ignore write
-              }
-          }
-      }
-    }];
-    return compoundWrite;
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteTreeRef.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteTreeRef.h
deleted file mode 100644
index 962ad5c..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteTreeRef.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@protocol FNode;
-@class FChildrenNode;
-@class FPath;
-@class FNamedNode;
-@class FWriteRecord;
-@class FWriteTree;
-@protocol FIndex;
-@class FCacheNode;
-
-@interface FWriteTreeRef : NSObject
-
-- (id)initWithPath:(FPath *)aPath writeTree:(FWriteTree *)tree;
-
-- (id<FNode>)calculateCompleteEventCacheWithCompleteServerCache:
-    (id<FNode>)completeServerCache;
-
-- (FChildrenNode *)calculateCompleteEventChildrenWithCompleteServerChildren:
-    (FChildrenNode *)completeServerChildren;
-
-- (id<FNode>)
-    calculateEventCacheAfterServerOverwriteWithChildPath:(FPath *)childPath
-                                       existingEventSnap:
-                                           (id<FNode>)existingEventSnap
-                                      existingServerSnap:
-                                          (id<FNode>)existingServerSnap;
-
-- (id<FNode>)shadowingWriteAtPath:(FPath *)path;
-
-- (FNamedNode *)calculateNextNodeAfterPost:(FNamedNode *)post
-                        completeServerData:(id<FNode>)completeServerData
-                                   reverse:(BOOL)reverse
-                                     index:(id<FIndex>)index;
-
-- (id<FNode>)calculateCompleteChild:(NSString *)childKey
-                              cache:(FCacheNode *)existingServerCache;
-
-- (FWriteTreeRef *)childWriteTreeRef:(NSString *)childKey;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteTreeRef.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteTreeRef.m
deleted file mode 100644
index 809d1a9..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteTreeRef.m
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FWriteTreeRef.h"
-#import "FCacheNode.h"
-#import "FChildrenNode.h"
-#import "FIndex.h"
-#import "FNamedNode.h"
-#import "FNode.h"
-#import "FPath.h"
-#import "FWriteRecord.h"
-#import "FWriteTree.h"
-
-@interface FWriteTreeRef ()
-/**
- * The path to this particular FWriteTreeRef. Used for calling methods on
- * writeTree while exposing a simpler interface to callers.
- */
-@property(nonatomic, strong) FPath *path;
-/**
- * A reference to the actual tree of the write data. All methods are
- * pass-through to the tree, but with the appropriate path prefixed.
- *
- * This lets us make cheap references to points in the tree for sync points
- * without having to copy and maintain all of the data.
- */
-@property(nonatomic, strong) FWriteTree *writeTree;
-@end
-
-/**
- * A FWriteTreeRef wraps a FWriteTree and a FPath, for convenient access to a
- * particular subtree. All the methods just proxy to the underlying FWriteTree.
- */
-@implementation FWriteTreeRef
-- (id)initWithPath:(FPath *)aPath writeTree:(FWriteTree *)tree {
-    self = [super init];
-    if (self) {
-        self.path = aPath;
-        self.writeTree = tree;
-    }
-    return self;
-}
-
-/**
- * @return If possible, returns a complete event cache, using the underlying
- * server data if possible. In addition, can be used to get a cache that
- * includes hidden writes, and excludes arbitrary writes. Note that customizing
- * the returned node can lead to a more expensive calculation.
- */
-- (id<FNode>)calculateCompleteEventCacheWithCompleteServerCache:
-    (id<FNode>)completeServerCache {
-    return [self.writeTree calculateCompleteEventCacheAtPath:self.path
-                                         completeServerCache:completeServerCache
-                                             excludeWriteIds:nil
-                                         includeHiddenWrites:NO];
-}
-
-/**
- * @return If possible, returns a children node containing all of the complete
- * children we have data for. The returned data is a mix of the given server
- * data and write data.
- */
-- (FChildrenNode *)calculateCompleteEventChildrenWithCompleteServerChildren:
-    (id<FNode>)completeServerChildren {
-    return [self.writeTree
-        calculateCompleteEventChildrenAtPath:self.path
-                      completeServerChildren:completeServerChildren];
-}
-
-/**
- * Given that either the underlying server data has updated or the outstanding
- * writes have been updating, determine what, if anything, needs to be applied
- * to the event cache.
- *
- * Possibilities:
- *
- * 1. No writes are shadowing. Events should be raised, the snap to be applied
- * comes from the server data.
- *
- * 2. Some writes are completly shadowing. No events to be raised.
- *
- * 3. Is partially shadowed. Events should be raised.
- *
- * Either existingEventSnap or existingServerSnap must exist, this is validated
- * via an assert.
- */
-- (id<FNode>)
-    calculateEventCacheAfterServerOverwriteWithChildPath:(FPath *)childPath
-                                       existingEventSnap:
-                                           (id<FNode>)existingEventSnap
-                                      existingServerSnap:
-                                          (id<FNode>)existingServerSnap {
-    return [self.writeTree
-        calculateEventCacheAfterServerOverwriteAtPath:self.path
-                                            childPath:childPath
-                                    existingEventSnap:existingEventSnap
-                                   existingServerSnap:existingServerSnap];
-}
-
-/**
- * Returns a node if there is a complete overwrite for this path. More
- * specifically, if there is a write at a higher path, this will return the
- * child of that write relative to the write and this path. Returns nil if there
- * is no write at this path.
- */
-- (id<FNode>)shadowingWriteAtPath:(FPath *)path {
-    return [self.writeTree shadowingWriteAtPath:[self.path child:path]];
-}
-
-/**
- * This method is used when processing child remove events on a query. If we
- * can, we pull in children that are outside the window, but may now be in the
- * window.
- */
-- (FNamedNode *)calculateNextNodeAfterPost:(FNamedNode *)post
-                        completeServerData:(id<FNode>)completeServerData
-                                   reverse:(BOOL)reverse
-                                     index:(id<FIndex>)index {
-    return [self.writeTree calculateNextNodeAfterPost:post
-                                               atPath:self.path
-                                   completeServerData:completeServerData
-                                              reverse:reverse
-                                                index:index];
-}
-
-/**
- * Returns a complete child for a given server snap after applying all user
- * writes or nil if there is no complete child for this child key.
- */
-- (id<FNode>)calculateCompleteChild:(NSString *)childKey
-                              cache:(FCacheNode *)existingServerCache {
-    return [self.writeTree calculateCompleteChildAtPath:self.path
-                                               childKey:childKey
-                                                  cache:existingServerCache];
-}
-
-/**
- * @return a WriteTreeref for a child.
- */
-- (FWriteTreeRef *)childWriteTreeRef:(NSString *)childKey {
-    return
-        [[FWriteTreeRef alloc] initWithPath:[self.path childFromString:childKey]
-                                  writeTree:self.writeTree];
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FAckUserWrite.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FAckUserWrite.h
deleted file mode 100644
index 97a23bf..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FAckUserWrite.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FOperation.h"
-
-@class FPath;
-@class FOperationSource;
-@class FImmutableTree;
-
-@interface FAckUserWrite : NSObject <FOperation>
-
-- initWithPath:(FPath *)operationPath
-    affectedTree:(FImmutableTree *)affectedTree
-          revert:(BOOL)shouldRevert;
-
-@property(nonatomic, strong, readonly) FOperationSource *source;
-@property(nonatomic, readonly) FOperationType type;
-@property(nonatomic, strong, readonly) FPath *path;
-// A FImmutableTree, containing @YES for each affected path.  Affected paths
-// can't overlap.
-@property(nonatomic, strong, readonly) FImmutableTree *affectedTree;
-@property(nonatomic, readonly) BOOL revert;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FAckUserWrite.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FAckUserWrite.m
deleted file mode 100644
index 2a1f287..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FAckUserWrite.m
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FAckUserWrite.h"
-#import "FImmutableTree.h"
-#import "FOperationSource.h"
-#import "FPath.h"
-
-@implementation FAckUserWrite
-
-- (id)initWithPath:(FPath *)operationPath
-      affectedTree:(FImmutableTree *)tree
-            revert:(BOOL)shouldRevert {
-    self = [super init];
-    if (self) {
-        self->_source = [FOperationSource userInstance];
-        self->_type = FOperationTypeAckUserWrite;
-        self->_path = operationPath;
-        self->_affectedTree = tree;
-        self->_revert = shouldRevert;
-    }
-    return self;
-}
-
-- (FAckUserWrite *)operationForChild:(NSString *)childKey {
-    if (![self.path isEmpty]) {
-        NSAssert([self.path.getFront isEqualToString:childKey],
-                 @"operationForChild called for unrelated child.");
-        return [[FAckUserWrite alloc] initWithPath:[self.path popFront]
-                                      affectedTree:self.affectedTree
-                                            revert:self.revert];
-    } else if (self.affectedTree.value != nil) {
-        NSAssert(self.affectedTree.children.isEmpty,
-                 @"affectedTree should not have overlapping affected paths.");
-        // All child locations are affected as well; just return same operation.
-        return self;
-    } else {
-        FImmutableTree *childTree =
-            [self.affectedTree subtreeAtPath:[[FPath alloc] initWith:childKey]];
-        return [[FAckUserWrite alloc] initWithPath:[FPath empty]
-                                      affectedTree:childTree
-                                            revert:self.revert];
-    }
-}
-
-- (NSString *)description {
-    return
-        [NSString stringWithFormat:
-                      @"FAckUserWrite { path=%@, revert=%d, affectedTree=%@ }",
-                      self.path, self.revert, self.affectedTree];
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FMerge.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FMerge.h
deleted file mode 100644
index 56fbec9..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FMerge.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FOperation.h"
-
-@class FCompoundWrite;
-
-@interface FMerge : NSObject <FOperation>
-
-- (id)initWithSource:(FOperationSource *)aSource
-                path:(FPath *)aPath
-            children:(FCompoundWrite *)children;
-
-@property(nonatomic, strong, readonly) FOperationSource *source;
-@property(nonatomic, readonly) FOperationType type;
-@property(nonatomic, strong, readonly) FPath *path;
-@property(nonatomic, strong, readonly) FCompoundWrite *children;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FMerge.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FMerge.m
deleted file mode 100644
index c344755..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FMerge.m
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FMerge.h"
-#import "FCompoundWrite.h"
-#import "FNode.h"
-#import "FOperationSource.h"
-#import "FOverwrite.h"
-#import "FPath.h"
-
-@interface FMerge ()
-@property(nonatomic, strong, readwrite) FOperationSource *source;
-@property(nonatomic, readwrite) FOperationType type;
-@property(nonatomic, strong, readwrite) FPath *path;
-@property(nonatomic, strong) FCompoundWrite *children;
-@end
-
-@implementation FMerge
-
-@synthesize source;
-@synthesize type;
-@synthesize path;
-@synthesize children;
-
-- (id)initWithSource:(FOperationSource *)aSource
-                path:(FPath *)aPath
-            children:(FCompoundWrite *)someChildren {
-    self = [super init];
-    if (self) {
-        self.source = aSource;
-        self.type = FOperationTypeMerge;
-        self.path = aPath;
-        self.children = someChildren;
-    }
-    return self;
-}
-
-- (id<FOperation>)operationForChild:(NSString *)childKey {
-    if ([self.path isEmpty]) {
-        FCompoundWrite *childTree = [self.children
-            childCompoundWriteAtPath:[[FPath alloc] initWith:childKey]];
-        if (childTree.isEmpty) {
-            return nil;
-        } else if (childTree.rootWrite != nil) {
-            // We have a snapshot for the child in question. This becomes an
-            // overwrite of the child.
-            return [[FOverwrite alloc] initWithSource:self.source
-                                                 path:[FPath empty]
-                                                 snap:childTree.rootWrite];
-        } else {
-            // This is a merge at a deeper level
-            return [[FMerge alloc] initWithSource:self.source
-                                             path:[FPath empty]
-                                         children:childTree];
-        }
-    } else {
-        NSAssert(
-            [self.path.getFront isEqualToString:childKey],
-            @"Can't get a merge for a child not on the path of the operation");
-        return [[FMerge alloc] initWithSource:self.source
-                                         path:[self.path popFront]
-                                     children:self.children];
-    }
-}
-
-- (NSString *)description {
-    return
-        [NSString stringWithFormat:@"FMerge { path=%@, soruce=%@ children=%@}",
-                                   self.path, self.source, self.children];
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FOperation.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FOperation.h
deleted file mode 100644
index 41f6054..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FOperation.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@class FOperationSource;
-@class FPath;
-
-typedef NS_ENUM(NSInteger, FOperationType) {
-    FOperationTypeOverwrite = 0,
-    FOperationTypeMerge = 1,
-    FOperationTypeAckUserWrite = 2,
-    FOperationTypeListenComplete = 3
-};
-
-@protocol FOperation <NSObject>
-@property(nonatomic, strong, readonly) FOperationSource *source;
-@property(nonatomic, readonly) FOperationType type;
-@property(nonatomic, strong, readonly) FPath *path;
-- (id<FOperation>)operationForChild:(NSString *)childKey;
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FOperationSource.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FOperationSource.h
deleted file mode 100644
index 747487b..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FOperationSource.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@class FQueryParams;
-
-@interface FOperationSource : NSObject
-
-@property(nonatomic, readonly) BOOL fromUser;
-@property(nonatomic, readonly) BOOL fromServer;
-@property(nonatomic, readonly) BOOL isTagged;
-@property(nonatomic, strong, readonly) FQueryParams *queryParams;
-
-- initWithFromUser:(BOOL)isFromUser
-        fromServer:(BOOL)isFromServer
-       queryParams:(FQueryParams *)params
-            tagged:(BOOL)isTagged;
-
-+ (FOperationSource *)userInstance;
-+ (FOperationSource *)serverInstance;
-+ (FOperationSource *)forServerTaggedQuery:(FQueryParams *)params;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FOperationSource.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FOperationSource.m
deleted file mode 100644
index 92e3db8..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FOperationSource.m
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FOperationSource.h"
-#import "FPath.h"
-#import "FQueryParams.h"
-
-@interface FOperationSource ()
-@property(nonatomic, readwrite) BOOL fromUser;
-@property(nonatomic, readwrite) BOOL fromServer;
-@property(nonatomic, readwrite) BOOL isTagged;
-@property(nonatomic, strong, readwrite) FQueryParams *queryParams;
-@end
-
-@implementation FOperationSource
-
-@synthesize fromUser;
-@synthesize fromServer;
-@synthesize queryParams;
-
-- (id)initWithFromUser:(BOOL)isFromUser
-            fromServer:(BOOL)isFromServer
-           queryParams:(FQueryParams *)params
-                tagged:(BOOL)tagged {
-    self = [super init];
-    if (self) {
-        self.fromUser = isFromUser;
-        self.fromServer = isFromServer;
-        self.queryParams = params;
-        self.isTagged = tagged;
-    }
-    return self;
-}
-
-+ (FOperationSource *)userInstance {
-    static FOperationSource *user = nil;
-    static dispatch_once_t userToken;
-    dispatch_once(&userToken, ^{
-      user = [[FOperationSource alloc] initWithFromUser:YES
-                                             fromServer:NO
-                                            queryParams:nil
-                                                 tagged:NO];
-    });
-    return user;
-}
-
-+ (FOperationSource *)serverInstance {
-    static FOperationSource *server = nil;
-    static dispatch_once_t serverToken;
-    dispatch_once(&serverToken, ^{
-      server = [[FOperationSource alloc] initWithFromUser:NO
-                                               fromServer:YES
-                                              queryParams:nil
-                                                   tagged:NO];
-    });
-    return server;
-}
-
-+ (FOperationSource *)forServerTaggedQuery:(FQueryParams *)params {
-    return [[FOperationSource alloc] initWithFromUser:NO
-                                           fromServer:YES
-                                          queryParams:params
-                                               tagged:YES];
-}
-
-- (NSString *)description {
-    return [NSString stringWithFormat:@"FOperationSource { fromUser=%d, "
-                                      @"fromServer=%d, queryId=%@, tagged=%d }",
-                                      self.fromUser, self.fromServer,
-                                      self.queryParams, self.isTagged];
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FOverwrite.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FOverwrite.h
deleted file mode 100644
index 7d738ac..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FOverwrite.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FOperation.h"
-
-@protocol FNode;
-
-@interface FOverwrite : NSObject <FOperation>
-
-- (id)initWithSource:(FOperationSource *)aSource
-                path:(FPath *)aPath
-                snap:(id<FNode>)aSnap;
-
-@property(nonatomic, strong, readonly) FOperationSource *source;
-@property(nonatomic, readonly) FOperationType type;
-@property(nonatomic, strong, readonly) FPath *path;
-@property(nonatomic, strong, readonly) id<FNode> snap;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FOverwrite.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FOverwrite.m
deleted file mode 100644
index ad4daec..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FOverwrite.m
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FOverwrite.h"
-#import "FNode.h"
-#import "FOperationSource.h"
-
-@interface FOverwrite ()
-@property(nonatomic, strong, readwrite) FOperationSource *source;
-@property(nonatomic, readwrite) FOperationType type;
-@property(nonatomic, strong, readwrite) FPath *path;
-@property(nonatomic, strong) id<FNode> snap;
-@end
-
-@implementation FOverwrite
-
-@synthesize source;
-@synthesize type;
-@synthesize path;
-@synthesize snap;
-
-- (id)initWithSource:(FOperationSource *)aSource
-                path:(FPath *)aPath
-                snap:(id<FNode>)aSnap {
-    self = [super init];
-    if (self) {
-        self.source = aSource;
-        self.type = FOperationTypeOverwrite;
-        self.path = aPath;
-        self.snap = aSnap;
-    }
-    return self;
-}
-
-- (FOverwrite *)operationForChild:(NSString *)childKey {
-    if ([self.path isEmpty]) {
-        return [[FOverwrite alloc]
-            initWithSource:self.source
-                      path:[FPath empty]
-                      snap:[self.snap getImmediateChild:childKey]];
-    } else {
-        return [[FOverwrite alloc] initWithSource:self.source
-                                             path:[self.path popFront]
-                                             snap:self.snap];
-    }
-}
-
-- (NSString *)description {
-    return [NSString
-        stringWithFormat:@"FOverwrite { path=%@, source=%@, snapshot=%@ }",
-                         self.path, self.source, self.snap];
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FIRRetryHelper.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FIRRetryHelper.h
deleted file mode 100644
index a63d0d8..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FIRRetryHelper.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@interface FIRRetryHelper : NSObject
-
-- (instancetype)initWithDispatchQueue:(dispatch_queue_t)dispatchQueue
-            minRetryDelayAfterFailure:(NSTimeInterval)minRetryDelayAfterFailure
-                        maxRetryDelay:(NSTimeInterval)maxRetryDelay
-                        retryExponent:(double)retryExponent
-                         jitterFactor:(double)jitterFactor;
-
-- (void)retry:(void (^)(void))block;
-
-- (void)cancel;
-
-- (void)signalSuccess;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FIRRetryHelper.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FIRRetryHelper.m
deleted file mode 100644
index ef24d12..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FIRRetryHelper.m
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FIRRetryHelper.h"
-#import "FUtilities.h"
-#import <FirebaseCore/FIRLogger.h>
-
-@interface FIRRetryHelperTask : NSObject
-
-@property(nonatomic, strong) void (^block)(void);
-
-@end
-
-@implementation FIRRetryHelperTask
-
-- (instancetype)initWithBlock:(void (^)(void))block {
-    self = [super init];
-    if (self != nil) {
-        self->_block = [block copy];
-    }
-    return self;
-}
-
-- (BOOL)isCanceled {
-    return self.block == nil;
-}
-
-- (void)cancel {
-    self.block = nil;
-}
-
-- (void)execute {
-    if (self.block) {
-        self.block();
-    }
-}
-
-@end
-
-@interface FIRRetryHelper ()
-
-@property(nonatomic, strong) dispatch_queue_t dispatchQueue;
-@property(nonatomic) NSTimeInterval minRetryDelayAfterFailure;
-@property(nonatomic) NSTimeInterval maxRetryDelay;
-@property(nonatomic) double retryExponent;
-@property(nonatomic) double jitterFactor;
-
-@property(nonatomic) BOOL lastWasSuccess;
-@property(nonatomic) NSTimeInterval currentRetryDelay;
-
-@property(nonatomic, strong) FIRRetryHelperTask *scheduledRetry;
-
-@end
-
-@implementation FIRRetryHelper
-
-- (instancetype)initWithDispatchQueue:(dispatch_queue_t)dispatchQueue
-            minRetryDelayAfterFailure:(NSTimeInterval)minRetryDelayAfterFailure
-                        maxRetryDelay:(NSTimeInterval)maxRetryDelay
-                        retryExponent:(double)retryExponent
-                         jitterFactor:(double)jitterFactor {
-    self = [super init];
-    if (self != nil) {
-        self->_dispatchQueue = dispatchQueue;
-        self->_minRetryDelayAfterFailure = minRetryDelayAfterFailure;
-        self->_maxRetryDelay = maxRetryDelay;
-        self->_retryExponent = retryExponent;
-        self->_jitterFactor = jitterFactor;
-        self->_lastWasSuccess = YES;
-    }
-    return self;
-}
-
-- (void)retry:(void (^)(void))block {
-    if (self.scheduledRetry != nil) {
-        FFLog(@"I-RDB054001", @"Canceling existing retry attempt");
-        [self.scheduledRetry cancel];
-        self.scheduledRetry = nil;
-    }
-
-    NSTimeInterval delay;
-    if (self.lastWasSuccess) {
-        delay = 0;
-    } else {
-        if (self.currentRetryDelay == 0) {
-            self.currentRetryDelay = self.minRetryDelayAfterFailure;
-        } else {
-            NSTimeInterval newDelay =
-                (self.currentRetryDelay * self.retryExponent);
-            self.currentRetryDelay = MIN(newDelay, self.maxRetryDelay);
-        }
-
-        delay = ((1 - self.jitterFactor) * self.currentRetryDelay) +
-                (self.jitterFactor * self.currentRetryDelay *
-                 [FUtilities randomDouble]);
-        FFLog(@"I-RDB054002", @"Scheduling retry in %fs", delay);
-    }
-    self.lastWasSuccess = NO;
-    FIRRetryHelperTask *task = [[FIRRetryHelperTask alloc] initWithBlock:block];
-    self.scheduledRetry = task;
-    dispatch_time_t popTime =
-        dispatch_time(DISPATCH_TIME_NOW, (long long)(delay * NSEC_PER_SEC));
-    dispatch_after(popTime, self.dispatchQueue, ^{
-      if (![task isCanceled]) {
-          self.scheduledRetry = nil;
-          [task execute];
-      }
-    });
-}
-
-- (void)signalSuccess {
-    self.lastWasSuccess = YES;
-    self.currentRetryDelay = 0;
-}
-
-- (void)cancel {
-    if (self.scheduledRetry != nil) {
-        FFLog(@"I-RDB054003", @"Canceling existing retry attempt");
-        [self.scheduledRetry cancel];
-        self.scheduledRetry = nil;
-    } else {
-        FFLog(@"I-RDB054004", @"No existing retry attempt to cancel");
-    }
-    self.currentRetryDelay = 0;
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FImmutableTree.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FImmutableTree.h
deleted file mode 100644
index e6d4961..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FImmutableTree.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FImmutableSortedDictionary.h"
-#import "FPath.h"
-#import "FTuplePathValue.h"
-
-@interface FImmutableTree : NSObject
-
-- (id)initWithValue:(id)aValue;
-- (id)initWithValue:(id)aValue
-           children:(FImmutableSortedDictionary *)childrenMap;
-
-+ (FImmutableTree *)empty;
-- (BOOL)isEmpty;
-
-- (FTuplePathValue *)findRootMostMatchingPath:(FPath *)relativePath
-                                    predicate:(BOOL (^)(id))predicate;
-- (FTuplePathValue *)findRootMostValueAndPath:(FPath *)relativePath;
-- (FImmutableTree *)subtreeAtPath:(FPath *)relativePath;
-- (FImmutableTree *)setValue:(id)newValue atPath:(FPath *)relativePath;
-- (FImmutableTree *)removeValueAtPath:(FPath *)relativePath;
-- (id)valueAtPath:(FPath *)relativePath;
-- (id)rootMostValueOnPath:(FPath *)path;
-- (id)rootMostValueOnPath:(FPath *)path matching:(BOOL (^)(id))predicate;
-- (id)leafMostValueOnPath:(FPath *)path;
-- (id)leafMostValueOnPath:(FPath *)relativePath
-                 matching:(BOOL (^)(id))predicate;
-- (BOOL)containsValueMatching:(BOOL (^)(id))predicate;
-- (FImmutableTree *)setTree:(FImmutableTree *)newTree
-                     atPath:(FPath *)relativePath;
-- (id)foldWithBlock:(id (^)(FPath *path, id value,
-                            NSDictionary *foldedChildren))block;
-- (id)findOnPath:(FPath *)path
-    andApplyBlock:(id (^)(FPath *path, id value))block;
-- (FPath *)forEachOnPath:(FPath *)path
-              whileBlock:(BOOL (^)(FPath *path, id value))block;
-- (FImmutableTree *)forEachOnPath:(FPath *)path
-                     performBlock:(void (^)(FPath *path, id value))block;
-- (void)forEach:(void (^)(FPath *path, id value))block;
-- (void)forEachChild:(void (^)(NSString *childKey, id childValue))block;
-
-@property(nonatomic, strong, readonly) id value;
-@property(nonatomic, strong, readonly) FImmutableSortedDictionary *children;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FImmutableTree.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FImmutableTree.m
deleted file mode 100644
index 34e62ae..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FImmutableTree.m
+++ /dev/null
@@ -1,486 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FImmutableTree.h"
-#import "FImmutableSortedDictionary.h"
-#import "FPath.h"
-#import "FUtilities.h"
-
-@interface FImmutableTree ()
-@property(nonatomic, strong, readwrite) id value;
-/**
- * Maps NSString -> FImmutableTree<T>, where <T> is type of value.
- */
-@property(nonatomic, strong, readwrite) FImmutableSortedDictionary *children;
-@end
-
-@implementation FImmutableTree
-@synthesize value;
-@synthesize children;
-
-- (id)initWithValue:(id)aValue {
-    self = [super init];
-    if (self) {
-        self.value = aValue;
-        self.children = [FImmutableTree emptyChildren];
-    }
-    return self;
-}
-
-- (id)initWithValue:(id)aValue
-           children:(FImmutableSortedDictionary *)childrenMap {
-    self = [super init];
-    if (self) {
-        self.value = aValue;
-        self.children = childrenMap;
-    }
-    return self;
-}
-
-+ (FImmutableSortedDictionary *)emptyChildren {
-    static dispatch_once_t emptyChildrenToken;
-    static FImmutableSortedDictionary *emptyChildren;
-    dispatch_once(&emptyChildrenToken, ^{
-      emptyChildren = [FImmutableSortedDictionary
-          dictionaryWithComparator:[FUtilities stringComparator]];
-    });
-    return emptyChildren;
-}
-
-+ (FImmutableTree *)empty {
-    static dispatch_once_t emptyImmutableTreeToken;
-    static FImmutableTree *emptyTree = nil;
-    dispatch_once(&emptyImmutableTreeToken, ^{
-      emptyTree = [[FImmutableTree alloc] initWithValue:nil];
-    });
-    return emptyTree;
-}
-
-- (BOOL)isEmpty {
-    return self.value == nil && [self.children isEmpty];
-}
-
-/**
- * Given a path and a predicate, return the first node and the path to that node
- * where the predicate returns true
- * // TODO Do a perf test. If we're creating a bunch of FTuplePathValue objects
- * on the way back out, it may be better to pass down a pathSoFar FPath
- */
-- (FTuplePathValue *)findRootMostMatchingPath:(FPath *)relativePath
-                                    predicate:(BOOL (^)(id value))predicate {
-    if (self.value != nil && predicate(self.value)) {
-        return [[FTuplePathValue alloc] initWithPath:[FPath empty]
-                                               value:self.value];
-    } else {
-        if ([relativePath isEmpty]) {
-            return nil;
-        } else {
-            NSString *front = [relativePath getFront];
-            FImmutableTree *child = [self.children get:front];
-            if (child != nil) {
-                FTuplePathValue *childExistingPathAndValue =
-                    [child findRootMostMatchingPath:[relativePath popFront]
-                                          predicate:predicate];
-                if (childExistingPathAndValue != nil) {
-                    FPath *fullPath = [[[FPath alloc] initWith:front]
-                        child:childExistingPathAndValue.path];
-                    return [[FTuplePathValue alloc]
-                        initWithPath:fullPath
-                               value:childExistingPathAndValue.value];
-                } else {
-                    return nil;
-                }
-            } else {
-                // No child matching path
-                return nil;
-            }
-        }
-    }
-}
-
-/**
- * Find, if it exists, the shortest subpath of the given path that points a
- * defined value in the tree
- */
-- (FTuplePathValue *)findRootMostValueAndPath:(FPath *)relativePath {
-    return [self findRootMostMatchingPath:relativePath
-                                predicate:^BOOL(__unsafe_unretained id value) {
-                                  return YES;
-                                }];
-}
-
-- (id)rootMostValueOnPath:(FPath *)path {
-    return [self rootMostValueOnPath:path
-                            matching:^BOOL(id value) {
-                              return YES;
-                            }];
-}
-
-- (id)rootMostValueOnPath:(FPath *)path matching:(BOOL (^)(id))predicate {
-    if (self.value != nil && predicate(self.value)) {
-        return self.value;
-    } else if (path.isEmpty) {
-        return nil;
-    } else {
-        return [[self.children get:path.getFront]
-            rootMostValueOnPath:[path popFront]
-                       matching:predicate];
-    }
-}
-
-- (id)leafMostValueOnPath:(FPath *)path {
-    return [self leafMostValueOnPath:path
-                            matching:^BOOL(id value) {
-                              return YES;
-                            }];
-}
-
-- (id)leafMostValueOnPath:(FPath *)relativePath
-                 matching:(BOOL (^)(id))predicate {
-    __block id currentValue = self.value;
-    __block FImmutableTree *currentTree = self;
-    [relativePath enumerateComponentsUsingBlock:^(NSString *key, BOOL *stop) {
-      currentTree = [currentTree.children get:key];
-      if (currentTree == nil) {
-          *stop = YES;
-      } else {
-          id treeValue = currentTree.value;
-          if (treeValue != nil && predicate(treeValue)) {
-              currentValue = treeValue;
-          }
-      }
-    }];
-    return currentValue;
-}
-
-- (BOOL)containsValueMatching:(BOOL (^)(id))predicate {
-    if (self.value != nil && predicate(self.value)) {
-        return YES;
-    } else {
-        __block BOOL found = NO;
-        [self.children enumerateKeysAndObjectsUsingBlock:^(
-                           NSString *key, FImmutableTree *subtree, BOOL *stop) {
-          found = [subtree containsValueMatching:predicate];
-          if (found)
-              *stop = YES;
-        }];
-        return found;
-    }
-}
-
-- (FImmutableTree *)subtreeAtPath:(FPath *)relativePath {
-    if ([relativePath isEmpty]) {
-        return self;
-    } else {
-        NSString *front = [relativePath getFront];
-        FImmutableTree *childTree = [self.children get:front];
-        if (childTree != nil) {
-            return [childTree subtreeAtPath:[relativePath popFront]];
-        } else {
-            return [FImmutableTree empty];
-        }
-    }
-}
-
-/**
- * Sets a value at the specified path
- */
-- (FImmutableTree *)setValue:(id)newValue atPath:(FPath *)relativePath {
-    if ([relativePath isEmpty]) {
-        return [[FImmutableTree alloc] initWithValue:newValue
-                                            children:self.children];
-    } else {
-        NSString *front = [relativePath getFront];
-        FImmutableTree *child = [self.children get:front];
-        if (child == nil) {
-            child = [FImmutableTree empty];
-        }
-        FImmutableTree *newChild = [child setValue:newValue
-                                            atPath:[relativePath popFront]];
-        FImmutableSortedDictionary *newChildren =
-            [self.children insertKey:front withValue:newChild];
-        return [[FImmutableTree alloc] initWithValue:self.value
-                                            children:newChildren];
-    }
-}
-
-/**
- * Remove the value at the specified path
- */
-- (FImmutableTree *)removeValueAtPath:(FPath *)relativePath {
-    if ([relativePath isEmpty]) {
-        if ([self.children isEmpty]) {
-            return [FImmutableTree empty];
-        } else {
-            return [[FImmutableTree alloc] initWithValue:nil
-                                                children:self.children];
-        }
-    } else {
-        NSString *front = [relativePath getFront];
-        FImmutableTree *child = [self.children get:front];
-        if (child) {
-            FImmutableTree *newChild =
-                [child removeValueAtPath:[relativePath popFront]];
-            FImmutableSortedDictionary *newChildren;
-            if ([newChild isEmpty]) {
-                newChildren = [self.children removeKey:front];
-            } else {
-                newChildren = [self.children insertKey:front
-                                             withValue:newChild];
-            }
-            if (self.value == nil && [newChildren isEmpty]) {
-                return [FImmutableTree empty];
-            } else {
-                return [[FImmutableTree alloc] initWithValue:self.value
-                                                    children:newChildren];
-            }
-        } else {
-            return self;
-        }
-    }
-}
-
-/**
- * Gets a value from the tree
- */
-- (id)valueAtPath:(FPath *)relativePath {
-    if ([relativePath isEmpty]) {
-        return self.value;
-    } else {
-        NSString *front = [relativePath getFront];
-        FImmutableTree *child = [self.children get:front];
-        if (child) {
-            return [child valueAtPath:[relativePath popFront]];
-        } else {
-            return nil;
-        }
-    }
-}
-
-/**
- * Replaces the subtree at the specified path with the given new tree
- */
-- (FImmutableTree *)setTree:(FImmutableTree *)newTree
-                     atPath:(FPath *)relativePath {
-    if ([relativePath isEmpty]) {
-        return newTree;
-    } else {
-        NSString *front = [relativePath getFront];
-        FImmutableTree *child = [self.children get:front];
-        if (child == nil) {
-            child = [FImmutableTree empty];
-        }
-        FImmutableTree *newChild = [child setTree:newTree
-                                           atPath:[relativePath popFront]];
-        FImmutableSortedDictionary *newChildren;
-        if ([newChild isEmpty]) {
-            newChildren = [self.children removeKey:front];
-        } else {
-            newChildren = [self.children insertKey:front withValue:newChild];
-        }
-        return [[FImmutableTree alloc] initWithValue:self.value
-                                            children:newChildren];
-    }
-}
-
-/**
- * Performs a depth first fold on this tree. Transforms a tree into a single
- * value, given a function that operates on the path to a node, an optional
- * current value, and a map of the child names to folded subtrees
- */
-- (id)foldWithBlock:(id (^)(FPath *path, id value,
-                            NSDictionary *foldedChildren))block {
-    return [self foldWithPathSoFar:[FPath empty] withBlock:block];
-}
-
-/**
- * Recursive helper for public facing foldWithBlock: method
- */
-- (id)foldWithPathSoFar:(FPath *)pathSoFar
-              withBlock:(id (^)(FPath *path, id value,
-                                NSDictionary *foldedChildren))block {
-    __block NSMutableDictionary *accum = [[NSMutableDictionary alloc] init];
-    [self.children
-        enumerateKeysAndObjectsUsingBlock:^(
-            NSString *childKey, FImmutableTree *childTree, BOOL *stop) {
-          accum[childKey] =
-              [childTree foldWithPathSoFar:[pathSoFar childFromString:childKey]
-                                 withBlock:block];
-        }];
-    return block(pathSoFar, self.value, accum);
-}
-
-/**
- * Find the first matching value on the given path. Return the result of
- * applying block to it.
- */
-- (id)findOnPath:(FPath *)path
-    andApplyBlock:(id (^)(FPath *path, id value))block {
-    return [self findOnPath:path pathSoFar:[FPath empty] andApplyBlock:block];
-}
-
-- (id)findOnPath:(FPath *)pathToFollow
-        pathSoFar:(FPath *)pathSoFar
-    andApplyBlock:(id (^)(FPath *path, id value))block {
-    id result = self.value ? block(pathSoFar, self.value) : nil;
-    if (result != nil) {
-        return result;
-    } else {
-        if ([pathToFollow isEmpty]) {
-            return nil;
-        } else {
-            NSString *front = [pathToFollow getFront];
-            FImmutableTree *nextChild = [self.children get:front];
-            if (nextChild != nil) {
-                return [nextChild findOnPath:[pathToFollow popFront]
-                                   pathSoFar:[pathSoFar childFromString:front]
-                               andApplyBlock:block];
-            } else {
-                return nil;
-            }
-        }
-    }
-}
-/**
- * Call the block on each value along the path for as long as that function
- * returns true
- * @return The path to the deepest location inspected
- */
-- (FPath *)forEachOnPath:(FPath *)path whileBlock:(BOOL (^)(FPath *, id))block {
-    return [self forEachOnPath:path pathSoFar:[FPath empty] whileBlock:block];
-}
-
-- (FPath *)forEachOnPath:(FPath *)pathToFollow
-               pathSoFar:(FPath *)pathSoFar
-              whileBlock:(BOOL (^)(FPath *, id))block {
-    if ([pathToFollow isEmpty]) {
-        if (self.value) {
-            block(pathSoFar, self.value);
-        }
-        return pathSoFar;
-    } else {
-        BOOL shouldContinue = YES;
-        if (self.value) {
-            shouldContinue = block(pathSoFar, self.value);
-        }
-        if (shouldContinue) {
-            NSString *front = [pathToFollow getFront];
-            FImmutableTree *nextChild = [self.children get:front];
-            if (nextChild) {
-                return
-                    [nextChild forEachOnPath:[pathToFollow popFront]
-                                   pathSoFar:[pathSoFar childFromString:front]
-                                  whileBlock:block];
-            } else {
-                return pathSoFar;
-            }
-        } else {
-            return pathSoFar;
-        }
-    }
-}
-
-- (FImmutableTree *)forEachOnPath:(FPath *)path
-                     performBlock:(void (^)(FPath *path, id value))block {
-    return [self forEachOnPath:path pathSoFar:[FPath empty] performBlock:block];
-}
-
-- (FImmutableTree *)forEachOnPath:(FPath *)pathToFollow
-                        pathSoFar:(FPath *)pathSoFar
-                     performBlock:(void (^)(FPath *path, id value))block {
-    if ([pathToFollow isEmpty]) {
-        return self;
-    } else {
-        if (self.value) {
-            block(pathSoFar, self.value);
-        }
-        NSString *front = [pathToFollow getFront];
-        FImmutableTree *nextChild = [self.children get:front];
-        if (nextChild) {
-            return [nextChild forEachOnPath:[pathToFollow popFront]
-                                  pathSoFar:[pathSoFar childFromString:front]
-                               performBlock:block];
-        } else {
-            return [FImmutableTree empty];
-        }
-    }
-}
-/**
- * Calls the given block for each node in the tree that has a value. Called in
- * depth-first order
- */
-- (void)forEach:(void (^)(FPath *path, id value))block {
-    [self forEachPathSoFar:[FPath empty] withBlock:block];
-}
-
-- (void)forEachPathSoFar:(FPath *)pathSoFar
-               withBlock:(void (^)(FPath *path, id value))block {
-    [self.children
-        enumerateKeysAndObjectsUsingBlock:^(
-            NSString *childKey, FImmutableTree *childTree, BOOL *stop) {
-          [childTree forEachPathSoFar:[pathSoFar childFromString:childKey]
-                            withBlock:block];
-        }];
-    if (self.value) {
-        block(pathSoFar, self.value);
-    }
-}
-
-- (void)forEachChild:(void (^)(NSString *childKey, id childValue))block {
-    [self.children
-        enumerateKeysAndObjectsUsingBlock:^(
-            NSString *childKey, FImmutableTree *childTree, BOOL *stop) {
-          if (childTree.value) {
-              block(childKey, childTree.value);
-          }
-        }];
-}
-
-- (BOOL)isEqual:(id)object {
-    if (![object isKindOfClass:[FImmutableTree class]]) {
-        return NO;
-    }
-    FImmutableTree *other = (FImmutableTree *)object;
-    return (self.value == other.value || [self.value isEqual:other.value]) &&
-           [self.children isEqual:other.children];
-}
-
-- (NSUInteger)hash {
-    return self.children.hash * 31 + [self.value hash];
-}
-
-- (NSString *)description {
-    NSMutableString *string = [[NSMutableString alloc] init];
-    [string appendString:@"FImmutableTree { value="];
-    [string appendString:(self.value ? [self.value description] : @"<nil>")];
-    [string appendString:@", children={"];
-    [self.children
-        enumerateKeysAndObjectsUsingBlock:^(
-            NSString *childKey, FImmutableTree *childTree, BOOL *stop) {
-          [string appendString:@" "];
-          [string appendString:childKey];
-          [string appendString:@"="];
-          [string appendString:[childTree.value description]];
-        }];
-    [string appendString:@" } }"];
-    return [NSString stringWithString:string];
-}
-
-- (NSString *)debugDescription {
-    return [self description];
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FPath.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FPath.h
deleted file mode 100644
index cfa86aa..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FPath.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@interface FPath : NSObject <NSCopying>
-
-+ (FPath *)relativePathFrom:(FPath *)outer to:(FPath *)inner;
-+ (FPath *)empty;
-+ (FPath *)pathWithString:(NSString *)string;
-
-- (id)initWith:(NSString *)path;
-- (id)initWithPieces:(NSArray *)somePieces andPieceNum:(NSInteger)aPieceNum;
-
-- (id)copyWithZone:(NSZone *)zone;
-
-- (void)enumerateComponentsUsingBlock:(void (^)(NSString *key,
-                                                BOOL *stop))block;
-- (NSString *)getFront;
-- (NSUInteger)length;
-- (FPath *)popFront;
-- (NSString *)getBack;
-- (NSString *)toString;
-- (NSString *)toStringWithTrailingSlash;
-- (NSString *)wireFormat;
-- (FPath *)parent;
-- (FPath *)child:(FPath *)childPathObj;
-- (FPath *)childFromString:(NSString *)childPath;
-- (BOOL)isEmpty;
-- (BOOL)contains:(FPath *)other;
-- (NSComparisonResult)compare:(FPath *)other;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FPath.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FPath.m
deleted file mode 100644
index f655240..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FPath.m
+++ /dev/null
@@ -1,304 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FPath.h"
-
-#import "FUtilities.h"
-
-@interface FPath ()
-
-@property(nonatomic, readwrite, assign) NSInteger pieceNum;
-@property(nonatomic, strong) NSArray *pieces;
-
-@end
-
-@implementation FPath
-
-#pragma mark -
-#pragma mark Initializers
-
-+ (FPath *)relativePathFrom:(FPath *)outer to:(FPath *)inner {
-    NSString *outerFront = [outer getFront];
-    NSString *innerFront = [inner getFront];
-    if (outerFront == nil) {
-        return inner;
-    } else if ([outerFront isEqualToString:innerFront]) {
-        return [self relativePathFrom:[outer popFront] to:[inner popFront]];
-    } else {
-        @throw [[NSException alloc]
-            initWithName:@"FirebaseDatabaseInternalError"
-                  reason:[NSString
-                             stringWithFormat:
-                                 @"innerPath (%@) is not within outerPath (%@)",
-                                 inner, outer]
-                userInfo:nil];
-    }
-}
-
-+ (FPath *)pathWithString:(NSString *)string {
-    return [[FPath alloc] initWith:string];
-}
-
-- (id)initWith:(NSString *)path {
-    self = [super init];
-    if (self) {
-        NSArray *pathPieces = [path componentsSeparatedByString:@"/"];
-        NSMutableArray *newPieces = [[NSMutableArray alloc] init];
-        for (NSInteger i = 0; i < pathPieces.count; i++) {
-            NSString *piece = [pathPieces objectAtIndex:i];
-            if (piece.length > 0) {
-                [newPieces addObject:piece];
-            }
-        }
-
-        self.pieces = newPieces;
-        self.pieceNum = 0;
-    }
-    return self;
-}
-
-- (id)initWithPieces:(NSArray *)somePieces andPieceNum:(NSInteger)aPieceNum {
-    self = [super init];
-    if (self) {
-        self.pieceNum = aPieceNum;
-        self.pieces = somePieces;
-    }
-    return self;
-}
-
-- (id)copyWithZone:(NSZone *)zone {
-    // Immutable, so it's safe to return self
-    return self;
-}
-
-- (NSString *)description {
-    return [self toString];
-}
-
-#pragma mark -
-#pragma mark Public methods
-
-- (NSString *)getFront {
-    if (self.pieceNum >= self.pieces.count) {
-        return nil;
-    }
-    return [self.pieces objectAtIndex:self.pieceNum];
-}
-
-/**
- * @return The number of segments in this path
- */
-- (NSUInteger)length {
-    return self.pieces.count - self.pieceNum;
-}
-
-- (FPath *)popFront {
-    NSInteger newPieceNum = self.pieceNum;
-    if (newPieceNum < self.pieces.count) {
-        newPieceNum++;
-    }
-    return [[FPath alloc] initWithPieces:self.pieces andPieceNum:newPieceNum];
-}
-
-- (NSString *)getBack {
-    if (self.pieceNum < self.pieces.count) {
-        return [self.pieces lastObject];
-    } else {
-        return nil;
-    }
-}
-
-- (NSString *)toString {
-    return [self toStringWithTrailingSlash:NO];
-}
-
-- (NSString *)toStringWithTrailingSlash {
-    return [self toStringWithTrailingSlash:YES];
-}
-
-- (NSString *)toStringWithTrailingSlash:(BOOL)trailingSlash {
-    NSMutableString *pathString = [[NSMutableString alloc] init];
-    for (NSInteger i = self.pieceNum; i < self.pieces.count; i++) {
-        [pathString appendString:@"/"];
-        [pathString appendString:[self.pieces objectAtIndex:i]];
-    }
-    if ([pathString length] == 0) {
-        return @"/";
-    } else {
-        if (trailingSlash) {
-            [pathString appendString:@"/"];
-        }
-        return pathString;
-    }
-}
-
-- (NSString *)wireFormat {
-    if ([self isEmpty]) {
-        return @"/";
-    } else {
-        NSMutableString *pathString = [[NSMutableString alloc] init];
-        for (NSInteger i = self.pieceNum; i < self.pieces.count; i++) {
-            if (i > self.pieceNum) {
-                [pathString appendString:@"/"];
-            }
-            [pathString appendString:[self.pieces objectAtIndex:i]];
-        }
-        return pathString;
-    }
-}
-
-- (FPath *)parent {
-    if (self.pieceNum >= self.pieces.count) {
-        return nil;
-    } else {
-        NSMutableArray *newPieces = [[NSMutableArray alloc] init];
-        for (NSInteger i = self.pieceNum; i < self.pieces.count - 1; i++) {
-            [newPieces addObject:[self.pieces objectAtIndex:i]];
-        }
-        return [[FPath alloc] initWithPieces:newPieces andPieceNum:0];
-    }
-}
-
-- (FPath *)child:(FPath *)childPathObj {
-    NSMutableArray *newPieces = [[NSMutableArray alloc] init];
-    for (NSInteger i = self.pieceNum; i < self.pieces.count; i++) {
-        [newPieces addObject:[self.pieces objectAtIndex:i]];
-    }
-
-    for (NSInteger i = childPathObj.pieceNum; i < childPathObj.pieces.count;
-         i++) {
-        [newPieces addObject:[childPathObj.pieces objectAtIndex:i]];
-    }
-
-    return [[FPath alloc] initWithPieces:newPieces andPieceNum:0];
-}
-
-- (FPath *)childFromString:(NSString *)childPath {
-    NSMutableArray *newPieces = [[NSMutableArray alloc] init];
-    for (NSInteger i = self.pieceNum; i < self.pieces.count; i++) {
-        [newPieces addObject:[self.pieces objectAtIndex:i]];
-    }
-
-    NSArray *pathPieces = [childPath componentsSeparatedByString:@"/"];
-    for (unsigned int i = 0; i < pathPieces.count; i++) {
-        NSString *piece = [pathPieces objectAtIndex:i];
-        if (piece.length > 0) {
-            [newPieces addObject:piece];
-        }
-    }
-
-    return [[FPath alloc] initWithPieces:newPieces andPieceNum:0];
-}
-
-/**
- * @return True if there are no segments in this path
- */
-- (BOOL)isEmpty {
-    return self.pieceNum >= self.pieces.count;
-}
-
-/**
- * @return Singleton to represent an empty path
- */
-+ (FPath *)empty {
-    static dispatch_once_t oneEmptyPath;
-    static FPath *emptyPath;
-    dispatch_once(&oneEmptyPath, ^{
-      emptyPath = [[FPath alloc] initWith:@""];
-    });
-    return emptyPath;
-}
-
-- (BOOL)contains:(FPath *)other {
-    if (self.length > other.length) {
-        return NO;
-    }
-
-    NSInteger i = self.pieceNum;
-    NSInteger j = other.pieceNum;
-    while (i < self.pieces.count) {
-        NSString *thisSeg = [self.pieces objectAtIndex:i];
-        NSString *otherSeg = [other.pieces objectAtIndex:j];
-        if (![thisSeg isEqualToString:otherSeg]) {
-            return NO;
-        }
-        ++i;
-        ++j;
-    }
-    return YES;
-}
-
-- (void)enumerateComponentsUsingBlock:(void (^)(NSString *, BOOL *))block {
-    BOOL stop = NO;
-    for (NSInteger i = self.pieceNum; !stop && i < self.pieces.count; i++) {
-        block(self.pieces[i], &stop);
-    }
-}
-
-- (NSComparisonResult)compare:(FPath *)other {
-    NSInteger myCount = self.pieces.count;
-    NSInteger otherCount = other.pieces.count;
-    for (NSInteger i = self.pieceNum, j = other.pieceNum;
-         i < myCount && j < otherCount; i++, j++) {
-        NSComparisonResult comparison = [FUtilities compareKey:self.pieces[i]
-                                                         toKey:other.pieces[j]];
-        if (comparison != NSOrderedSame) {
-            return comparison;
-        }
-    }
-    if (self.length < other.length) {
-        return NSOrderedAscending;
-    } else if (other.length < self.length) {
-        return NSOrderedDescending;
-    } else {
-        NSAssert(self.length == other.length,
-                 @"Paths must be the same lengths");
-        return NSOrderedSame;
-    }
-}
-
-/**
- * @return YES if paths are the same
- */
-- (BOOL)isEqual:(id)other {
-    if (other == self) {
-        return YES;
-    }
-    if (!other || ![other isKindOfClass:[self class]]) {
-        return NO;
-    }
-    FPath *otherPath = (FPath *)other;
-    if (self.length != otherPath.length) {
-        return NO;
-    }
-    for (NSUInteger i = self.pieceNum, j = otherPath.pieceNum;
-         i < self.pieces.count; i++, j++) {
-        if (![self.pieces[i] isEqualToString:otherPath.pieces[j]]) {
-            return NO;
-        }
-    }
-    return YES;
-}
-
-- (NSUInteger)hash {
-    NSUInteger hashCode = 0;
-    for (NSInteger i = self.pieceNum; i < self.pieces.count; i++) {
-        hashCode = hashCode * 37 + [self.pieces[i] hash];
-    }
-    return hashCode;
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FTree.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FTree.h
deleted file mode 100644
index d5c77ab..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FTree.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FPath.h"
-#import "FTreeNode.h"
-#import <Foundation/Foundation.h>
-
-@interface FTree : NSObject
-
-- (id)init;
-- (id)initWithName:(NSString *)aName
-        withParent:(FTree *)aParent
-          withNode:(FTreeNode *)aNode;
-
-- (FTree *)subTree:(FPath *)path;
-- (id)getValue;
-- (void)setValue:(id)value;
-- (void)clear;
-- (BOOL)hasChildren;
-- (BOOL)isEmpty;
-- (void)forEachChildMutationSafe:(void (^)(FTree *))action;
-- (void)forEachChild:(void (^)(FTree *))action;
-- (void)forEachDescendant:(void (^)(FTree *))action;
-- (void)forEachDescendant:(void (^)(FTree *))action
-              includeSelf:(BOOL)incSelf
-            childrenFirst:(BOOL)childFirst;
-- (BOOL)forEachAncestor:(BOOL (^)(FTree *))action;
-- (BOOL)forEachAncestor:(BOOL (^)(FTree *))action includeSelf:(BOOL)incSelf;
-- (void)forEachImmediateDescendantWithValue:(void (^)(FTree *))action;
-- (BOOL)valueExistsAtOrAbove:(FPath *)path;
-- (FPath *)path;
-- (void)updateParents;
-- (void)updateChild:(NSString *)childName withNode:(FTree *)child;
-
-@property(nonatomic, strong) NSString *name;
-@property(nonatomic, strong) FTree *parent;
-@property(nonatomic, strong) FTreeNode *node;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FTree.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FTree.m
deleted file mode 100644
index 209b59f..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FTree.m
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FTree.h"
-#import "FPath.h"
-#import "FTreeNode.h"
-#import "FUtilities.h"
-
-@implementation FTree
-
-@synthesize name;
-@synthesize parent;
-@synthesize node;
-
-- (id)init {
-    self = [super init];
-    if (self) {
-        self.name = @"";
-        self.parent = nil;
-        self.node = [[FTreeNode alloc] init];
-    }
-    return self;
-}
-
-- (id)initWithName:(NSString *)aName
-        withParent:(FTree *)aParent
-          withNode:(FTreeNode *)aNode {
-    self = [super init];
-    if (self) {
-        self.name = aName != nil ? aName : @"";
-        self.parent = aParent != nil ? aParent : nil;
-        self.node = aNode != nil ? aNode : [[FTreeNode alloc] init];
-    }
-    return self;
-}
-
-- (FTree *)subTree:(FPath *)path {
-    FTree *child = self;
-    NSString *next = [path getFront];
-    while (next != nil) {
-        FTreeNode *childNode = child.node.children[next];
-        if (childNode == nil) {
-            childNode = [[FTreeNode alloc] init];
-        }
-        child = [[FTree alloc] initWithName:next
-                                 withParent:child
-                                   withNode:childNode];
-        path = [path popFront];
-        next = [path getFront];
-    }
-    return child;
-}
-
-- (id)getValue {
-    return self.node.value;
-}
-
-- (void)setValue:(id)value {
-    self.node.value = value;
-    [self updateParents];
-}
-
-- (void)clear {
-    self.node.value = nil;
-    [self.node.children removeAllObjects];
-    self.node.childCount = 0;
-    [self updateParents];
-}
-
-- (BOOL)hasChildren {
-    return self.node.childCount > 0;
-}
-
-- (BOOL)isEmpty {
-    return [self getValue] == nil && ![self hasChildren];
-}
-
-- (void)forEachChild:(void (^)(FTree *))action {
-    for (NSString *key in self.node.children) {
-        action([[FTree alloc]
-            initWithName:key
-              withParent:self
-                withNode:[self.node.children objectForKey:key]]);
-    }
-}
-
-- (void)forEachChildMutationSafe:(void (^)(FTree *))action {
-    for (NSString *key in [self.node.children copy]) {
-        action([[FTree alloc]
-            initWithName:key
-              withParent:self
-                withNode:[self.node.children objectForKey:key]]);
-    }
-}
-
-- (void)forEachDescendant:(void (^)(FTree *))action {
-    [self forEachDescendant:action includeSelf:NO childrenFirst:NO];
-}
-
-- (void)forEachDescendant:(void (^)(FTree *))action
-              includeSelf:(BOOL)incSelf
-            childrenFirst:(BOOL)childFirst {
-    if (incSelf && !childFirst) {
-        action(self);
-    }
-
-    [self forEachChild:^(FTree *child) {
-      [child forEachDescendant:action includeSelf:YES childrenFirst:childFirst];
-    }];
-
-    if (incSelf && childFirst) {
-        action(self);
-    }
-}
-
-- (BOOL)forEachAncestor:(BOOL (^)(FTree *))action {
-    return [self forEachAncestor:action includeSelf:NO];
-}
-
-- (BOOL)forEachAncestor:(BOOL (^)(FTree *))action includeSelf:(BOOL)incSelf {
-    FTree *aNode = (incSelf) ? self : self.parent;
-    while (aNode != nil) {
-        if (action(aNode)) {
-            return YES;
-        }
-        aNode = aNode.parent;
-    }
-    return NO;
-}
-
-- (void)forEachImmediateDescendantWithValue:(void (^)(FTree *))action {
-    [self forEachChild:^(FTree *child) {
-      if ([child getValue] != nil) {
-          action(child);
-      } else {
-          [child forEachImmediateDescendantWithValue:action];
-      }
-    }];
-}
-
-- (BOOL)valueExistsAtOrAbove:(FPath *)path {
-    FTreeNode *aNode = self.node;
-    while (aNode != nil) {
-        if (aNode.value != nil) {
-            return YES;
-        }
-        aNode = [aNode.children objectForKey:path.getFront];
-        path = [path popFront];
-    }
-    // XXX Check with Michael if this is correct; deviates from JS.
-    return NO;
-}
-
-- (FPath *)path {
-    return [[FPath alloc]
-        initWith:(self.parent == nil)
-                     ? self.name
-                     : [NSString stringWithFormat:@"%@/%@", [self.parent path],
-                                                  self.name]];
-}
-
-- (void)updateParents {
-    [self.parent updateChild:self.name withNode:self];
-}
-
-- (void)updateChild:(NSString *)childName withNode:(FTree *)child {
-    BOOL childEmpty = [child isEmpty];
-    BOOL childExists = self.node.children[childName] != nil;
-    if (childEmpty && childExists) {
-        [self.node.children removeObjectForKey:childName];
-        self.node.childCount = self.node.childCount - 1;
-        [self updateParents];
-    } else if (!childEmpty && !childExists) {
-        [self.node.children setObject:child.node forKey:childName];
-        self.node.childCount = self.node.childCount + 1;
-        [self updateParents];
-    }
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FTreeNode.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FTreeNode.h
deleted file mode 100644
index 549f3b1..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FTreeNode.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@interface FTreeNode : NSObject
-
-@property(nonatomic, strong) NSMutableDictionary *children;
-@property(nonatomic, readwrite, assign) int childCount;
-@property(nonatomic, strong) id value;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FTreeNode.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FTreeNode.m
deleted file mode 100644
index bae6c62..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FTreeNode.m
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FTreeNode.h"
-
-@implementation FTreeNode
-
-@synthesize children;
-@synthesize childCount;
-@synthesize value;
-
-- (id)init {
-    self = [super init];
-    if (self) {
-        self.children = [[NSMutableDictionary alloc] init];
-        self.childCount = 0;
-        self.value = nil;
-    }
-    return self;
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FCacheNode.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FCacheNode.h
deleted file mode 100644
index eff0cb0..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FCacheNode.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@protocol FNode;
-@class FIndexedNode;
-@class FPath;
-
-/**
- * A cache node only stores complete children. Additionally it holds a flag
- * whether the node can be considered fully initialized in the sense that we
- * know at one point in time, this represented a valid state of the world, e.g.
- * initialized with data from the server, or a complete overwrite by the client.
- * It is not necessarily complete because it may have been from a tagged query.
- * The filtered flag also tracks whether a node potentially had children removed
- * due to a filter.
- */
-@interface FCacheNode : NSObject
-
-- (id)initWithIndexedNode:(FIndexedNode *)indexedNode
-       isFullyInitialized:(BOOL)fullyInitialized
-               isFiltered:(BOOL)filtered;
-
-- (BOOL)isCompleteForPath:(FPath *)path;
-- (BOOL)isCompleteForChild:(NSString *)childKey;
-
-@property(nonatomic, readonly) BOOL isFullyInitialized;
-@property(nonatomic, readonly) BOOL isFiltered;
-@property(nonatomic, strong, readonly) FIndexedNode *indexedNode;
-@property(nonatomic, strong, readonly) id<FNode> node;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FCacheNode.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FCacheNode.m
deleted file mode 100644
index a991d52..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FCacheNode.m
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FCacheNode.h"
-#import "FEmptyNode.h"
-#import "FIndexedNode.h"
-#import "FNode.h"
-#import "FPath.h"
-
-@interface FCacheNode ()
-@property(nonatomic, readwrite) BOOL isFullyInitialized;
-@property(nonatomic, readwrite) BOOL isFiltered;
-@property(nonatomic, strong, readwrite) FIndexedNode *indexedNode;
-@end
-
-@implementation FCacheNode
-- (id)initWithIndexedNode:(FIndexedNode *)indexedNode
-       isFullyInitialized:(BOOL)fullyInitialized
-               isFiltered:(BOOL)filtered {
-    self = [super init];
-    if (self) {
-        self.indexedNode = indexedNode;
-        self.isFullyInitialized = fullyInitialized;
-        self.isFiltered = filtered;
-    }
-    return self;
-}
-
-- (BOOL)isCompleteForPath:(FPath *)path {
-    if (path.isEmpty) {
-        return self.isFullyInitialized && !self.isFiltered;
-    } else {
-        NSString *childKey = [path getFront];
-        return [self isCompleteForChild:childKey];
-    }
-}
-
-- (BOOL)isCompleteForChild:(NSString *)childKey {
-    return (self.isFullyInitialized && !self.isFiltered) ||
-           [self.node hasChild:childKey];
-}
-
-- (id<FNode>)node {
-    return self.indexedNode.node;
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FCancelEvent.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FCancelEvent.h
deleted file mode 100644
index dd58642..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FCancelEvent.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FEvent.h"
-#import <Foundation/Foundation.h>
-
-@protocol FEventRegistration;
-
-@interface FCancelEvent : NSObject <FEvent>
-
-- initWithEventRegistration:(id<FEventRegistration>)eventRegistration
-                      error:(NSError *)error
-                       path:(FPath *)path;
-
-@property(nonatomic, strong, readonly) NSError *error;
-@property(nonatomic, strong, readonly) FPath *path;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FCancelEvent.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FCancelEvent.m
deleted file mode 100644
index b069a71..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FCancelEvent.m
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FCancelEvent.h"
-#import "FEventRegistration.h"
-#import "FPath.h"
-
-@interface FCancelEvent ()
-@property(nonatomic, strong) id<FEventRegistration> eventRegistration;
-@property(nonatomic, strong, readwrite) NSError *error;
-@property(nonatomic, strong, readwrite) FPath *path;
-@end
-
-@implementation FCancelEvent
-
-@synthesize eventRegistration;
-@synthesize error;
-@synthesize path;
-
-- (id)initWithEventRegistration:(id<FEventRegistration>)registration
-                          error:(NSError *)anError
-                           path:(FPath *)aPath {
-    self = [super init];
-    if (self) {
-        self.eventRegistration = registration;
-        self.error = anError;
-        self.path = aPath;
-    }
-    return self;
-}
-
-- (void)fireEventOnQueue:(dispatch_queue_t)queue {
-    [self.eventRegistration fireEvent:self queue:queue];
-}
-
-- (BOOL)isCancelEvent {
-    return YES;
-}
-
-- (NSString *)description {
-    return [NSString stringWithFormat:@"%@: cancel", self.path];
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FChange.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FChange.h
deleted file mode 100644
index 101ec8f..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FChange.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FIRDatabaseReference.h"
-#import "FIndexedNode.h"
-#import "FNode.h"
-#import <Foundation/Foundation.h>
-
-@interface FChange : NSObject
-
-@property(nonatomic, readonly) FIRDataEventType type;
-@property(nonatomic, strong, readonly) FIndexedNode *indexedNode;
-@property(nonatomic, strong, readonly) NSString *childKey;
-@property(nonatomic, strong, readonly) NSString *prevKey;
-@property(nonatomic, strong, readonly) FIndexedNode *oldIndexedNode;
-
-- (id)initWithType:(FIRDataEventType)type
-       indexedNode:(FIndexedNode *)indexedNode;
-- (id)initWithType:(FIRDataEventType)type
-       indexedNode:(FIndexedNode *)indexedNode
-          childKey:(NSString *)childKey;
-- (id)initWithType:(FIRDataEventType)type
-       indexedNode:(FIndexedNode *)indexedNode
-          childKey:(NSString *)childKey
-    oldIndexedNode:(FIndexedNode *)oldIndexedNode;
-
-- (FChange *)changeWithPrevKey:(NSString *)prevKey;
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FChange.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FChange.m
deleted file mode 100644
index 8ad1cfc..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FChange.m
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FChange.h"
-
-@interface FChange ()
-
-@property(nonatomic, strong, readwrite) NSString *prevKey;
-
-@end
-
-@implementation FChange
-
-- (id)initWithType:(FIRDataEventType)type
-       indexedNode:(FIndexedNode *)indexedNode {
-    return [self initWithType:type
-                  indexedNode:indexedNode
-                     childKey:nil
-               oldIndexedNode:nil];
-}
-
-- (id)initWithType:(FIRDataEventType)type
-       indexedNode:(FIndexedNode *)indexedNode
-          childKey:(NSString *)childKey {
-    return [self initWithType:type
-                  indexedNode:indexedNode
-                     childKey:childKey
-               oldIndexedNode:nil];
-}
-
-- (id)initWithType:(FIRDataEventType)type
-       indexedNode:(FIndexedNode *)indexedNode
-          childKey:(NSString *)childKey
-    oldIndexedNode:(FIndexedNode *)oldIndexedNode {
-    self = [super init];
-    if (self != nil) {
-        self->_type = type;
-        self->_indexedNode = indexedNode;
-        self->_childKey = childKey;
-        self->_oldIndexedNode = oldIndexedNode;
-    }
-    return self;
-}
-
-- (FChange *)changeWithPrevKey:(NSString *)prevKey {
-    FChange *newChange = [[FChange alloc] initWithType:self.type
-                                           indexedNode:self.indexedNode
-                                              childKey:self.childKey
-                                        oldIndexedNode:self.oldIndexedNode];
-    newChange.prevKey = prevKey;
-    return newChange;
-}
-
-- (NSString *)description {
-    return [NSString stringWithFormat:@"event: %d, data: %@", (int)self.type,
-                                      [self.indexedNode.node val]];
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FChildEventRegistration.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FChildEventRegistration.h
deleted file mode 100644
index 0b0c633..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FChildEventRegistration.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FEventRegistration.h"
-#import "FTypedefs.h"
-#import <Foundation/Foundation.h>
-
-@class FRepo;
-
-@interface FChildEventRegistration : NSObject <FEventRegistration>
-
-- (id)initWithRepo:(FRepo *)repo
-            handle:(FIRDatabaseHandle)fHandle
-         callbacks:(NSDictionary *)callbackBlocks
-    cancelCallback:(fbt_void_nserror)cancelCallbackBlock;
-
-/**
- * Maps FIRDataEventType (as NSNumber) to fbt_void_datasnapshot_nsstring
- */
-@property(nonatomic, copy, readonly) NSDictionary *callbacks;
-@property(nonatomic, copy, readonly) fbt_void_nserror cancelCallback;
-@property(nonatomic, readonly) FIRDatabaseHandle handle;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FChildEventRegistration.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FChildEventRegistration.m
deleted file mode 100644
index 1b688c1..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FChildEventRegistration.m
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FChildEventRegistration.h"
-#import "FCancelEvent.h"
-#import "FDataEvent.h"
-#import "FIRDataSnapshot_Private.h"
-#import "FIRDatabaseQuery_Private.h"
-#import "FQueryParams.h"
-#import "FQuerySpec.h"
-#import <FirebaseCore/FIRLogger.h>
-
-@interface FChildEventRegistration ()
-@property(nonatomic, strong) FRepo *repo;
-@property(nonatomic, copy, readwrite) NSDictionary *callbacks;
-@property(nonatomic, copy, readwrite) fbt_void_nserror cancelCallback;
-@property(nonatomic, readwrite) FIRDatabaseHandle handle;
-@end
-
-@implementation FChildEventRegistration
-
-- (id)initWithRepo:(id)repo
-            handle:(FIRDatabaseHandle)fHandle
-         callbacks:(NSDictionary *)callbackBlocks
-    cancelCallback:(fbt_void_nserror)cancelCallbackBlock {
-    self = [super init];
-    if (self) {
-        self.repo = repo;
-        self.handle = fHandle;
-        self.callbacks = callbackBlocks;
-        self.cancelCallback = cancelCallbackBlock;
-    }
-    return self;
-}
-
-- (BOOL)responseTo:(FIRDataEventType)eventType {
-    return self.callbacks != nil &&
-           [self.callbacks
-               objectForKey:[NSNumber numberWithInteger:eventType]] != nil;
-}
-
-- (FDataEvent *)createEventFrom:(FChange *)change query:(FQuerySpec *)query {
-    FIRDatabaseReference *ref = [[FIRDatabaseReference alloc]
-        initWithRepo:self.repo
-                path:[query.path childFromString:change.childKey]];
-    FIRDataSnapshot *snapshot =
-        [[FIRDataSnapshot alloc] initWithRef:ref
-                                 indexedNode:change.indexedNode];
-
-    FDataEvent *eventData =
-        [[FDataEvent alloc] initWithEventType:change.type
-                            eventRegistration:self
-                                 dataSnapshot:snapshot
-                                     prevName:change.prevKey];
-    return eventData;
-}
-
-- (void)fireEvent:(id<FEvent>)event queue:(dispatch_queue_t)queue {
-    if ([event isCancelEvent]) {
-        FCancelEvent *cancelEvent = event;
-        FFLog(@"I-RDB061001", @"Raising cancel value event on %@", event.path);
-        NSAssert(
-            self.cancelCallback != nil,
-            @"Raising a cancel event on a listener with no cancel callback");
-        dispatch_async(queue, ^{
-          self.cancelCallback(cancelEvent.error);
-        });
-    } else if (self.callbacks != nil) {
-        FDataEvent *dataEvent = event;
-        FFLog(@"I-RDB061002", @"Raising event callback (%ld) on %@",
-              (long)dataEvent.eventType, dataEvent.path);
-        fbt_void_datasnapshot_nsstring callback = [self.callbacks
-            objectForKey:[NSNumber numberWithInteger:dataEvent.eventType]];
-
-        if (callback != nil) {
-            dispatch_async(queue, ^{
-              callback(dataEvent.snapshot, dataEvent.prevName);
-            });
-        }
-    }
-}
-
-- (FCancelEvent *)createCancelEventFromError:(NSError *)error
-                                        path:(FPath *)path {
-    if (self.cancelCallback != nil) {
-        return [[FCancelEvent alloc] initWithEventRegistration:self
-                                                         error:error
-                                                          path:path];
-    } else {
-        return nil;
-    }
-}
-
-- (BOOL)matches:(id<FEventRegistration>)other {
-    return self.handle == NSNotFound || other.handle == NSNotFound ||
-           self.handle == other.handle;
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FDataEvent.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FDataEvent.h
deleted file mode 100644
index a0d28f9..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FDataEvent.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FEvent.h"
-#import "FIRDataSnapshot.h"
-#import "FIRDatabaseReference.h"
-#import "FTupleUserCallback.h"
-#import <Foundation/Foundation.h>
-
-@protocol FEventRegistration;
-@protocol FIndex;
-
-@interface FDataEvent : NSObject <FEvent>
-
-- initWithEventType:(FIRDataEventType)type
-    eventRegistration:(id<FEventRegistration>)eventRegistration
-         dataSnapshot:(FIRDataSnapshot *)dataSnapshot;
-- initWithEventType:(FIRDataEventType)type
-    eventRegistration:(id<FEventRegistration>)eventRegistration
-         dataSnapshot:(FIRDataSnapshot *)snapshot
-             prevName:(NSString *)prevName;
-
-@property(nonatomic, strong, readonly) id<FEventRegistration> eventRegistration;
-@property(nonatomic, strong, readonly) FIRDataSnapshot *snapshot;
-@property(nonatomic, strong, readonly) NSString *prevName;
-@property(nonatomic, readonly) FIRDataEventType eventType;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FDataEvent.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FDataEvent.m
deleted file mode 100644
index 886a21e..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FDataEvent.m
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FDataEvent.h"
-#import "FEventRegistration.h"
-#import "FIRDatabaseQuery_Private.h"
-#import "FIndex.h"
-
-@interface FDataEvent ()
-@property(nonatomic, strong, readwrite) id<FEventRegistration>
-    eventRegistration;
-@property(nonatomic, strong, readwrite) FIRDataSnapshot *snapshot;
-@property(nonatomic, strong, readwrite) NSString *prevName;
-@property(nonatomic, readwrite) FIRDataEventType eventType;
-@end
-
-@implementation FDataEvent
-
-@synthesize eventRegistration;
-@synthesize snapshot;
-@synthesize prevName;
-@synthesize eventType;
-
-- (id)initWithEventType:(FIRDataEventType)type
-      eventRegistration:(id<FEventRegistration>)registration
-           dataSnapshot:(FIRDataSnapshot *)dataSnapshot {
-    return [self initWithEventType:type
-                 eventRegistration:registration
-                      dataSnapshot:dataSnapshot
-                          prevName:nil];
-}
-
-- (id)initWithEventType:(FIRDataEventType)type
-      eventRegistration:(id<FEventRegistration>)registration
-           dataSnapshot:(FIRDataSnapshot *)dataSnapshot
-               prevName:(NSString *)previousName {
-    self = [super init];
-    if (self) {
-        self.eventRegistration = registration;
-        self.snapshot = dataSnapshot;
-        self.prevName = previousName;
-        self.eventType = type;
-    }
-    return self;
-}
-
-- (FPath *)path {
-    // Used for logging, so delay calculation
-    FIRDatabaseReference *ref = self.snapshot.ref;
-    if (self.eventType == FIRDataEventTypeValue) {
-        return ref.path;
-    } else {
-        return ref.parent.path;
-    }
-}
-
-- (void)fireEventOnQueue:(dispatch_queue_t)queue {
-    [self.eventRegistration fireEvent:self queue:queue];
-}
-
-- (BOOL)isCancelEvent {
-    return NO;
-}
-
-- (NSString *)description {
-    return [NSString stringWithFormat:@"event %d, data: %@", (int)eventType,
-                                      [snapshot value]];
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FEvent.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FEvent.h
deleted file mode 100644
index cddcf73..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FEvent.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FIRDataEventType.h"
-#import <Foundation/Foundation.h>
-
-@class FPath;
-
-@protocol FEvent <NSObject>
-- (FPath *)path;
-- (void)fireEventOnQueue:(dispatch_queue_t)queue;
-- (BOOL)isCancelEvent;
-- (NSString *)description;
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FEventRaiser.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FEventRaiser.h
deleted file mode 100644
index c46bff5..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FEventRaiser.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FTypedefs.h"
-
-@class FPath;
-@class FRepo;
-@class FIRDatabaseConfig;
-
-/**
- * Left as instance methods rather than class methods so that we could
- * potentially callback on different queues for different repos. This is
- * semi-parallel to JS's FEventQueue
- */
-@interface FEventRaiser : NSObject
-
-- (id)initWithQueue:(dispatch_queue_t)queue;
-
-- (void)raiseEvents:(NSArray *)eventDataList;
-- (void)raiseCallback:(fbt_void_void)callback;
-- (void)raiseCallbacks:(NSArray *)callbackList;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FEventRaiser.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FEventRaiser.m
deleted file mode 100644
index d745358..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FEventRaiser.m
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FEventRaiser.h"
-#import "FDataEvent.h"
-#import "FRepo.h"
-#import "FRepoManager.h"
-#import "FTupleUserCallback.h"
-#import "FTypedefs.h"
-#import "FUtilities.h"
-
-@interface FEventRaiser ()
-
-@property(nonatomic, strong) dispatch_queue_t queue;
-
-@end
-
-/**
- * This class exists for symmetry with other clients, but since events are
- * async, we don't need to do the complicated stuff the JS client does to
- * preserve event order.
- */
-@implementation FEventRaiser
-
-- (id)init {
-    [NSException raise:NSInternalInconsistencyException
-                format:@"Can't use default constructor"];
-    return nil;
-}
-
-- (id)initWithQueue:(dispatch_queue_t)queue {
-    self = [super init];
-    if (self != nil) {
-        self->_queue = queue;
-    }
-    return self;
-}
-
-- (void)raiseEvents:(NSArray *)eventDataList {
-    for (id<FEvent> event in eventDataList) {
-        [event fireEventOnQueue:self.queue];
-    }
-}
-
-- (void)raiseCallback:(fbt_void_void)callback {
-    dispatch_async(self.queue, callback);
-}
-
-- (void)raiseCallbacks:(NSArray *)callbackList {
-    for (fbt_void_void callback in callbackList) {
-        dispatch_async(self.queue, callback);
-    }
-}
-
-+ (void)raiseCallbacks:(NSArray *)callbackList queue:(dispatch_queue_t)queue {
-    for (fbt_void_void callback in callbackList) {
-        dispatch_async(queue, callback);
-    }
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FEventRegistration.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FEventRegistration.h
deleted file mode 100644
index 79a2eb0..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FEventRegistration.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FChange.h"
-#import "FIRDataEventType.h"
-#import <Foundation/Foundation.h>
-
-@protocol FEvent;
-@class FDataEvent;
-@class FCancelEvent;
-@class FQuerySpec;
-
-@protocol FEventRegistration <NSObject>
-- (BOOL)responseTo:(FIRDataEventType)eventType;
-- (FDataEvent *)createEventFrom:(FChange *)change query:(FQuerySpec *)query;
-- (void)fireEvent:(id<FEvent>)event queue:(dispatch_queue_t)queue;
-- (FCancelEvent *)createCancelEventFromError:(NSError *)error
-                                        path:(FPath *)path;
-/**
- * Used to figure out what event registration match the event registration that
- * needs to be removed.
- */
-- (BOOL)matches:(id<FEventRegistration>)other;
-@property(nonatomic, readonly) FIRDatabaseHandle handle;
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FKeepSyncedEventRegistration.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FKeepSyncedEventRegistration.h
deleted file mode 100644
index d4dca60..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FKeepSyncedEventRegistration.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#import "FEventRegistration.h"
-
-/**
- * A singleton event registration to mark a query as keep synced
- */
-@interface FKeepSyncedEventRegistration : NSObject <FEventRegistration>
-
-+ (FKeepSyncedEventRegistration *)instance;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FKeepSyncedEventRegistration.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FKeepSyncedEventRegistration.m
deleted file mode 100644
index 1821829..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FKeepSyncedEventRegistration.m
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FKeepSyncedEventRegistration.h"
-
-@interface FKeepSyncedEventRegistration ()
-
-@end
-
-@implementation FKeepSyncedEventRegistration
-
-+ (FKeepSyncedEventRegistration *)instance {
-    static dispatch_once_t onceToken;
-    static FKeepSyncedEventRegistration *keepSynced;
-    dispatch_once(&onceToken, ^{
-      keepSynced = [[FKeepSyncedEventRegistration alloc] init];
-    });
-    return keepSynced;
-}
-
-- (BOOL)responseTo:(FIRDataEventType)eventType {
-    return NO;
-}
-
-- (FDataEvent *)createEventFrom:(FChange *)change query:(FQuerySpec *)query {
-    [NSException
-         raise:NSInternalInconsistencyException
-        format:@"Should never create event for FKeepSyncedEventRegistration"];
-    return nil;
-}
-
-- (void)fireEvent:(id<FEvent>)event queue:(dispatch_queue_t)queue {
-    [NSException
-         raise:NSInternalInconsistencyException
-        format:@"Should never raise event for FKeepSyncedEventRegistration"];
-}
-
-- (FCancelEvent *)createCancelEventFromError:(NSError *)error
-                                        path:(FPath *)path {
-    // Don't create cancel events....
-    return nil;
-}
-
-- (FIRDatabaseHandle)handle {
-    // TODO[offline]: returning arbitray, can't return NSNotFound since that is
-    // used to match other event registrations We should really redo this to
-    // match on different kind of events (single observer, all observers,
-    // cancelled) rather than on a NSNotFound handle...
-    return NSNotFound - 1;
-}
-
-- (BOOL)matches:(id<FEventRegistration>)other {
-    // Only matches singleton instance
-    return self == other;
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FValueEventRegistration.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FValueEventRegistration.h
deleted file mode 100644
index 819febe..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FValueEventRegistration.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FEventRegistration.h"
-#import "FTypedefs.h"
-#import <Foundation/Foundation.h>
-
-@class FRepo;
-
-@interface FValueEventRegistration : NSObject <FEventRegistration>
-
-- (id)initWithRepo:(FRepo *)repo
-            handle:(FIRDatabaseHandle)fHandle
-          callback:(fbt_void_datasnapshot)callbackBlock
-    cancelCallback:(fbt_void_nserror)cancelCallbackBlock;
-
-@property(nonatomic, copy, readonly) fbt_void_datasnapshot callback;
-@property(nonatomic, copy, readonly) fbt_void_nserror cancelCallback;
-@property(nonatomic, readonly) FIRDatabaseHandle handle;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FValueEventRegistration.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FValueEventRegistration.m
deleted file mode 100644
index ad9368b..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FValueEventRegistration.m
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FValueEventRegistration.h"
-#import "FCancelEvent.h"
-#import "FDataEvent.h"
-#import "FIRDataSnapshot_Private.h"
-#import "FIRDatabaseQuery_Private.h"
-#import "FQueryParams.h"
-#import "FQuerySpec.h"
-#import <FirebaseCore/FIRLogger.h>
-
-@interface FValueEventRegistration ()
-@property(nonatomic, strong) FRepo *repo;
-@property(nonatomic, copy, readwrite) fbt_void_datasnapshot callback;
-@property(nonatomic, copy, readwrite) fbt_void_nserror cancelCallback;
-@property(nonatomic, readwrite) FIRDatabaseHandle handle;
-@end
-
-@implementation FValueEventRegistration
-
-- (id)initWithRepo:(FRepo *)repo
-            handle:(FIRDatabaseHandle)fHandle
-          callback:(fbt_void_datasnapshot)callbackBlock
-    cancelCallback:(fbt_void_nserror)cancelCallbackBlock {
-    self = [super init];
-    if (self) {
-        self.repo = repo;
-        self.handle = fHandle;
-        self.callback = callbackBlock;
-        self.cancelCallback = cancelCallbackBlock;
-    }
-    return self;
-}
-
-- (BOOL)responseTo:(FIRDataEventType)eventType {
-    return eventType == FIRDataEventTypeValue;
-}
-
-- (FDataEvent *)createEventFrom:(FChange *)change query:(FQuerySpec *)query {
-    FIRDatabaseReference *ref =
-        [[FIRDatabaseReference alloc] initWithRepo:self.repo path:query.path];
-    FIRDataSnapshot *snapshot =
-        [[FIRDataSnapshot alloc] initWithRef:ref
-                                 indexedNode:change.indexedNode];
-    FDataEvent *eventData =
-        [[FDataEvent alloc] initWithEventType:FIRDataEventTypeValue
-                            eventRegistration:self
-                                 dataSnapshot:snapshot];
-    return eventData;
-}
-
-- (void)fireEvent:(id<FEvent>)event queue:(dispatch_queue_t)queue {
-    if ([event isCancelEvent]) {
-        FCancelEvent *cancelEvent = event;
-        FFLog(@"I-RDB065001", @"Raising cancel value event on %@", event.path);
-        NSAssert(
-            self.cancelCallback != nil,
-            @"Raising a cancel event on a listener with no cancel callback");
-        dispatch_async(queue, ^{
-          self.cancelCallback(cancelEvent.error);
-        });
-    } else if (self.callback != nil) {
-        FDataEvent *dataEvent = event;
-        FFLog(@"I-RDB065002", @"Raising value event on %@",
-              dataEvent.snapshot.key);
-        dispatch_async(queue, ^{
-          self.callback(dataEvent.snapshot);
-        });
-    }
-}
-
-- (FCancelEvent *)createCancelEventFromError:(NSError *)error
-                                        path:(FPath *)path {
-    if (self.cancelCallback != nil) {
-        return [[FCancelEvent alloc] initWithEventRegistration:self
-                                                         error:error
-                                                          path:path];
-    } else {
-        return nil;
-    }
-}
-
-- (BOOL)matches:(id<FEventRegistration>)other {
-    return self.handle == NSNotFound || other.handle == NSNotFound ||
-           self.handle == other.handle;
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FView.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FView.h
deleted file mode 100644
index 0b4b9d8..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FView.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@protocol FNode;
-@protocol FOperation;
-@protocol FEventRegistration;
-@class FWriteTreeRef;
-@class FQuerySpec;
-@class FChange;
-@class FPath;
-@class FViewCache;
-
-@interface FViewOperationResult : NSObject
-
-@property(nonatomic, strong, readonly) NSArray *changes;
-@property(nonatomic, strong, readonly) NSArray *events;
-
-@end
-
-@interface FView : NSObject
-
-@property(nonatomic, strong, readonly) FQuerySpec *query;
-
-- (id)initWithQuery:(FQuerySpec *)query
-    initialViewCache:(FViewCache *)initialViewCache;
-
-- (id<FNode>)eventCache;
-- (id<FNode>)serverCache;
-- (id<FNode>)completeServerCacheFor:(FPath *)path;
-- (BOOL)isEmpty;
-
-- (void)addEventRegistration:(id<FEventRegistration>)eventRegistration;
-- (NSArray *)removeEventRegistration:(id<FEventRegistration>)eventRegistration
-                         cancelError:(NSError *)cancelError;
-
-- (FViewOperationResult *)applyOperation:(id<FOperation>)operation
-                             writesCache:(FWriteTreeRef *)writesCache
-                             serverCache:(id<FNode>)optCompleteServerCache;
-- (NSArray *)initialEvents:(id<FEventRegistration>)registration;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FView.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FView.m
deleted file mode 100644
index a15e13d..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FView.m
+++ /dev/null
@@ -1,266 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FView.h"
-#import "FCacheNode.h"
-#import "FCancelEvent.h"
-#import "FEmptyNode.h"
-#import "FEventGenerator.h"
-#import "FEventRegistration.h"
-#import "FIRDatabaseQuery.h"
-#import "FIRDatabaseQuery_Private.h"
-#import "FIndexedFilter.h"
-#import "FIndexedNode.h"
-#import "FNode.h"
-#import "FOperation.h"
-#import "FOperationSource.h"
-#import "FPath.h"
-#import "FQueryParams.h"
-#import "FQuerySpec.h"
-#import "FViewCache.h"
-#import "FViewProcessor.h"
-#import "FViewProcessorResult.h"
-#import "FWriteTreeRef.h"
-
-@interface FViewOperationResult ()
-
-@property(nonatomic, strong, readwrite) NSArray *changes;
-@property(nonatomic, strong, readwrite) NSArray *events;
-
-@end
-
-@implementation FViewOperationResult
-
-- (id)initWithChanges:(NSArray *)changes events:(NSArray *)events {
-    self = [super init];
-    if (self != nil) {
-        self->_changes = changes;
-        self->_events = events;
-    }
-    return self;
-}
-
-@end
-
-/**
- * A view represents a specific location and query that has 1 or more event
- * registrations.
- *
- * It does several things:
- * - Maintains the list of event registration for this location/query.
- * - Maintains a cache of the data visible for this location/query.
- * - Applies new operations (via applyOperation), updates the cache, and based
- * on the event registrations returns the set of events to be raised.
- */
-@interface FView ()
-
-@property(nonatomic, strong, readwrite) FQuerySpec *query;
-@property(nonatomic, strong) FViewProcessor *processor;
-@property(nonatomic, strong) FViewCache *viewCache;
-@property(nonatomic, strong) NSMutableArray *eventRegistrations;
-@property(nonatomic, strong) FEventGenerator *eventGenerator;
-
-@end
-
-@implementation FView
-- (id)initWithQuery:(FQuerySpec *)query
-    initialViewCache:(FViewCache *)initialViewCache {
-    self = [super init];
-    if (self) {
-        self.query = query;
-
-        FIndexedFilter *indexFilter =
-            [[FIndexedFilter alloc] initWithIndex:query.index];
-        id<FNodeFilter> filter = query.params.nodeFilter;
-        self.processor = [[FViewProcessor alloc] initWithFilter:filter];
-        FCacheNode *initialServerCache = initialViewCache.cachedServerSnap;
-        FCacheNode *initialEventCache = initialViewCache.cachedEventSnap;
-
-        // Don't filter server node with other filter than index, wait for
-        // tagged listen
-        FIndexedNode *emptyIndexedNode =
-            [FIndexedNode indexedNodeWithNode:[FEmptyNode emptyNode]
-                                        index:query.index];
-        FIndexedNode *serverSnap =
-            [indexFilter updateFullNode:emptyIndexedNode
-                            withNewNode:initialServerCache.indexedNode
-                            accumulator:nil];
-        FIndexedNode *eventSnap =
-            [filter updateFullNode:emptyIndexedNode
-                       withNewNode:initialEventCache.indexedNode
-                       accumulator:nil];
-        FCacheNode *newServerCache = [[FCacheNode alloc]
-            initWithIndexedNode:serverSnap
-             isFullyInitialized:initialServerCache.isFullyInitialized
-                     isFiltered:indexFilter.filtersNodes];
-        FCacheNode *newEventCache = [[FCacheNode alloc]
-            initWithIndexedNode:eventSnap
-             isFullyInitialized:initialEventCache.isFullyInitialized
-                     isFiltered:filter.filtersNodes];
-
-        self.viewCache = [[FViewCache alloc] initWithEventCache:newEventCache
-                                                    serverCache:newServerCache];
-
-        self.eventRegistrations = [[NSMutableArray alloc] init];
-
-        self.eventGenerator = [[FEventGenerator alloc] initWithQuery:query];
-    }
-
-    return self;
-}
-
-- (id<FNode>)serverCache {
-    return self.viewCache.cachedServerSnap.node;
-}
-
-- (id<FNode>)eventCache {
-    return self.viewCache.cachedEventSnap.node;
-}
-
-- (id<FNode>)completeServerCacheFor:(FPath *)path {
-    id<FNode> cache = self.viewCache.completeServerSnap;
-    if (cache) {
-        // If this isn't a "loadsAllData" view, then cache isn't actually a
-        // complete cache and we need to see if it contains the child we're
-        // interested in.
-        if ([self.query loadsAllData] ||
-            (!path.isEmpty &&
-             ![cache getImmediateChild:path.getFront].isEmpty)) {
-            return [cache getChild:path];
-        }
-    }
-    return nil;
-}
-
-- (BOOL)isEmpty {
-    return self.eventRegistrations.count == 0;
-}
-
-- (void)addEventRegistration:(id<FEventRegistration>)eventRegistration {
-    [self.eventRegistrations addObject:eventRegistration];
-}
-
-/**
- * @param eventRegistration If null, remove all callbacks.
- * @param cancelError If a cancelError is provided, appropriate cancel events
- * will be returned.
- * @return Cancel events, if cancelError was provided.
- */
-- (NSArray *)removeEventRegistration:(id<FEventRegistration>)eventRegistration
-                         cancelError:(NSError *)cancelError {
-    NSMutableArray *cancelEvents = [[NSMutableArray alloc] init];
-    if (cancelError != nil) {
-        NSAssert(eventRegistration == nil,
-                 @"A cancel should cancel all event registrations.");
-        FPath *path = self.query.path;
-        for (id<FEventRegistration> registration in self.eventRegistrations) {
-            FCancelEvent *maybeEvent =
-                [registration createCancelEventFromError:cancelError path:path];
-            if (maybeEvent) {
-                [cancelEvents addObject:maybeEvent];
-            }
-        }
-    }
-
-    if (eventRegistration) {
-        NSUInteger i = 0;
-        while (i < self.eventRegistrations.count) {
-            id<FEventRegistration> existing = self.eventRegistrations[i];
-            if ([existing matches:eventRegistration]) {
-                [self.eventRegistrations removeObjectAtIndex:i];
-            } else {
-                i++;
-            }
-        }
-    } else {
-        [self.eventRegistrations removeAllObjects];
-    }
-    return cancelEvents;
-}
-
-/**
- * Applies the given Operation, updates our cache, and returns the appropriate
- * events and changes
- */
-- (FViewOperationResult *)applyOperation:(id<FOperation>)operation
-                             writesCache:(FWriteTreeRef *)writesCache
-                             serverCache:(id<FNode>)optCompleteServerCache {
-    if (operation.type == FOperationTypeMerge &&
-        operation.source.queryParams != nil) {
-        NSAssert(self.viewCache.completeServerSnap != nil,
-                 @"We should always have a full cache before handling merges");
-        NSAssert(self.viewCache.completeEventSnap != nil,
-                 @"Missing event cache, even though we have a server cache");
-    }
-    FViewCache *oldViewCache = self.viewCache;
-    FViewProcessorResult *result =
-        [self.processor applyOperationOn:oldViewCache
-                               operation:operation
-                             writesCache:writesCache
-                           completeCache:optCompleteServerCache];
-
-    NSAssert(result.viewCache.cachedServerSnap.isFullyInitialized ||
-                 !oldViewCache.cachedServerSnap.isFullyInitialized,
-             @"Once a server snap is complete, it should never go back.");
-
-    self.viewCache = result.viewCache;
-    NSArray *events = [self
-        generateEventsForChanges:result.changes
-                      eventCache:result.viewCache.cachedEventSnap.indexedNode
-                    registration:nil];
-    return [[FViewOperationResult alloc] initWithChanges:result.changes
-                                                  events:events];
-}
-
-- (NSArray *)initialEvents:(id<FEventRegistration>)registration {
-    FCacheNode *eventSnap = self.viewCache.cachedEventSnap;
-    NSMutableArray *initialChanges = [[NSMutableArray alloc] init];
-    [eventSnap.indexedNode.node enumerateChildrenUsingBlock:^(
-                                    NSString *key, id<FNode> node, BOOL *stop) {
-      FIndexedNode *indexed = [FIndexedNode indexedNodeWithNode:node];
-      FChange *change = [[FChange alloc] initWithType:FIRDataEventTypeChildAdded
-                                          indexedNode:indexed
-                                             childKey:key];
-      [initialChanges addObject:change];
-    }];
-    if (eventSnap.isFullyInitialized) {
-        FChange *change = [[FChange alloc] initWithType:FIRDataEventTypeValue
-                                            indexedNode:eventSnap.indexedNode];
-        [initialChanges addObject:change];
-    }
-    return [self generateEventsForChanges:initialChanges
-                               eventCache:eventSnap.indexedNode
-                             registration:registration];
-}
-
-- (NSArray *)generateEventsForChanges:(NSArray *)changes
-                           eventCache:(FIndexedNode *)eventCache
-                         registration:(id<FEventRegistration>)registration {
-    NSArray *registrations;
-    if (registration == nil) {
-        registrations = [[NSArray alloc] initWithArray:self.eventRegistrations];
-    } else {
-        registrations = [[NSArray alloc] initWithObjects:registration, nil];
-    }
-    return [self.eventGenerator generateEventsForChanges:changes
-                                              eventCache:eventCache
-                                      eventRegistrations:registrations];
-}
-
-- (NSString *)description {
-    return [NSString stringWithFormat:@"FView (%@)", self.query];
-}
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FViewCache.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FViewCache.h
deleted file mode 100644
index 62618d2..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FViewCache.h
+++ /dev/null
@@ -1,40 +0,0 @@
-#/*
-* Copyright 2017 Google
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-*      http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-#import <Foundation/Foundation.h>
-
-@protocol FNode;
-@class FCacheNode;
-@class FIndexedNode;
-
-@interface FViewCache : NSObject
-
-- (id)initWithEventCache:(FCacheNode *)eventCache
-             serverCache:(FCacheNode *)serverCache;
-
-- (FViewCache *)updateEventSnap:(FIndexedNode *)eventSnap
-                     isComplete:(BOOL)complete
-                     isFiltered:(BOOL)filtered;
-- (FViewCache *)updateServerSnap:(FIndexedNode *)serverSnap
-                      isComplete:(BOOL)complete
-                      isFiltered:(BOOL)filtered;
-
-@property(nonatomic, strong, readonly) FCacheNode *cachedEventSnap;
-@property(nonatomic, strong, readonly) id<FNode> completeEventSnap;
-@property(nonatomic, strong, readonly) FCacheNode *cachedServerSnap;
-@property(nonatomic, strong, readonly) id<FNode> completeServerSnap;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FViewCache.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FViewCache.m
deleted file mode 100644
index 13e9283..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FViewCache.m
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FViewCache.h"
-#import "FCacheNode.h"
-#import "FEmptyNode.h"
-#import "FNode.h"
-
-@interface FViewCache ()
-@property(nonatomic, strong, readwrite) FCacheNode *cachedEventSnap;
-@property(nonatomic, strong, readwrite) FCacheNode *cachedServerSnap;
-@end
-
-@implementation FViewCache
-
-- (id)initWithEventCache:(FCacheNode *)eventCache
-             serverCache:(FCacheNode *)serverCache {
-    self = [super init];
-    if (self) {
-        self.cachedEventSnap = eventCache;
-        self.cachedServerSnap = serverCache;
-    }
-    return self;
-}
-
-- (FViewCache *)updateEventSnap:(FIndexedNode *)eventSnap
-                     isComplete:(BOOL)complete
-                     isFiltered:(BOOL)filtered {
-    FCacheNode *updatedEventCache =
-        [[FCacheNode alloc] initWithIndexedNode:eventSnap
-                             isFullyInitialized:complete
-                                     isFiltered:filtered];
-    return [[FViewCache alloc] initWithEventCache:updatedEventCache
-                                      serverCache:self.cachedServerSnap];
-}
-
-- (FViewCache *)updateServerSnap:(FIndexedNode *)serverSnap
-                      isComplete:(BOOL)complete
-                      isFiltered:(BOOL)filtered {
-    FCacheNode *updatedServerCache =
-        [[FCacheNode alloc] initWithIndexedNode:serverSnap
-                             isFullyInitialized:complete
-                                     isFiltered:filtered];
-    return [[FViewCache alloc] initWithEventCache:self.cachedEventSnap
-                                      serverCache:updatedServerCache];
-}
-
-- (id<FNode>)completeEventSnap {
-    return (self.cachedEventSnap.isFullyInitialized) ? self.cachedEventSnap.node
-                                                     : nil;
-}
-
-- (id<FNode>)completeServerSnap {
-    return (self.cachedServerSnap.isFullyInitialized)
-               ? self.cachedServerSnap.node
-               : nil;
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FChildChangeAccumulator.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FChildChangeAccumulator.h
deleted file mode 100644
index bf25163..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FChildChangeAccumulator.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@class FChange;
-
-@interface FChildChangeAccumulator : NSObject
-
-- (id)init;
-- (void)trackChildChange:(FChange *)change;
-- (NSArray *)changes;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FChildChangeAccumulator.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FChildChangeAccumulator.m
deleted file mode 100644
index e35c2e2..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FChildChangeAccumulator.m
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FChildChangeAccumulator.h"
-#import "FChange.h"
-#import "FIndex.h"
-
-@interface FChildChangeAccumulator ()
-@property(nonatomic, strong) NSMutableDictionary *changeMap;
-@end
-
-@implementation FChildChangeAccumulator
-
-- (id)init {
-    self = [super init];
-    if (self) {
-        self.changeMap = [[NSMutableDictionary alloc] init];
-    }
-    return self;
-}
-
-- (void)trackChildChange:(FChange *)change {
-    FIRDataEventType type = change.type;
-    NSString *childKey = change.childKey;
-    NSAssert(type == FIRDataEventTypeChildAdded ||
-                 type == FIRDataEventTypeChildChanged ||
-                 type == FIRDataEventTypeChildRemoved,
-             @"Only child changes supported for tracking.");
-    NSAssert(![change.childKey isEqualToString:@".priority"],
-             @"Changes not tracked on priority");
-    if (self.changeMap[childKey] != nil) {
-        FChange *oldChange = [self.changeMap objectForKey:childKey];
-        FIRDataEventType oldType = oldChange.type;
-        if (type == FIRDataEventTypeChildAdded &&
-            oldType == FIRDataEventTypeChildRemoved) {
-            FChange *newChange =
-                [[FChange alloc] initWithType:FIRDataEventTypeChildChanged
-                                  indexedNode:change.indexedNode
-                                     childKey:childKey
-                               oldIndexedNode:oldChange.indexedNode];
-            [self.changeMap setObject:newChange forKey:childKey];
-        } else if (type == FIRDataEventTypeChildRemoved &&
-                   oldType == FIRDataEventTypeChildAdded) {
-            [self.changeMap removeObjectForKey:childKey];
-        } else if (type == FIRDataEventTypeChildRemoved &&
-                   oldType == FIRDataEventTypeChildChanged) {
-            FChange *newChange =
-                [[FChange alloc] initWithType:FIRDataEventTypeChildRemoved
-                                  indexedNode:oldChange.oldIndexedNode
-                                     childKey:childKey];
-            [self.changeMap setObject:newChange forKey:childKey];
-        } else if (type == FIRDataEventTypeChildChanged &&
-                   oldType == FIRDataEventTypeChildAdded) {
-            FChange *newChange =
-                [[FChange alloc] initWithType:FIRDataEventTypeChildAdded
-                                  indexedNode:change.indexedNode
-                                     childKey:childKey];
-            [self.changeMap setObject:newChange forKey:childKey];
-        } else if (type == FIRDataEventTypeChildChanged &&
-                   oldType == FIRDataEventTypeChildChanged) {
-            FChange *newChange =
-                [[FChange alloc] initWithType:FIRDataEventTypeChildChanged
-                                  indexedNode:change.indexedNode
-                                     childKey:childKey
-                               oldIndexedNode:oldChange.oldIndexedNode];
-            [self.changeMap setObject:newChange forKey:childKey];
-        } else {
-            NSString *reason = [NSString
-                stringWithFormat:
-                    @"Illegal combination of changes: %@ occurred after %@",
-                    change, oldChange];
-            @throw [[NSException alloc]
-                initWithName:@"FirebaseDatabaseInternalError"
-                      reason:reason
-                    userInfo:nil];
-        }
-    } else {
-        [self.changeMap setObject:change forKey:childKey];
-    }
-}
-
-- (NSArray *)changes {
-    return [self.changeMap allValues];
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FCompleteChildSource.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FCompleteChildSource.h
deleted file mode 100644
index 0c04bc1..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FCompleteChildSource.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@protocol FNode;
-@class FNamedNode;
-@protocol FIndex;
-
-@protocol FCompleteChildSource <NSObject>
-
-- (id<FNode>)completeChild:(NSString *)childKey;
-- (FNamedNode *)childByIndex:(id<FIndex>)index
-                  afterChild:(FNamedNode *)child
-                   isReverse:(BOOL)reverse;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FIndexedFilter.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FIndexedFilter.h
deleted file mode 100644
index 291e79a..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FIndexedFilter.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FNodeFilter.h"
-#import <Foundation/Foundation.h>
-
-@protocol FIndex;
-
-@interface FIndexedFilter : NSObject <FNodeFilter>
-
-- (id)initWithIndex:(id<FIndex>)theIndex;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FIndexedFilter.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FIndexedFilter.m
deleted file mode 100644
index f49af79..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FIndexedFilter.m
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FIndexedFilter.h"
-#import "FChange.h"
-#import "FChildChangeAccumulator.h"
-#import "FChildrenNode.h"
-#import "FEmptyNode.h"
-#import "FIndex.h"
-#import "FIndexedNode.h"
-#import "FKeyIndex.h"
-#import "FNode.h"
-
-@interface FIndexedFilter ()
-@property(nonatomic, strong, readwrite) id<FIndex> index;
-@end
-
-@implementation FIndexedFilter
-- (id)initWithIndex:(id<FIndex>)theIndex {
-    self = [super init];
-    if (self) {
-        self.index = theIndex;
-    }
-    return self;
-}
-
-- (FIndexedNode *)updateChildIn:(FIndexedNode *)indexedNode
-                    forChildKey:(NSString *)childKey
-                       newChild:(id<FNode>)newChildSnap
-                   affectedPath:(FPath *)affectedPath
-                     fromSource:(id<FCompleteChildSource>)source
-                    accumulator:
-                        (FChildChangeAccumulator *)optChangeAccumulator {
-    NSAssert([indexedNode hasIndex:self.index],
-             @"The index in FIndexedNode must match the index of the filter");
-    id<FNode> node = indexedNode.node;
-    id<FNode> oldChildSnap = [node getImmediateChild:childKey];
-
-    // Check if anything actually changed.
-    if ([[oldChildSnap getChild:affectedPath]
-            isEqual:[newChildSnap getChild:affectedPath]]) {
-        // There's an edge case where a child can enter or leave the view
-        // because affectedPath was set to null. In this case, affectedPath will
-        // appear null in both the old and new snapshots.  So we need to avoid
-        // treating these cases as "nothing changed."
-        if (oldChildSnap.isEmpty == newChildSnap.isEmpty) {
-// Nothing changed.
-#ifdef DEBUG
-            NSAssert([oldChildSnap isEqual:newChildSnap],
-                     @"Old and new snapshots should be equal.");
-#endif
-
-            return indexedNode;
-        }
-    }
-    if (optChangeAccumulator) {
-        if (newChildSnap.isEmpty) {
-            if ([node hasChild:childKey]) {
-                FChange *change = [[FChange alloc]
-                    initWithType:FIRDataEventTypeChildRemoved
-                     indexedNode:[FIndexedNode indexedNodeWithNode:oldChildSnap]
-                        childKey:childKey];
-                [optChangeAccumulator trackChildChange:change];
-            } else {
-                NSAssert(node.isLeafNode,
-                         @"A child remove without an old child only makes "
-                         @"sense on a leaf node.");
-            }
-        } else if (oldChildSnap.isEmpty) {
-            FChange *change = [[FChange alloc]
-                initWithType:FIRDataEventTypeChildAdded
-                 indexedNode:[FIndexedNode indexedNodeWithNode:newChildSnap]
-                    childKey:childKey];
-            [optChangeAccumulator trackChildChange:change];
-        } else {
-            FChange *change = [[FChange alloc]
-                  initWithType:FIRDataEventTypeChildChanged
-                   indexedNode:[FIndexedNode indexedNodeWithNode:newChildSnap]
-                      childKey:childKey
-                oldIndexedNode:[FIndexedNode indexedNodeWithNode:oldChildSnap]];
-            [optChangeAccumulator trackChildChange:change];
-        }
-    }
-    if (node.isLeafNode && newChildSnap.isEmpty) {
-        return indexedNode;
-    } else {
-        return [indexedNode updateChild:childKey withNewChild:newChildSnap];
-    }
-}
-
-- (FIndexedNode *)updateFullNode:(FIndexedNode *)oldSnap
-                     withNewNode:(FIndexedNode *)newSnap
-                     accumulator:
-                         (FChildChangeAccumulator *)optChangeAccumulator {
-    if (optChangeAccumulator) {
-        [oldSnap.node enumerateChildrenUsingBlock:^(
-                          NSString *childKey, id<FNode> childNode, BOOL *stop) {
-          if (![newSnap.node hasChild:childKey]) {
-              FChange *change = [[FChange alloc]
-                  initWithType:FIRDataEventTypeChildRemoved
-                   indexedNode:[FIndexedNode indexedNodeWithNode:childNode]
-                      childKey:childKey];
-              [optChangeAccumulator trackChildChange:change];
-          }
-        }];
-
-        [newSnap.node enumerateChildrenUsingBlock:^(
-                          NSString *childKey, id<FNode> childNode, BOOL *stop) {
-          if ([oldSnap.node hasChild:childKey]) {
-              id<FNode> oldChildSnap =
-                  [oldSnap.node getImmediateChild:childKey];
-              if (![oldChildSnap isEqual:childNode]) {
-                  FChange *change = [[FChange alloc]
-                        initWithType:FIRDataEventTypeChildChanged
-                         indexedNode:[FIndexedNode
-                                         indexedNodeWithNode:childNode]
-                            childKey:childKey
-                      oldIndexedNode:[FIndexedNode
-                                         indexedNodeWithNode:oldChildSnap]];
-                  [optChangeAccumulator trackChildChange:change];
-              }
-          } else {
-              FChange *change = [[FChange alloc]
-                  initWithType:FIRDataEventTypeChildAdded
-                   indexedNode:[FIndexedNode indexedNodeWithNode:childNode]
-                      childKey:childKey];
-              [optChangeAccumulator trackChildChange:change];
-          }
-        }];
-    }
-    return newSnap;
-}
-
-- (FIndexedNode *)updatePriority:(id<FNode>)priority
-                         forNode:(FIndexedNode *)oldSnap {
-    if ([oldSnap.node isEmpty]) {
-        return oldSnap;
-    } else {
-        return [oldSnap updatePriority:priority];
-    }
-}
-
-- (BOOL)filtersNodes {
-    return NO;
-}
-
-- (id<FNodeFilter>)indexedFilter {
-    return self;
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FLimitedFilter.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FLimitedFilter.h
deleted file mode 100644
index 0642e72..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FLimitedFilter.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FNodeFilter.h"
-#import <Foundation/Foundation.h>
-
-@class FQueryParams;
-
-@interface FLimitedFilter : NSObject <FNodeFilter>
-
-- (id)initWithQueryParams:(FQueryParams *)params;
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FLimitedFilter.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FLimitedFilter.m
deleted file mode 100644
index fab9aab..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FLimitedFilter.m
+++ /dev/null
@@ -1,285 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FLimitedFilter.h"
-#import "FChange.h"
-#import "FChildChangeAccumulator.h"
-#import "FChildrenNode.h"
-#import "FCompleteChildSource.h"
-#import "FEmptyNode.h"
-#import "FIndex.h"
-#import "FNamedNode.h"
-#import "FQueryParams.h"
-#import "FRangedFilter.h"
-#import "FTreeSortedDictionary.h"
-
-@interface FLimitedFilter ()
-@property(nonatomic, strong) FRangedFilter *rangedFilter;
-@property(nonatomic, strong, readwrite) id<FIndex> index;
-@property(nonatomic) NSInteger limit;
-@property(nonatomic) BOOL reverse;
-
-@end
-
-@implementation FLimitedFilter
-- (id)initWithQueryParams:(FQueryParams *)params {
-    self = [super init];
-    if (self) {
-        self.rangedFilter = [[FRangedFilter alloc] initWithQueryParams:params];
-        self.index = params.index;
-        self.limit = params.limit;
-        self.reverse = !params.isViewFromLeft;
-    }
-    return self;
-}
-
-- (FIndexedNode *)updateChildIn:(FIndexedNode *)oldSnap
-                    forChildKey:(NSString *)childKey
-                       newChild:(id<FNode>)newChildSnap
-                   affectedPath:(FPath *)affectedPath
-                     fromSource:(id<FCompleteChildSource>)source
-                    accumulator:
-                        (FChildChangeAccumulator *)optChangeAccumulator {
-    if (![self.rangedFilter matchesKey:childKey andNode:newChildSnap]) {
-        newChildSnap = [FEmptyNode emptyNode];
-    }
-    if ([[oldSnap.node getImmediateChild:childKey] isEqual:newChildSnap]) {
-        // No change
-        return oldSnap;
-    } else if (oldSnap.node.numChildren < self.limit) {
-        return [[self.rangedFilter indexedFilter]
-            updateChildIn:oldSnap
-              forChildKey:childKey
-                 newChild:newChildSnap
-             affectedPath:affectedPath
-               fromSource:source
-              accumulator:optChangeAccumulator];
-    } else {
-        return [self fullLimitUpdateNode:oldSnap
-                             forChildKey:childKey
-                                newChild:newChildSnap
-                              fromSource:source
-                             accumulator:optChangeAccumulator];
-    }
-}
-
-- (FIndexedNode *)fullLimitUpdateNode:(FIndexedNode *)oldIndexed
-                          forChildKey:(NSString *)childKey
-                             newChild:(id<FNode>)newChildSnap
-                           fromSource:(id<FCompleteChildSource>)source
-                          accumulator:
-                              (FChildChangeAccumulator *)optChangeAccumulator {
-    NSAssert(oldIndexed.node.numChildren == self.limit,
-             @"Should have number of children equal to limit.");
-
-    FNamedNode *windowBoundary =
-        self.reverse ? oldIndexed.firstChild : oldIndexed.lastChild;
-
-    BOOL inRange = [self.rangedFilter matchesKey:childKey andNode:newChildSnap];
-    if ([oldIndexed.node hasChild:childKey]) {
-        // `childKey` was already in `oldSnap`. Figure out if it remains in the
-        // window or needs to be replaced.
-        id<FNode> oldChildSnap = [oldIndexed.node getImmediateChild:childKey];
-
-        // In case the `newChildSnap` falls outside the window, get the
-        // `nextChild` that might replace it.
-        FNamedNode *nextChild = [source childByIndex:self.index
-                                          afterChild:windowBoundary
-                                           isReverse:(BOOL)self.reverse];
-        if (nextChild != nil && ([nextChild.name isEqualToString:childKey] ||
-                                 [oldIndexed.node hasChild:nextChild.name])) {
-            // There is a weird edge case where a node is updated as part of a
-            // merge in the write tree, but hasn't been applied to the limited
-            // filter yet. Ignore this next child which will be updated later in
-            // the limited filter...
-            nextChild = [source childByIndex:self.index
-                                  afterChild:nextChild
-                                   isReverse:self.reverse];
-        }
-
-        // Figure out if `newChildSnap` is in range and ordered before
-        // `nextChild`
-        BOOL remainsInWindow = inRange && !newChildSnap.isEmpty;
-        remainsInWindow = remainsInWindow &&
-                          (!nextChild || [self.index compareKey:nextChild.name
-                                                        andNode:nextChild.node
-                                                     toOtherKey:childKey
-                                                        andNode:newChildSnap
-                                                        reverse:self.reverse] >=
-                                             NSOrderedSame);
-        if (remainsInWindow) {
-            // `newChildSnap` is ordered before `nextChild`, so it's a child
-            // changed event
-            if (optChangeAccumulator != nil) {
-                FChange *change = [[FChange alloc]
-                      initWithType:FIRDataEventTypeChildChanged
-                       indexedNode:[FIndexedNode
-                                       indexedNodeWithNode:newChildSnap]
-                          childKey:childKey
-                    oldIndexedNode:[FIndexedNode
-                                       indexedNodeWithNode:oldChildSnap]];
-                [optChangeAccumulator trackChildChange:change];
-            }
-            return [oldIndexed updateChild:childKey withNewChild:newChildSnap];
-        } else {
-            // `newChildSnap` is ordered after `nextChild`, so it's a child
-            // removed event
-            if (optChangeAccumulator != nil) {
-                FChange *change = [[FChange alloc]
-                    initWithType:FIRDataEventTypeChildRemoved
-                     indexedNode:[FIndexedNode indexedNodeWithNode:oldChildSnap]
-                        childKey:childKey];
-                [optChangeAccumulator trackChildChange:change];
-            }
-            FIndexedNode *newIndexed =
-                [oldIndexed updateChild:childKey
-                           withNewChild:[FEmptyNode emptyNode]];
-
-            // We need to check if the `nextChild` is actually in range before
-            // adding it
-            BOOL nextChildInRange =
-                (nextChild != nil) &&
-                [self.rangedFilter matchesKey:nextChild.name
-                                      andNode:nextChild.node];
-            if (nextChildInRange) {
-                if (optChangeAccumulator != nil) {
-                    FChange *change = [[FChange alloc]
-                        initWithType:FIRDataEventTypeChildAdded
-                         indexedNode:[FIndexedNode
-                                         indexedNodeWithNode:nextChild.node]
-                            childKey:nextChild.name];
-                    [optChangeAccumulator trackChildChange:change];
-                }
-                return [newIndexed updateChild:nextChild.name
-                                  withNewChild:nextChild.node];
-            } else {
-                return newIndexed;
-            }
-        }
-    } else if (newChildSnap.isEmpty) {
-        // We're deleting a node, but it was not in the window, so ignore it.
-        return oldIndexed;
-    } else if (inRange) {
-        // `newChildSnap` is in range, but was ordered after `windowBoundary`.
-        // If this has changed, we bump out the `windowBoundary` and add the
-        // `newChildSnap`
-        if ([self.index compareKey:windowBoundary.name
-                           andNode:windowBoundary.node
-                        toOtherKey:childKey
-                           andNode:newChildSnap
-                           reverse:self.reverse] >= NSOrderedSame) {
-            if (optChangeAccumulator != nil) {
-                FChange *removedChange = [[FChange alloc]
-                    initWithType:FIRDataEventTypeChildRemoved
-                     indexedNode:[FIndexedNode
-                                     indexedNodeWithNode:windowBoundary.node]
-                        childKey:windowBoundary.name];
-                FChange *addedChange = [[FChange alloc]
-                    initWithType:FIRDataEventTypeChildAdded
-                     indexedNode:[FIndexedNode indexedNodeWithNode:newChildSnap]
-                        childKey:childKey];
-                [optChangeAccumulator trackChildChange:removedChange];
-                [optChangeAccumulator trackChildChange:addedChange];
-            }
-            return [[oldIndexed updateChild:childKey withNewChild:newChildSnap]
-                 updateChild:windowBoundary.name
-                withNewChild:[FEmptyNode emptyNode]];
-        } else {
-            return oldIndexed;
-        }
-    } else {
-        // `newChildSnap` was not in range and remains not in range, so ignore
-        // it.
-        return oldIndexed;
-    }
-}
-
-- (FIndexedNode *)updateFullNode:(FIndexedNode *)oldSnap
-                     withNewNode:(FIndexedNode *)newSnap
-                     accumulator:
-                         (FChildChangeAccumulator *)optChangeAccumulator {
-    __block FIndexedNode *filtered;
-    if (newSnap.node.isLeafNode || newSnap.node.isEmpty) {
-        // Make sure we have a children node with the correct index, not a leaf
-        // node
-        filtered = [FIndexedNode indexedNodeWithNode:[FEmptyNode emptyNode]
-                                               index:self.index];
-    } else {
-        filtered = newSnap;
-        // Don't support priorities on queries.
-        filtered = [filtered updatePriority:[FEmptyNode emptyNode]];
-        FNamedNode *startPost = nil;
-        FNamedNode *endPost = nil;
-        if (self.reverse) {
-            startPost = self.rangedFilter.endPost;
-            endPost = self.rangedFilter.startPost;
-        } else {
-            startPost = self.rangedFilter.startPost;
-            endPost = self.rangedFilter.endPost;
-        }
-        __block BOOL foundStartPost = NO;
-        __block NSUInteger count = 0;
-        [newSnap
-            enumerateChildrenReverse:self.reverse
-                          usingBlock:^(NSString *childKey, id<FNode> childNode,
-                                       BOOL *stop) {
-                            if (!foundStartPost &&
-                                [self.index
-                                    compareKey:startPost.name
-                                       andNode:startPost.node
-                                    toOtherKey:childKey
-                                       andNode:childNode
-                                       reverse:self.reverse] <= NSOrderedSame) {
-                                // Start adding
-                                foundStartPost = YES;
-                            }
-                            BOOL inRange = foundStartPost && count < self.limit;
-                            inRange = inRange &&
-                                      [self.index compareKey:childKey
-                                                     andNode:childNode
-                                                  toOtherKey:endPost.name
-                                                     andNode:endPost.node
-                                                     reverse:self.reverse] <=
-                                          NSOrderedSame;
-                            if (inRange) {
-                                count++;
-                            } else {
-                                filtered = [filtered
-                                     updateChild:childKey
-                                    withNewChild:[FEmptyNode emptyNode]];
-                            }
-                          }];
-    }
-    return [self.indexedFilter updateFullNode:oldSnap
-                                  withNewNode:filtered
-                                  accumulator:optChangeAccumulator];
-}
-
-- (FIndexedNode *)updatePriority:(id<FNode>)priority
-                         forNode:(FIndexedNode *)oldSnap {
-    // Don't support priorities on queries.
-    return oldSnap;
-}
-
-- (BOOL)filtersNodes {
-    return YES;
-}
-
-- (id<FNodeFilter>)indexedFilter {
-    return self.rangedFilter.indexedFilter;
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FNodeFilter.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FNodeFilter.h
deleted file mode 100644
index d19c6fb..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FNodeFilter.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@protocol FNode;
-@class FIndexedNode;
-@protocol FCompleteChildSource;
-@class FChildChangeAccumulator;
-@protocol FIndex;
-@class FPath;
-
-/**
- * FNodeFilter is used to update nodes and complete children of nodes while
- * applying queries on the fly and keeping track of any child changes. This
- * class does not track value changes as value changes depend on more than just
- * the node itself. Different kind of queries require different kind of
- * implementations of this interface.
- */
-@protocol FNodeFilter <NSObject>
-
-/**
- * Update a single complete child in the snap. If the child equals the old child
- * in the snap, this is a no-op. The method expects an indexed snap.
- */
-- (FIndexedNode *)updateChildIn:(FIndexedNode *)oldSnap
-                    forChildKey:(NSString *)childKey
-                       newChild:(id<FNode>)newChildSnap
-                   affectedPath:(FPath *)affectedPath
-                     fromSource:(id<FCompleteChildSource>)source
-                    accumulator:(FChildChangeAccumulator *)optChangeAccumulator;
-
-/**
- * Update a node in full and output any resulting change from this complete
- * update.
- */
-- (FIndexedNode *)updateFullNode:(FIndexedNode *)oldSnap
-                     withNewNode:(FIndexedNode *)newSnap
-                     accumulator:
-                         (FChildChangeAccumulator *)optChangeAccumulator;
-
-/**
- * Update the priority of the root node
- */
-- (FIndexedNode *)updatePriority:(id<FNode>)priority
-                         forNode:(FIndexedNode *)oldSnap;
-
-/**
- * Returns true if children might be filtered due to query critiera
- */
-- (BOOL)filtersNodes;
-
-/**
- * Returns the index filter that this filter uses to get a NodeFilter that
- * doesn't filter any children.
- */
-@property(nonatomic, strong, readonly) id<FNodeFilter> indexedFilter;
-
-/**
- * Returns the index that this filter uses
- */
-@property(nonatomic, strong, readonly) id<FIndex> index;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FClock.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FClock.h
deleted file mode 100644
index e85cb2a..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FClock.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@protocol FClock <NSObject>
-
-- (NSTimeInterval)currentTime;
-
-@end
-
-@interface FSystemClock : NSObject <FClock>
-
-+ (FSystemClock *)clock;
-
-@end
-
-@interface FOffsetClock : NSObject <FClock>
-
-- (id)initWithClock:(id<FClock>)clock offset:(NSTimeInterval)offset;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FClock.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FClock.m
deleted file mode 100644
index 5d9a9ec..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FClock.m
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FClock.h"
-
-@implementation FSystemClock
-
-- (NSTimeInterval)currentTime {
-    return [[NSDate date] timeIntervalSince1970];
-}
-
-+ (FSystemClock *)clock {
-    static dispatch_once_t onceToken;
-    static FSystemClock *clock;
-    dispatch_once(&onceToken, ^{
-      clock = [[FSystemClock alloc] init];
-    });
-    return clock;
-}
-
-@end
-
-@interface FOffsetClock ()
-
-@property(nonatomic, strong) id<FClock> clock;
-@property(nonatomic) NSTimeInterval offset;
-
-@end
-
-@implementation FOffsetClock
-
-- (NSTimeInterval)currentTime {
-    return [self.clock currentTime] + self.offset;
-}
-
-- (id)initWithClock:(id<FClock>)clock offset:(NSTimeInterval)offset {
-    self = [super init];
-    if (self != nil) {
-        self->_clock = clock;
-        self->_offset = offset;
-    }
-    return self;
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FEventGenerator.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FEventGenerator.h
deleted file mode 100644
index 443664e..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FEventGenerator.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@class FQuerySpec;
-@class FIndexedNode;
-@protocol FNode;
-
-@interface FEventGenerator : NSObject
-- (id)initWithQuery:(FQuerySpec *)query;
-- (NSArray *)generateEventsForChanges:(NSArray *)changes
-                           eventCache:(FIndexedNode *)eventCache
-                   eventRegistrations:(NSArray *)registrations;
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FEventGenerator.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FEventGenerator.m
deleted file mode 100644
index 162b0ac..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FEventGenerator.m
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FEventGenerator.h"
-#import "FChange.h"
-#import "FDataEvent.h"
-#import "FEvent.h"
-#import "FEventRegistration.h"
-#import "FIRDatabaseQuery_Private.h"
-#import "FNamedNode.h"
-#import "FNode.h"
-#import "FQueryParams.h"
-#import "FQuerySpec.h"
-
-@interface FEventGenerator ()
-@property(nonatomic, strong) FQuerySpec *query;
-@end
-
-/**
- * An EventGenerator is used to convert "raw" changes (fb.core.view.Change) as
- * computed by the CacheDiffer into actual events (fb.core.view.Event) that can
- * be raised.  See generateEventsForChanges() for details.
- */
-@implementation FEventGenerator
-
-- (id)initWithQuery:(FQuerySpec *)query {
-    self = [super init];
-    if (self) {
-        self.query = query;
-    }
-    return self;
-}
-
-/**
- * Given a set of raw changes (no moved events, and prevName not specified yet),
- * and a set of EventRegistrations that should be notified of these changes,
- * generate the actual events to be raised.
- *
- * Notes:
- * - child_moved events will be synthesized at this time for any child_changed
- * events that affect our index
- * - prevName will be calculated based on the index ordering
- *
- * @param changes NSArray of FChange, not necessarily in order.
- * @param registrations is NSArray of FEventRegistration.
- * @return NSArray of FEvent.
- */
-- (NSArray *)generateEventsForChanges:(NSArray *)changes
-                           eventCache:(FIndexedNode *)eventCache
-                   eventRegistrations:(NSArray *)registrations {
-    NSMutableArray *events = [[NSMutableArray alloc] init];
-
-    // child_moved is index-specific, so check all our child_changed events to
-    // see if we need to materialize child_moved events with this view's index
-    NSMutableArray *moves = [[NSMutableArray alloc] init];
-    for (FChange *change in changes) {
-        if (change.type == FIRDataEventTypeChildChanged &&
-            [self.query.index
-                indexedValueChangedBetween:change.oldIndexedNode.node
-                                       and:change.indexedNode.node]) {
-            FChange *moveChange =
-                [[FChange alloc] initWithType:FIRDataEventTypeChildMoved
-                                  indexedNode:change.indexedNode
-                                     childKey:change.childKey
-                               oldIndexedNode:nil];
-            [moves addObject:moveChange];
-        }
-    }
-
-    [self generateEvents:events
-                   forType:FIRDataEventTypeChildRemoved
-                   changes:changes
-                eventCache:eventCache
-        eventRegistrations:registrations];
-    [self generateEvents:events
-                   forType:FIRDataEventTypeChildAdded
-                   changes:changes
-                eventCache:eventCache
-        eventRegistrations:registrations];
-    [self generateEvents:events
-                   forType:FIRDataEventTypeChildMoved
-                   changes:moves
-                eventCache:eventCache
-        eventRegistrations:registrations];
-    [self generateEvents:events
-                   forType:FIRDataEventTypeChildChanged
-                   changes:changes
-                eventCache:eventCache
-        eventRegistrations:registrations];
-    [self generateEvents:events
-                   forType:FIRDataEventTypeValue
-                   changes:changes
-                eventCache:eventCache
-        eventRegistrations:registrations];
-
-    return events;
-}
-
-- (void)generateEvents:(NSMutableArray *)events
-               forType:(FIRDataEventType)eventType
-               changes:(NSArray *)changes
-            eventCache:(FIndexedNode *)eventCache
-    eventRegistrations:(NSArray *)registrations {
-    NSMutableArray *filteredChanges = [[NSMutableArray alloc] init];
-    for (FChange *change in changes) {
-        if (change.type == eventType) {
-            [filteredChanges addObject:change];
-        }
-    }
-
-    id<FIndex> index = self.query.index;
-
-    [filteredChanges
-        sortUsingComparator:^NSComparisonResult(FChange *one, FChange *two) {
-          if (one.childKey == nil || two.childKey == nil) {
-              @throw [[NSException alloc]
-                  initWithName:@"InternalInconsistencyError"
-                        reason:@"Should only compare child_ events"
-                      userInfo:nil];
-          }
-          return [index compareKey:one.childKey
-                           andNode:one.indexedNode.node
-                        toOtherKey:two.childKey
-                           andNode:two.indexedNode.node];
-        }];
-
-    for (FChange *change in filteredChanges) {
-        for (id<FEventRegistration> registration in registrations) {
-            if ([registration responseTo:eventType]) {
-                id<FEvent> event = [self generateEventForChange:change
-                                                   registration:registration
-                                                     eventCache:eventCache];
-                [events addObject:event];
-            }
-        }
-    }
-}
-
-- (id<FEvent>)generateEventForChange:(FChange *)change
-                        registration:(id<FEventRegistration>)registration
-                          eventCache:(FIndexedNode *)eventCache {
-    FChange *materializedChange;
-    if (change.type == FIRDataEventTypeValue ||
-        change.type == FIRDataEventTypeChildRemoved) {
-        materializedChange = change;
-    } else {
-        NSString *prevChildKey =
-            [eventCache predecessorForChildKey:change.childKey
-                                     childNode:change.indexedNode.node
-                                         index:self.query.index];
-        materializedChange = [change changeWithPrevKey:prevChildKey];
-    }
-    return [registration createEventFrom:materializedChange query:self.query];
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FIRDatabaseConfig_Private.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FIRDatabaseConfig_Private.h
deleted file mode 100644
index ca2f34b..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FIRDatabaseConfig_Private.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FAuthTokenProvider.h"
-#import "FIRDatabaseConfig.h"
-
-@protocol FStorageEngine;
-
-@interface FIRDatabaseConfig ()
-
-@property(nonatomic, readonly) BOOL isFrozen;
-@property(nonatomic, strong, readonly) NSString *sessionIdentifier;
-@property(nonatomic, strong) id<FAuthTokenProvider> authTokenProvider;
-@property(nonatomic, strong) id<FStorageEngine> forceStorageEngine;
-
-- (void)freeze;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FIRDatabaseReference.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FIRDatabaseReference.m
deleted file mode 100644
index b3c0106..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FIRDatabaseReference.m
+++ /dev/null
@@ -1,528 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FIRDatabaseReference.h"
-#import "FIRDatabase.h"
-#import "FIRDatabaseConfig.h"
-#import "FIRDatabaseConfig_Private.h"
-#import "FIRDatabaseQuery_Private.h"
-#import "FIRDatabaseReference_Private.h"
-#import "FNextPushId.h"
-#import "FQueryParams.h"
-#import "FSnapshotUtilities.h"
-#import "FStringUtilities.h"
-#import "FUtilities.h"
-#import "FValidation.h"
-#import <FirebaseCore/FIRApp.h>
-#import <FirebaseCore/FIROptions.h>
-
-@implementation FIRDatabaseReference
-
-#pragma mark -
-#pragma mark Constructors
-
-- (id)initWithConfig:(FIRDatabaseConfig *)config {
-    FParsedUrl *parsedUrl =
-        [FUtilities parseUrl:[[FIRApp defaultApp] options].databaseURL];
-    [FValidation validateFrom:@"initWithUrl:" validURL:parsedUrl];
-    return [self initWithRepo:[FRepoManager getRepo:parsedUrl.repoInfo
-                                             config:config]
-                         path:parsedUrl.path];
-}
-
-- (id)initWithRepo:(FRepo *)repo path:(FPath *)path {
-    return [super initWithRepo:repo
-                          path:path
-                        params:[FQueryParams defaultInstance]
-                 orderByCalled:NO
-          priorityMethodCalled:NO];
-}
-
-#pragma mark -
-#pragma mark Ancillary methods
-
-- (nullable NSString *)key {
-    if ([self.path isEmpty]) {
-        return nil;
-    } else {
-        return [self.path getBack];
-    }
-}
-
-- (FIRDatabase *)database {
-    return self.repo.database;
-}
-
-- (FIRDatabaseReference *)parent {
-    FPath *parentPath = [self.path parent];
-    FIRDatabaseReference *parent = nil;
-    if (parentPath != nil) {
-        parent = [[FIRDatabaseReference alloc] initWithRepo:self.repo
-                                                       path:parentPath];
-    }
-    return parent;
-}
-
-- (NSString *)URL {
-    FIRDatabaseReference *parent = [self parent];
-    return parent == nil
-               ? [self.repo description]
-               : [NSString
-                     stringWithFormat:@"%@/%@", [parent description],
-                                      [FStringUtilities urlEncoded:self.key]];
-}
-
-- (NSString *)description {
-    return [self URL];
-}
-
-- (FIRDatabaseReference *)root {
-    return [[FIRDatabaseReference alloc]
-        initWithRepo:self.repo
-                path:[[FPath alloc] initWith:@""]];
-}
-
-#pragma mark -
-#pragma mark Child methods
-
-- (FIRDatabaseReference *)child:(NSString *)pathString {
-    if ([self.path getFront] == nil) {
-        // we're at the root
-        [FValidation validateFrom:@"child:" validRootPathString:pathString];
-    } else {
-        [FValidation validateFrom:@"child:" validPathString:pathString];
-    }
-    FPath *path = [self.path childFromString:pathString];
-    FIRDatabaseReference *firebaseRef =
-        [[FIRDatabaseReference alloc] initWithRepo:self.repo path:path];
-    return firebaseRef;
-}
-
-- (FIRDatabaseReference *)childByAutoId {
-    [FValidation validateFrom:@"childByAutoId:" writablePath:self.path];
-
-    NSString *name = [FNextPushId get:self.repo.serverTime];
-    return [self child:name];
-}
-
-#pragma mark -
-#pragma mark Basic write methods
-
-- (void)setValue:(id)value {
-    [self setValueInternal:value
-                andPriority:nil
-        withCompletionBlock:nil
-                       from:@"setValue:"];
-}
-
-- (void)setValue:(id)value withCompletionBlock:(fbt_void_nserror_ref)block {
-    [self setValueInternal:value
-                andPriority:nil
-        withCompletionBlock:block
-                       from:@"setValue:withCompletionBlock:"];
-}
-
-- (void)setValue:(id)value andPriority:(id)priority {
-    [self setValueInternal:value
-                andPriority:priority
-        withCompletionBlock:nil
-                       from:@"setValue:andPriority:"];
-}
-
-- (void)setValue:(id)value
-            andPriority:(id)priority
-    withCompletionBlock:(fbt_void_nserror_ref)block {
-    [self setValueInternal:value
-                andPriority:priority
-        withCompletionBlock:block
-                       from:@"setValue:andPriority:withCompletionBlock:"];
-}
-
-- (void)setValueInternal:(id)value
-             andPriority:(id)priority
-     withCompletionBlock:(fbt_void_nserror_ref)block
-                    from:(NSString *)fn {
-    [FValidation validateFrom:fn writablePath:self.path];
-
-    fbt_void_nserror_ref userCallback = [block copy];
-    id<FNode> newNode = [FSnapshotUtilities nodeFrom:value
-                                            priority:priority
-                                  withValidationFrom:fn];
-
-    dispatch_async([FIRDatabaseQuery sharedQueue], ^{
-      [self.repo set:self.path withNode:newNode withCallback:userCallback];
-    });
-}
-
-- (void)removeValue {
-    [self setValueInternal:nil
-                andPriority:nil
-        withCompletionBlock:nil
-                       from:@"removeValue:"];
-}
-
-- (void)removeValueWithCompletionBlock:(fbt_void_nserror_ref)block {
-    [self setValueInternal:nil
-                andPriority:nil
-        withCompletionBlock:block
-                       from:@"removeValueWithCompletionBlock:"];
-}
-
-- (void)setPriority:(id)priority {
-    [self setPriorityInternal:priority
-          withCompletionBlock:nil
-                         from:@"setPriority:"];
-}
-
-- (void)setPriority:(id)priority
-    withCompletionBlock:(fbt_void_nserror_ref)block {
-
-    [self setPriorityInternal:priority
-          withCompletionBlock:block
-                         from:@"setPriority:withCompletionBlock:"];
-}
-
-- (void)setPriorityInternal:(id)priority
-        withCompletionBlock:(fbt_void_nserror_ref)block
-                       from:(NSString *)fn {
-    [FValidation validateFrom:fn writablePath:self.path];
-
-    fbt_void_nserror_ref userCallback = [block copy];
-    dispatch_async([FIRDatabaseQuery sharedQueue], ^{
-      [self.repo set:[self.path childFromString:@".priority"]
-              withNode:[FSnapshotUtilities nodeFrom:priority]
-          withCallback:userCallback];
-    });
-}
-
-- (void)updateChildValues:(NSDictionary *)values {
-    [self updateChildValuesInternal:values
-                withCompletionBlock:nil
-                               from:@"updateChildValues:"];
-}
-
-- (void)updateChildValues:(NSDictionary *)values
-      withCompletionBlock:(fbt_void_nserror_ref)block {
-    [self updateChildValuesInternal:values
-                withCompletionBlock:block
-                               from:@"updateChildValues:withCompletionBlock:"];
-}
-
-- (void)updateChildValuesInternal:(NSDictionary *)values
-              withCompletionBlock:(fbt_void_nserror_ref)block
-                             from:(NSString *)fn {
-    [FValidation validateFrom:fn writablePath:self.path];
-
-    FCompoundWrite *merge =
-        [FSnapshotUtilities compoundWriteFromDictionary:values
-                                     withValidationFrom:fn];
-
-    fbt_void_nserror_ref userCallback = [block copy];
-    dispatch_async([FIRDatabaseQuery sharedQueue], ^{
-      [self.repo update:self.path withNodes:merge withCallback:userCallback];
-    });
-}
-
-#pragma mark -
-#pragma mark Disconnect Operations
-
-- (void)onDisconnectSetValue:(id)value {
-    [self onDisconnectSetValueInternal:value
-                           andPriority:nil
-                   withCompletionBlock:nil
-                                  from:@"onDisconnectSetValue:"];
-}
-
-- (void)onDisconnectSetValue:(id)value
-         withCompletionBlock:(fbt_void_nserror_ref)block {
-    [self onDisconnectSetValueInternal:value
-                           andPriority:nil
-                   withCompletionBlock:block
-                                  from:@"onDisconnectSetValue:"
-                                       @"withCompletionBlock:"];
-}
-
-- (void)onDisconnectSetValue:(id)value andPriority:(id)priority {
-    [self onDisconnectSetValueInternal:value
-                           andPriority:priority
-                   withCompletionBlock:nil
-                                  from:@"onDisconnectSetValue:andPriority:"];
-}
-
-- (void)onDisconnectSetValue:(id)value
-                 andPriority:(id)priority
-         withCompletionBlock:(fbt_void_nserror_ref)block {
-    [self onDisconnectSetValueInternal:value
-                           andPriority:priority
-                   withCompletionBlock:block
-                                  from:@"onDisconnectSetValue:andPriority:"
-                                       @"withCompletionBlock:"];
-}
-
-- (void)onDisconnectSetValueInternal:(id)value
-                         andPriority:(id)priority
-                 withCompletionBlock:(fbt_void_nserror_ref)block
-                                from:(NSString *)fn {
-    [FValidation validateFrom:fn writablePath:self.path];
-
-    id<FNode> newNodeUnresolved = [FSnapshotUtilities nodeFrom:value
-                                                      priority:priority
-                                            withValidationFrom:fn];
-
-    fbt_void_nserror_ref userCallback = [block copy];
-    dispatch_async([FIRDatabaseQuery sharedQueue], ^{
-      [self.repo onDisconnectSet:self.path
-                        withNode:newNodeUnresolved
-                    withCallback:userCallback];
-    });
-}
-
-- (void)onDisconnectRemoveValue {
-    [self onDisconnectSetValueInternal:nil
-                           andPriority:nil
-                   withCompletionBlock:nil
-                                  from:@"onDisconnectRemoveValue:"];
-}
-
-- (void)onDisconnectRemoveValueWithCompletionBlock:(fbt_void_nserror_ref)block {
-    [self onDisconnectSetValueInternal:nil
-                           andPriority:nil
-                   withCompletionBlock:block
-                                  from:@"onDisconnectRemoveValueWithCompletionB"
-                                       @"lock:"];
-}
-
-- (void)onDisconnectUpdateChildValues:(NSDictionary *)values {
-    [self
-        onDisconnectUpdateChildValuesInternal:values
-                          withCompletionBlock:nil
-                                         from:
-                                             @"onDisconnectUpdateChildValues:"];
-}
-
-- (void)onDisconnectUpdateChildValues:(NSDictionary *)values
-                  withCompletionBlock:(fbt_void_nserror_ref)block {
-    [self onDisconnectUpdateChildValuesInternal:values
-                            withCompletionBlock:block
-                                           from:@"onDisconnectUpdateChildValues"
-                                                @":withCompletionBlock:"];
-}
-
-- (void)onDisconnectUpdateChildValuesInternal:(NSDictionary *)values
-                          withCompletionBlock:(fbt_void_nserror_ref)block
-                                         from:(NSString *)fn {
-    [FValidation validateFrom:fn writablePath:self.path];
-
-    FCompoundWrite *merge =
-        [FSnapshotUtilities compoundWriteFromDictionary:values
-                                     withValidationFrom:fn];
-
-    fbt_void_nserror_ref userCallback = [block copy];
-    dispatch_async([FIRDatabaseQuery sharedQueue], ^{
-      [self.repo onDisconnectUpdate:self.path
-                          withNodes:merge
-                       withCallback:userCallback];
-    });
-}
-
-- (void)cancelDisconnectOperations {
-    [self cancelDisconnectOperationsWithCompletionBlock:nil];
-}
-
-- (void)cancelDisconnectOperationsWithCompletionBlock:
-    (fbt_void_nserror_ref)block {
-    fbt_void_nserror_ref callback = nil;
-    if (block != nil) {
-        callback = [block copy];
-    }
-    dispatch_async([FIRDatabaseQuery sharedQueue], ^{
-      [self.repo onDisconnectCancel:self.path withCallback:callback];
-    });
-}
-
-#pragma mark -
-#pragma mark Connection management methods
-
-+ (void)goOffline {
-    [FRepoManager interruptAll];
-}
-
-+ (void)goOnline {
-    [FRepoManager resumeAll];
-}
-
-#pragma mark -
-#pragma mark Data reading methods deferred to FQuery
-
-- (FIRDatabaseHandle)observeEventType:(FIRDataEventType)eventType
-                            withBlock:(fbt_void_datasnapshot)block {
-    return [self observeEventType:eventType
-                        withBlock:block
-                  withCancelBlock:nil];
-}
-
-- (FIRDatabaseHandle)observeEventType:(FIRDataEventType)eventType
-       andPreviousSiblingKeyWithBlock:(fbt_void_datasnapshot_nsstring)block {
-    return [self observeEventType:eventType
-        andPreviousSiblingKeyWithBlock:block
-                       withCancelBlock:nil];
-}
-
-- (FIRDatabaseHandle)observeEventType:(FIRDataEventType)eventType
-                            withBlock:(fbt_void_datasnapshot)block
-                      withCancelBlock:(fbt_void_nserror)cancelBlock {
-    return [super observeEventType:eventType
-                         withBlock:block
-                   withCancelBlock:cancelBlock];
-}
-
-- (FIRDatabaseHandle)observeEventType:(FIRDataEventType)eventType
-       andPreviousSiblingKeyWithBlock:(fbt_void_datasnapshot_nsstring)block
-                      withCancelBlock:(fbt_void_nserror)cancelBlock {
-    return [super observeEventType:eventType
-        andPreviousSiblingKeyWithBlock:block
-                       withCancelBlock:cancelBlock];
-}
-
-- (void)removeObserverWithHandle:(FIRDatabaseHandle)handle {
-    [super removeObserverWithHandle:handle];
-}
-
-- (void)removeAllObservers {
-    [super removeAllObservers];
-}
-
-- (void)keepSynced:(BOOL)keepSynced {
-    [super keepSynced:keepSynced];
-}
-
-- (void)observeSingleEventOfType:(FIRDataEventType)eventType
-                       withBlock:(fbt_void_datasnapshot)block {
-    [self observeSingleEventOfType:eventType
-                         withBlock:block
-                   withCancelBlock:nil];
-}
-
-- (void)observeSingleEventOfType:(FIRDataEventType)eventType
-    andPreviousSiblingKeyWithBlock:(fbt_void_datasnapshot_nsstring)block {
-    [self observeSingleEventOfType:eventType
-        andPreviousSiblingKeyWithBlock:block
-                       withCancelBlock:nil];
-}
-
-- (void)observeSingleEventOfType:(FIRDataEventType)eventType
-                       withBlock:(fbt_void_datasnapshot)block
-                 withCancelBlock:(fbt_void_nserror)cancelBlock {
-    [super observeSingleEventOfType:eventType
-                          withBlock:block
-                    withCancelBlock:cancelBlock];
-}
-
-- (void)observeSingleEventOfType:(FIRDataEventType)eventType
-    andPreviousSiblingKeyWithBlock:(fbt_void_datasnapshot_nsstring)block
-                   withCancelBlock:(fbt_void_nserror)cancelBlock {
-    [super observeSingleEventOfType:eventType
-        andPreviousSiblingKeyWithBlock:block
-                       withCancelBlock:cancelBlock];
-}
-
-#pragma mark -
-#pragma mark Query methods
-// These methods suppress warnings from having method definitions in
-// FIRDatabaseReference.h for docs generation.
-
-- (FIRDatabaseQuery *)queryLimitedToFirst:(NSUInteger)limit {
-    return [super queryLimitedToFirst:limit];
-}
-
-- (FIRDatabaseQuery *)queryLimitedToLast:(NSUInteger)limit {
-    return [super queryLimitedToLast:limit];
-}
-
-- (FIRDatabaseQuery *)queryOrderedByChild:(NSString *)key {
-    return [super queryOrderedByChild:key];
-}
-
-- (FIRDatabaseQuery *)queryOrderedByKey {
-    return [super queryOrderedByKey];
-}
-
-- (FIRDatabaseQuery *)queryOrderedByPriority {
-    return [super queryOrderedByPriority];
-}
-
-- (FIRDatabaseQuery *)queryStartingAtValue:(id)startValue {
-    return [super queryStartingAtValue:startValue];
-}
-
-- (FIRDatabaseQuery *)queryStartingAtValue:(id)startValue
-                                  childKey:(NSString *)childKey {
-    return [super queryStartingAtValue:startValue childKey:childKey];
-}
-
-- (FIRDatabaseQuery *)queryEndingAtValue:(id)endValue {
-    return [super queryEndingAtValue:endValue];
-}
-
-- (FIRDatabaseQuery *)queryEndingAtValue:(id)endValue
-                                childKey:(NSString *)childKey {
-    return [super queryEndingAtValue:endValue childKey:childKey];
-}
-
-- (FIRDatabaseQuery *)queryEqualToValue:(id)value {
-    return [super queryEqualToValue:value];
-}
-
-- (FIRDatabaseQuery *)queryEqualToValue:(id)value
-                               childKey:(NSString *)childKey {
-    return [super queryEqualToValue:value childKey:childKey];
-}
-
-#pragma mark -
-#pragma mark Transaction methods
-
-- (void)runTransactionBlock:(fbt_transactionresult_mutabledata)block {
-    [FValidation validateFrom:@"runTransactionBlock:" writablePath:self.path];
-    [self runTransactionBlock:block andCompletionBlock:nil withLocalEvents:YES];
-}
-
-- (void)runTransactionBlock:(fbt_transactionresult_mutabledata)update
-         andCompletionBlock:
-             (fbt_void_nserror_bool_datasnapshot)completionBlock {
-    [FValidation validateFrom:@"runTransactionBlock:andCompletionBlock:"
-                 writablePath:self.path];
-    [self runTransactionBlock:update
-           andCompletionBlock:completionBlock
-              withLocalEvents:YES];
-}
-
-- (void)runTransactionBlock:(fbt_transactionresult_mutabledata)block
-         andCompletionBlock:(fbt_void_nserror_bool_datasnapshot)completionBlock
-            withLocalEvents:(BOOL)localEvents {
-    [FValidation
-        validateFrom:@"runTransactionBlock:andCompletionBlock:withLocalEvents:"
-        writablePath:self.path];
-    fbt_transactionresult_mutabledata updateCopy = [block copy];
-    fbt_void_nserror_bool_datasnapshot onCompleteCopy = [completionBlock copy];
-    dispatch_async([FIRDatabaseQuery sharedQueue], ^{
-      [self.repo startTransactionOnPath:self.path
-                                 update:updateCopy
-                             onComplete:onCompleteCopy
-                        withLocalEvents:localEvents];
-    });
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FIndex.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FIndex.h
deleted file mode 100644
index 89bec76..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FIndex.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@class FImmutableSortedDictionary;
-@class FNamedNode;
-@protocol FNode;
-
-@protocol FIndex <NSObject, NSCopying>
-- (NSComparisonResult)compareKey:(NSString *)key1
-                         andNode:(id<FNode>)node1
-                      toOtherKey:(NSString *)key2
-                         andNode:(id<FNode>)node2;
-
-- (NSComparisonResult)compareKey:(NSString *)key1
-                         andNode:(id<FNode>)node1
-                      toOtherKey:(NSString *)key2
-                         andNode:(id<FNode>)node2
-                         reverse:(BOOL)reverse;
-
-- (NSComparisonResult)compareNamedNode:(FNamedNode *)namedNode1
-                           toNamedNode:(FNamedNode *)namedNode2;
-
-- (BOOL)isDefinedOn:(id<FNode>)node;
-- (BOOL)indexedValueChangedBetween:(id<FNode>)oldNode and:(id<FNode>)newNode;
-- (FNamedNode *)minPost;
-- (FNamedNode *)maxPost;
-- (FNamedNode *)makePost:(id<FNode>)indexValue name:(NSString *)name;
-- (NSString *)queryDefinition;
-
-@end
-
-@interface FIndex : NSObject
-
-+ (id<FIndex>)indexFromQueryDefinition:(NSString *)string;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FIndex.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FIndex.m
deleted file mode 100644
index 0366399..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FIndex.m
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FIndex.h"
-
-#import "FKeyIndex.h"
-#import "FPathIndex.h"
-#import "FPriorityIndex.h"
-#import "FValueIndex.h"
-
-@implementation FIndex
-
-+ (id<FIndex>)indexFromQueryDefinition:(NSString *)string {
-    if ([string isEqualToString:@".key"]) {
-        return [FKeyIndex keyIndex];
-    } else if ([string isEqualToString:@".value"]) {
-        return [FValueIndex valueIndex];
-    } else if ([string isEqualToString:@".priority"]) {
-        return [FPriorityIndex priorityIndex];
-    } else {
-        return
-            [[FPathIndex alloc] initWithPath:[[FPath alloc] initWith:string]];
-    }
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FKeyIndex.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FKeyIndex.h
deleted file mode 100644
index 281a5ac..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FKeyIndex.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FIndex.h"
-#import <Foundation/Foundation.h>
-
-@interface FKeyIndex : NSObject <FIndex>
-+ (id<FIndex>)keyIndex;
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FKeyIndex.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FKeyIndex.m
deleted file mode 100644
index ac10829..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FKeyIndex.m
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FKeyIndex.h"
-#import "FEmptyNode.h"
-#import "FNamedNode.h"
-#import "FSnapshotUtilities.h"
-#import "FUtilities.h"
-
-@interface FKeyIndex ()
-
-@property(nonatomic, strong) FNamedNode *maxPost;
-
-@end
-
-@implementation FKeyIndex
-
-- (id)init {
-    self = [super init];
-    if (self) {
-        self.maxPost = [[FNamedNode alloc] initWithName:[FUtilities maxName]
-                                                andNode:[FEmptyNode emptyNode]];
-    }
-    return self;
-}
-
-- (NSComparisonResult)compareKey:(NSString *)key1
-                         andNode:(id<FNode>)node1
-                      toOtherKey:(NSString *)key2
-                         andNode:(id<FNode>)node2 {
-    return [FUtilities compareKey:key1 toKey:key2];
-}
-
-- (NSComparisonResult)compareKey:(NSString *)key1
-                         andNode:(id<FNode>)node1
-                      toOtherKey:(NSString *)key2
-                         andNode:(id<FNode>)node2
-                         reverse:(BOOL)reverse {
-    if (reverse) {
-        return [self compareKey:key2
-                        andNode:node2
-                     toOtherKey:key1
-                        andNode:node1];
-    } else {
-        return [self compareKey:key1
-                        andNode:node1
-                     toOtherKey:key2
-                        andNode:node2];
-    }
-}
-
-- (NSComparisonResult)compareNamedNode:(FNamedNode *)namedNode1
-                           toNamedNode:(FNamedNode *)namedNode2 {
-    return [self compareKey:namedNode1.name
-                    andNode:namedNode1.node
-                 toOtherKey:namedNode2.name
-                    andNode:namedNode2.node];
-}
-
-- (BOOL)isDefinedOn:(id<FNode>)node {
-    return YES;
-}
-
-- (BOOL)indexedValueChangedBetween:(id<FNode>)oldNode and:(id<FNode>)newNode {
-    return NO; // The key for a node never changes.
-}
-
-- (FNamedNode *)minPost {
-    return [FNamedNode min];
-}
-
-- (FNamedNode *)makePost:(id<FNode>)indexValue name:(NSString *)name {
-    NSString *key = indexValue.val;
-    NSAssert([key isKindOfClass:[NSString class]],
-             @"KeyIndex indexValue must always be a string.");
-    // We just use empty node, but it'll never be compared, since our comparator
-    // only looks at name.
-    return [[FNamedNode alloc] initWithName:key andNode:[FEmptyNode emptyNode]];
-}
-
-- (NSString *)queryDefinition {
-    return @".key";
-}
-
-- (NSString *)description {
-    return @"FKeyIndex";
-}
-
-- (id)copyWithZone:(NSZone *)zone {
-    return self;
-}
-
-- (BOOL)isEqual:(id)other {
-    // since we're a singleton.
-    return (other == self);
-}
-
-- (NSUInteger)hash {
-    return [@".key" hash];
-}
-
-+ (id<FIndex>)keyIndex {
-    static id<FIndex> keyIndex;
-    static dispatch_once_t once;
-    dispatch_once(&once, ^{
-      keyIndex = [[FKeyIndex alloc] init];
-    });
-    return keyIndex;
-}
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FListenComplete.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FListenComplete.h
deleted file mode 100644
index 99aabf8..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FListenComplete.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FOperation.h"
-#import <Foundation/Foundation.h>
-
-@interface FListenComplete : NSObject <FOperation>
-
-- (id)initWithSource:(FOperationSource *)aSource path:(FPath *)aPath;
-
-@property(nonatomic, strong, readonly) FOperationSource *source;
-@property(nonatomic, strong, readonly) FPath *path;
-@property(nonatomic, readonly) FOperationType type;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FListenComplete.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FListenComplete.m
deleted file mode 100644
index 26370c6..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FListenComplete.m
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FListenComplete.h"
-#import "FOperationSource.h"
-#import "FPath.h"
-
-@interface FListenComplete ()
-@property(nonatomic, strong, readwrite) FOperationSource *source;
-@property(nonatomic, strong, readwrite) FPath *path;
-@property(nonatomic, readwrite) FOperationType type;
-@end
-
-@implementation FListenComplete
-- (id)initWithSource:(FOperationSource *)aSource path:(FPath *)aPath {
-    NSAssert(!aSource.fromUser,
-             @"Can't have a listen complete from a user source");
-    self = [super init];
-    if (self) {
-        self.source = aSource;
-        self.path = aPath;
-        self.type = FOperationTypeListenComplete;
-    }
-    return self;
-}
-
-- (id<FOperation>)operationForChild:(NSString *)childKey {
-    if ([self.path isEmpty]) {
-        return [[FListenComplete alloc] initWithSource:self.source
-                                                  path:[FPath empty]];
-    } else {
-        return [[FListenComplete alloc] initWithSource:self.source
-                                                  path:[self.path popFront]];
-    }
-}
-
-- (NSString *)description {
-    return [NSString stringWithFormat:@"FListenComplete { path=%@, source=%@ }",
-                                      self.path, self.source];
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FMaxNode.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FMaxNode.h
deleted file mode 100644
index c68137e..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FMaxNode.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FChildrenNode.h"
-#import <Foundation/Foundation.h>
-
-@interface FMaxNode : FChildrenNode
-+ (id<FNode>)maxNode;
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FMaxNode.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FMaxNode.m
deleted file mode 100644
index 28e7672..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FMaxNode.m
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FMaxNode.h"
-#import "FEmptyNode.h"
-#import "FUtilities.h"
-
-@implementation FMaxNode {
-}
-- (id)init {
-    self = [super init];
-    if (self) {
-    }
-    return self;
-}
-
-+ (id<FNode>)maxNode {
-    static FMaxNode *maxNode = nil;
-    static dispatch_once_t once;
-    dispatch_once(&once, ^{
-      maxNode = [[FMaxNode alloc] init];
-    });
-    return maxNode;
-}
-
-- (NSComparisonResult)compare:(id<FNode>)other {
-    if (other == self) {
-        return NSOrderedSame;
-    } else {
-        return NSOrderedDescending;
-    }
-}
-
-- (BOOL)isEqual:(id)other {
-    return other == self;
-}
-
-- (id<FNode>)getImmediateChild:(NSString *)childName {
-    return [FEmptyNode emptyNode];
-}
-
-- (BOOL)isEmpty {
-    return NO;
-}
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FNamedNode.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FNamedNode.h
deleted file mode 100644
index 4414dfd..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FNamedNode.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FNode.h"
-#import <Foundation/Foundation.h>
-
-@interface FNamedNode : NSObject <NSCopying>
-
-@property(nonatomic, strong, readonly) NSString *name;
-@property(nonatomic, strong, readonly) id<FNode> node;
-
-- (id)initWithName:(NSString *)name andNode:(id<FNode>)node;
-
-+ (FNamedNode *)nodeWithName:(NSString *)name node:(id<FNode>)node;
-
-+ (FNamedNode *)min;
-+ (FNamedNode *)max;
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FNamedNode.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FNamedNode.m
deleted file mode 100644
index 3b2eaf7..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FNamedNode.m
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FNamedNode.h"
-#import "FEmptyNode.h"
-#import "FIndex.h"
-#import "FMaxNode.h"
-#import "FUtilities.h"
-
-@interface FNamedNode ()
-@property(nonatomic, strong, readwrite) NSString *name;
-@property(nonatomic, strong, readwrite) id<FNode> node;
-@end
-
-@implementation FNamedNode
-
-+ (FNamedNode *)nodeWithName:(NSString *)name node:(id<FNode>)node {
-    return [[FNamedNode alloc] initWithName:name andNode:node];
-}
-
-- (id)initWithName:(NSString *)name andNode:(id<FNode>)node {
-    self = [super init];
-    if (self) {
-        self.name = name;
-        self.node = node;
-    }
-    return self;
-}
-
-- (id)copy {
-    return self;
-}
-
-- (id)copyWithZone:(NSZone *)zone {
-    return self;
-}
-
-+ (FNamedNode *)min {
-    static FNamedNode *min = nil;
-    static dispatch_once_t once;
-    dispatch_once(&once, ^{
-      min = [[FNamedNode alloc] initWithName:[FUtilities minName]
-                                     andNode:[FEmptyNode emptyNode]];
-    });
-    return min;
-}
-
-+ (FNamedNode *)max {
-    static FNamedNode *max = nil;
-    static dispatch_once_t once;
-    dispatch_once(&once, ^{
-      max = [[FNamedNode alloc] initWithName:[FUtilities maxName]
-                                     andNode:[FMaxNode maxNode]];
-    });
-    return max;
-}
-
-- (NSString *)description {
-    return
-        [NSString stringWithFormat:@"NamedNode[%@] %@", self.name, self.node];
-}
-
-- (BOOL)isEqual:(id)object {
-    if (self == object) {
-        return YES;
-    }
-    if (object == nil || ![object isKindOfClass:[FNamedNode class]]) {
-        return NO;
-    }
-
-    FNamedNode *namedNode = object;
-    if (![self.name isEqualToString:namedNode.name]) {
-        return NO;
-    }
-    if (![self.node isEqual:namedNode.node]) {
-        return NO;
-    }
-
-    return YES;
-}
-
-- (NSUInteger)hash {
-    NSUInteger nameHash = [self.name hash];
-    NSUInteger nodeHash = [self.node hash];
-    NSUInteger result = 31 * nameHash + nodeHash;
-    return result;
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FPathIndex.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FPathIndex.h
deleted file mode 100644
index 6ab9151..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FPathIndex.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FIndex.h"
-#import "FPath.h"
-#import <Foundation/Foundation.h>
-
-@interface FPathIndex : NSObject <FIndex>
-- (id)initWithPath:(FPath *)path;
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FPathIndex.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FPathIndex.m
deleted file mode 100644
index 214eab8..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FPathIndex.m
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FPathIndex.h"
-#import "FEmptyNode.h"
-#import "FMaxNode.h"
-#import "FNamedNode.h"
-#import "FPath.h"
-#import "FSnapshotUtilities.h"
-#import "FUtilities.h"
-
-@interface FPathIndex ()
-@property(nonatomic, strong) FPath *path;
-@end
-
-@implementation FPathIndex
-
-- (id)initWithPath:(FPath *)path {
-    self = [super init];
-    if (self) {
-        if (path.isEmpty || [path.getFront isEqualToString:@".priority"]) {
-            [NSException raise:NSInvalidArgumentException
-                        format:@"Invalid path for PathIndex: %@", path];
-        }
-        _path = path;
-    }
-    return self;
-}
-
-- (NSComparisonResult)compareKey:(NSString *)key1
-                         andNode:(id<FNode>)node1
-                      toOtherKey:(NSString *)key2
-                         andNode:(id<FNode>)node2 {
-    id<FNode> child1 = [node1 getChild:self.path];
-    id<FNode> child2 = [node2 getChild:self.path];
-    NSComparisonResult indexCmp = [child1 compare:child2];
-    if (indexCmp == NSOrderedSame) {
-        return [FUtilities compareKey:key1 toKey:key2];
-    } else {
-        return indexCmp;
-    }
-}
-
-- (NSComparisonResult)compareKey:(NSString *)key1
-                         andNode:(id<FNode>)node1
-                      toOtherKey:(NSString *)key2
-                         andNode:(id<FNode>)node2
-                         reverse:(BOOL)reverse {
-    if (reverse) {
-        return [self compareKey:key2
-                        andNode:node2
-                     toOtherKey:key1
-                        andNode:node1];
-    } else {
-        return [self compareKey:key1
-                        andNode:node1
-                     toOtherKey:key2
-                        andNode:node2];
-    }
-}
-
-- (NSComparisonResult)compareNamedNode:(FNamedNode *)namedNode1
-                           toNamedNode:(FNamedNode *)namedNode2 {
-    return [self compareKey:namedNode1.name
-                    andNode:namedNode1.node
-                 toOtherKey:namedNode2.name
-                    andNode:namedNode2.node];
-}
-
-- (BOOL)isDefinedOn:(id<FNode>)node {
-    return ![node getChild:self.path].isEmpty;
-}
-
-- (BOOL)indexedValueChangedBetween:(id<FNode>)oldNode and:(id<FNode>)newNode {
-    id<FNode> oldValue = [oldNode getChild:self.path];
-    id<FNode> newValue = [newNode getChild:self.path];
-    return [oldValue compare:newValue] != NSOrderedSame;
-}
-
-- (FNamedNode *)minPost {
-    return FNamedNode.min;
-}
-
-- (FNamedNode *)maxPost {
-    id<FNode> maxNode = [[FEmptyNode emptyNode] updateChild:self.path
-                                               withNewChild:[FMaxNode maxNode]];
-
-    return [[FNamedNode alloc] initWithName:[FUtilities maxName]
-                                    andNode:maxNode];
-}
-
-- (FNamedNode *)makePost:(id<FNode>)indexValue name:(NSString *)name {
-    id<FNode> node = [[FEmptyNode emptyNode] updateChild:self.path
-                                            withNewChild:indexValue];
-    return [[FNamedNode alloc] initWithName:name andNode:node];
-}
-
-- (NSString *)queryDefinition {
-    return [self.path wireFormat];
-}
-
-- (NSString *)description {
-    return [NSString stringWithFormat:@"FPathIndex(%@)", self.path];
-}
-
-- (id)copyWithZone:(NSZone *)zone {
-    // Safe since we're immutable.
-    return self;
-}
-
-- (BOOL)isEqual:(id)other {
-    if (![other isKindOfClass:[FPathIndex class]]) {
-        return NO;
-    }
-    return ([self.path isEqual:((FPathIndex *)other).path]);
-}
-
-- (NSUInteger)hash {
-    return [self.path hash];
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FPriorityIndex.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FPriorityIndex.h
deleted file mode 100644
index 1b4534e..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FPriorityIndex.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#import "FIndex.h"
-
-@interface FPriorityIndex : NSObject <FIndex>
-+ (id<FIndex>)priorityIndex;
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FPriorityIndex.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FPriorityIndex.m
deleted file mode 100644
index 0b33837..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FPriorityIndex.m
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FPriorityIndex.h"
-
-#import "FEmptyNode.h"
-#import "FLeafNode.h"
-#import "FMaxNode.h"
-#import "FNamedNode.h"
-#import "FNode.h"
-#import "FUtilities.h"
-
-// TODO: Abstract into some common base class?
-
-@implementation FPriorityIndex
-
-- (NSComparisonResult)compareKey:(NSString *)key1
-                         andNode:(id<FNode>)node1
-                      toOtherKey:(NSString *)key2
-                         andNode:(id<FNode>)node2 {
-    id<FNode> child1 = [node1 getPriority];
-    id<FNode> child2 = [node2 getPriority];
-    NSComparisonResult indexCmp = [child1 compare:child2];
-    if (indexCmp == NSOrderedSame) {
-        return [FUtilities compareKey:key1 toKey:key2];
-    } else {
-        return indexCmp;
-    }
-}
-
-- (NSComparisonResult)compareKey:(NSString *)key1
-                         andNode:(id<FNode>)node1
-                      toOtherKey:(NSString *)key2
-                         andNode:(id<FNode>)node2
-                         reverse:(BOOL)reverse {
-    if (reverse) {
-        return [self compareKey:key2
-                        andNode:node2
-                     toOtherKey:key1
-                        andNode:node1];
-    } else {
-        return [self compareKey:key1
-                        andNode:node1
-                     toOtherKey:key2
-                        andNode:node2];
-    }
-}
-
-- (NSComparisonResult)compareNamedNode:(FNamedNode *)namedNode1
-                           toNamedNode:(FNamedNode *)namedNode2 {
-    return [self compareKey:namedNode1.name
-                    andNode:namedNode1.node
-                 toOtherKey:namedNode2.name
-                    andNode:namedNode2.node];
-}
-
-- (BOOL)isDefinedOn:(id<FNode>)node {
-    return !node.getPriority.isEmpty;
-}
-
-- (BOOL)indexedValueChangedBetween:(id<FNode>)oldNode and:(id<FNode>)newNode {
-    id<FNode> oldValue = [oldNode getPriority];
-    id<FNode> newValue = [newNode getPriority];
-    return ![oldValue isEqual:newValue];
-}
-
-- (FNamedNode *)minPost {
-    return FNamedNode.min;
-}
-
-- (FNamedNode *)maxPost {
-    return [self makePost:[FMaxNode maxNode] name:[FUtilities maxName]];
-}
-
-- (FNamedNode *)makePost:(id<FNode>)indexValue name:(NSString *)name {
-    id<FNode> node = [[FLeafNode alloc] initWithValue:@"[PRIORITY-POST]"
-                                         withPriority:indexValue];
-    return [[FNamedNode alloc] initWithName:name andNode:node];
-}
-
-- (NSString *)queryDefinition {
-    return @".priority";
-}
-
-- (NSString *)description {
-    return @"FPriorityIndex";
-}
-
-- (id)copyWithZone:(NSZone *)zone {
-    // Safe since we're immutable.
-    return self;
-}
-
-- (BOOL)isEqual:(id)other {
-    return [other isKindOfClass:[FPriorityIndex class]];
-}
-
-- (NSUInteger)hash {
-    // chosen by a fair dice roll. Guaranteed to be random
-    return 3155577;
-}
-
-+ (id<FIndex>)priorityIndex {
-    static id<FIndex> index;
-    static dispatch_once_t once;
-    dispatch_once(&once, ^{
-      index = [[FPriorityIndex alloc] init];
-    });
-
-    return index;
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FRangedFilter.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FRangedFilter.h
deleted file mode 100644
index 3c1aadd..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FRangedFilter.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FNodeFilter.h"
-#import <Foundation/Foundation.h>
-
-@class FQueryParams;
-@class FNamedNode;
-
-@interface FRangedFilter : NSObject <FNodeFilter>
-
-- (id)initWithQueryParams:(FQueryParams *)params;
-- (BOOL)matchesKey:(NSString *)key andNode:(id<FNode>)node;
-
-@property(nonatomic, strong, readonly) FNamedNode *startPost;
-@property(nonatomic, strong, readonly) FNamedNode *endPost;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FRangedFilter.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FRangedFilter.m
deleted file mode 100644
index bd8ef81..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FRangedFilter.m
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FRangedFilter.h"
-#import "FChildChangeAccumulator.h"
-#import "FChildrenNode.h"
-#import "FEmptyNode.h"
-#import "FIndexedFilter.h"
-#import "FIndexedNode.h"
-#import "FNamedNode.h"
-#import "FQueryParams.h"
-
-@interface FRangedFilter ()
-@property(nonatomic, strong, readwrite) id<FNodeFilter> indexedFilter;
-@property(nonatomic, strong, readwrite) id<FIndex> index;
-@property(nonatomic, strong, readwrite) FNamedNode *startPost;
-@property(nonatomic, strong, readwrite) FNamedNode *endPost;
-@end
-
-@implementation FRangedFilter
-- (id)initWithQueryParams:(FQueryParams *)params {
-    self = [super init];
-    if (self) {
-        self.indexedFilter =
-            [[FIndexedFilter alloc] initWithIndex:params.index];
-        self.index = params.index;
-        self.startPost = [FRangedFilter startPostFromQueryParams:params];
-        self.endPost = [FRangedFilter endPostFromQueryParams:params];
-    }
-    return self;
-}
-
-+ (FNamedNode *)startPostFromQueryParams:(FQueryParams *)params {
-    if ([params hasStart]) {
-        NSString *startKey = params.indexStartKey;
-        return [params.index makePost:params.indexStartValue name:startKey];
-    } else {
-        return params.index.minPost;
-    }
-}
-
-+ (FNamedNode *)endPostFromQueryParams:(FQueryParams *)params {
-    if ([params hasEnd]) {
-        NSString *endKey = params.indexEndKey;
-        return [params.index makePost:params.indexEndValue name:endKey];
-    } else {
-        return params.index.maxPost;
-    }
-}
-
-- (BOOL)matchesKey:(NSString *)key andNode:(id<FNode>)node {
-    return ([self.index compareKey:self.startPost.name
-                           andNode:self.startPost.node
-                        toOtherKey:key
-                           andNode:node] <= NSOrderedSame &&
-            [self.index compareKey:key
-                           andNode:node
-                        toOtherKey:self.endPost.name
-                           andNode:self.endPost.node] <= NSOrderedSame);
-}
-
-- (FIndexedNode *)updateChildIn:(FIndexedNode *)oldSnap
-                    forChildKey:(NSString *)childKey
-                       newChild:(id<FNode>)newChildSnap
-                   affectedPath:(FPath *)affectedPath
-                     fromSource:(id<FCompleteChildSource>)source
-                    accumulator:
-                        (FChildChangeAccumulator *)optChangeAccumulator {
-    if (![self matchesKey:childKey andNode:newChildSnap]) {
-        newChildSnap = [FEmptyNode emptyNode];
-    }
-    return [self.indexedFilter updateChildIn:oldSnap
-                                 forChildKey:childKey
-                                    newChild:newChildSnap
-                                affectedPath:affectedPath
-                                  fromSource:source
-                                 accumulator:optChangeAccumulator];
-}
-
-- (FIndexedNode *)updateFullNode:(FIndexedNode *)oldSnap
-                     withNewNode:(FIndexedNode *)newSnap
-                     accumulator:
-                         (FChildChangeAccumulator *)optChangeAccumulator {
-    __block FIndexedNode *filtered;
-    if (newSnap.node.isLeafNode) {
-        // Make sure we have a children node with the correct index, not a leaf
-        // node
-        filtered = [FIndexedNode indexedNodeWithNode:[FEmptyNode emptyNode]
-                                               index:self.index];
-    } else {
-        // Dont' support priorities on queries
-        filtered = [newSnap updatePriority:[FEmptyNode emptyNode]];
-        [newSnap.node enumerateChildrenUsingBlock:^(
-                          NSString *key, id<FNode> node, BOOL *stop) {
-          if (![self matchesKey:key andNode:node]) {
-              filtered = [filtered updateChild:key
-                                  withNewChild:[FEmptyNode emptyNode]];
-          }
-        }];
-    }
-    return [self.indexedFilter updateFullNode:oldSnap
-                                  withNewNode:filtered
-                                  accumulator:optChangeAccumulator];
-}
-
-- (FIndexedNode *)updatePriority:(id<FNode>)priority
-                         forNode:(FIndexedNode *)oldSnap {
-    // Don't support priorities on queries
-    return oldSnap;
-}
-
-- (BOOL)filtersNodes {
-    return YES;
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FTransformedEnumerator.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FTransformedEnumerator.h
deleted file mode 100644
index 25a59b4..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FTransformedEnumerator.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@interface FTransformedEnumerator : NSEnumerator
-- (id)initWithEnumerator:(NSEnumerator *)enumerator
-            andTransform:(id (^)(id))transform;
-- (id)nextObject;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FTransformedEnumerator.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FTransformedEnumerator.m
deleted file mode 100644
index 567e100..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FTransformedEnumerator.m
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FTransformedEnumerator.h"
-
-@interface FTransformedEnumerator ()
-@property(nonatomic, strong) NSEnumerator *enumerator;
-@property(nonatomic, copy) id (^transform)(id);
-@end
-
-@implementation FTransformedEnumerator
-- (id)initWithEnumerator:(NSEnumerator *)enumerator
-            andTransform:(id (^)(id))transform {
-    self = [super init];
-    if (self) {
-        self.enumerator = enumerator;
-        self.transform = transform;
-    }
-    return self;
-}
-
-- (id)nextObject {
-    id next = self.enumerator.nextObject;
-    if (next != nil) {
-        return self.transform(next);
-    } else {
-        return nil;
-    }
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FValueIndex.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FValueIndex.h
deleted file mode 100644
index a79f202..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FValueIndex.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FIndex.h"
-#import <Foundation/Foundation.h>
-
-@interface FValueIndex : NSObject <FIndex>
-+ (id<FIndex>)valueIndex;
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FValueIndex.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FValueIndex.m
deleted file mode 100644
index 61021c8..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FValueIndex.m
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FValueIndex.h"
-#import "FMaxNode.h"
-#import "FNamedNode.h"
-#import "FSnapshotUtilities.h"
-#import "FUtilities.h"
-
-@implementation FValueIndex
-
-- (NSComparisonResult)compareKey:(NSString *)key1
-                         andNode:(id<FNode>)node1
-                      toOtherKey:(NSString *)key2
-                         andNode:(id<FNode>)node2 {
-    NSComparisonResult indexCmp = [node1 compare:node2];
-    if (indexCmp == NSOrderedSame) {
-        return [FUtilities compareKey:key1 toKey:key2];
-    } else {
-        return indexCmp;
-    }
-}
-
-- (NSComparisonResult)compareKey:(NSString *)key1
-                         andNode:(id<FNode>)node1
-                      toOtherKey:(NSString *)key2
-                         andNode:(id<FNode>)node2
-                         reverse:(BOOL)reverse {
-    if (reverse) {
-        return [self compareKey:key2
-                        andNode:node2
-                     toOtherKey:key1
-                        andNode:node1];
-    } else {
-        return [self compareKey:key1
-                        andNode:node1
-                     toOtherKey:key2
-                        andNode:node2];
-    }
-}
-
-- (NSComparisonResult)compareNamedNode:(FNamedNode *)namedNode1
-                           toNamedNode:(FNamedNode *)namedNode2 {
-    return [self compareKey:namedNode1.name
-                    andNode:namedNode1.node
-                 toOtherKey:namedNode2.name
-                    andNode:namedNode2.node];
-}
-
-- (BOOL)isDefinedOn:(id<FNode>)node {
-    return YES;
-}
-
-- (BOOL)indexedValueChangedBetween:(id<FNode>)oldNode and:(id<FNode>)newNode {
-    return ![oldNode isEqual:newNode];
-}
-
-- (FNamedNode *)minPost {
-    return FNamedNode.min;
-}
-
-- (FNamedNode *)maxPost {
-    return FNamedNode.max;
-}
-
-- (FNamedNode *)makePost:(id<FNode>)indexValue name:(NSString *)name {
-    return [[FNamedNode alloc] initWithName:name andNode:indexValue];
-}
-
-- (NSString *)queryDefinition {
-    return @".value";
-}
-
-- (NSString *)description {
-    return @"FValueIndex";
-}
-
-- (id)copyWithZone:(NSZone *)zone {
-    return self;
-}
-
-- (BOOL)isEqual:(id)other {
-    // since we're a singleton.
-    return (other == self);
-}
-
-- (NSUInteger)hash {
-    return [@".value" hash];
-}
-
-+ (id<FIndex>)valueIndex {
-    static id<FIndex> valueIndex;
-    static dispatch_once_t once;
-    dispatch_once(&once, ^{
-      valueIndex = [[FValueIndex alloc] init];
-    });
-    return valueIndex;
-}
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FViewProcessor.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FViewProcessor.h
deleted file mode 100644
index ea6676e..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FViewProcessor.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@class FViewCache;
-@class FViewProcessorResult;
-@class FChildChangeAccumulator;
-@protocol FNode;
-@class FWriteTreeRef;
-@class FPath;
-@protocol FOperation;
-@protocol FNodeFilter;
-
-@interface FViewProcessor : NSObject
-
-- (id)initWithFilter:(id<FNodeFilter>)nodeFilter;
-
-- (FViewProcessorResult *)applyOperationOn:(FViewCache *)oldViewCache
-                                 operation:(id<FOperation>)operation
-                               writesCache:(FWriteTreeRef *)writesCache
-                             completeCache:(id<FNode>)optCompleteCache;
-- (FViewCache *)revertUserWriteOn:(FViewCache *)viewCache
-                             path:(FPath *)path
-                      writesCache:(FWriteTreeRef *)writesCache
-                    completeCache:(id<FNode>)optCompleteCache
-                      accumulator:(FChildChangeAccumulator *)accumulator;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FViewProcessor.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FViewProcessor.m
deleted file mode 100644
index 5524996..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FViewProcessor.m
+++ /dev/null
@@ -1,831 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FViewProcessor.h"
-#import "FAckUserWrite.h"
-#import "FCacheNode.h"
-#import "FChange.h"
-#import "FChildChangeAccumulator.h"
-#import "FChildrenNode.h"
-#import "FCompleteChildSource.h"
-#import "FCompoundWrite.h"
-#import "FEmptyNode.h"
-#import "FIRDataEventType.h"
-#import "FImmutableTree.h"
-#import "FKeyIndex.h"
-#import "FMerge.h"
-#import "FNode.h"
-#import "FNodeFilter.h"
-#import "FOperation.h"
-#import "FOperationSource.h"
-#import "FOverwrite.h"
-#import "FPath.h"
-#import "FViewCache.h"
-#import "FViewProcessorResult.h"
-#import "FWriteTreeRef.h"
-
-/**
- * An implementation of FCompleteChildSource that never returns any additional
- * children
- */
-@interface FNoCompleteChildSource : NSObject <FCompleteChildSource>
-@end
-
-@implementation FNoCompleteChildSource
-+ (FNoCompleteChildSource *)instance {
-    static FNoCompleteChildSource *source = nil;
-    static dispatch_once_t once;
-    dispatch_once(&once, ^{
-      source = [[FNoCompleteChildSource alloc] init];
-    });
-    return source;
-}
-
-- (id<FNode>)completeChild:(NSString *)childKey {
-    return nil;
-}
-
-- (FNamedNode *)childByIndex:(id<FIndex>)index
-                  afterChild:(FNamedNode *)child
-                   isReverse:(BOOL)reverse {
-    return nil;
-}
-@end
-
-/**
- * An implementation of FCompleteChildSource that uses a FWriteTree in addition
- * to any other server data or old event caches available to calculate complete
- * children.
- */
-@interface FWriteTreeCompleteChildSource : NSObject <FCompleteChildSource>
-@property(nonatomic, strong) FWriteTreeRef *writes;
-@property(nonatomic, strong) FViewCache *viewCache;
-@property(nonatomic, strong) id<FNode> optCompleteServerCache;
-@end
-
-@implementation FWriteTreeCompleteChildSource
-- (id)initWithWrites:(FWriteTreeRef *)writes
-           viewCache:(FViewCache *)viewCache
-         serverCache:(id<FNode>)optCompleteServerCache {
-    self = [super init];
-    if (self) {
-        self.writes = writes;
-        self.viewCache = viewCache;
-        self.optCompleteServerCache = optCompleteServerCache;
-    }
-    return self;
-}
-
-- (id<FNode>)completeChild:(NSString *)childKey {
-    FCacheNode *node = self.viewCache.cachedEventSnap;
-    if ([node isCompleteForChild:childKey]) {
-        return [node.node getImmediateChild:childKey];
-    } else {
-        FCacheNode *serverNode;
-        if (self.optCompleteServerCache) {
-            // Since we're only ever getting child nodes, we can use the key
-            // index here
-            FIndexedNode *indexed =
-                [FIndexedNode indexedNodeWithNode:self.optCompleteServerCache
-                                            index:[FKeyIndex keyIndex]];
-            serverNode = [[FCacheNode alloc] initWithIndexedNode:indexed
-                                              isFullyInitialized:YES
-                                                      isFiltered:NO];
-        } else {
-            serverNode = self.viewCache.cachedServerSnap;
-        }
-        return [self.writes calculateCompleteChild:childKey cache:serverNode];
-    }
-}
-
-- (FNamedNode *)childByIndex:(id<FIndex>)index
-                  afterChild:(FNamedNode *)child
-                   isReverse:(BOOL)reverse {
-    id<FNode> completeServerData = self.optCompleteServerCache != nil
-                                       ? self.optCompleteServerCache
-                                       : self.viewCache.completeServerSnap;
-    return [self.writes calculateNextNodeAfterPost:child
-                                completeServerData:completeServerData
-                                           reverse:reverse
-                                             index:index];
-}
-
-@end
-
-@interface FViewProcessor ()
-@property(nonatomic, strong) id<FNodeFilter> filter;
-@end
-
-@implementation FViewProcessor
-
-- (id)initWithFilter:(id<FNodeFilter>)nodeFilter {
-    self = [super init];
-    if (self) {
-        self.filter = nodeFilter;
-    }
-    return self;
-}
-
-- (FViewProcessorResult *)applyOperationOn:(FViewCache *)oldViewCache
-                                 operation:(id<FOperation>)operation
-                               writesCache:(FWriteTreeRef *)writesCache
-                             completeCache:(id<FNode>)optCompleteCache {
-    FChildChangeAccumulator *accumulator =
-        [[FChildChangeAccumulator alloc] init];
-    FViewCache *newViewCache;
-
-    if (operation.type == FOperationTypeOverwrite) {
-        FOverwrite *overwrite = (FOverwrite *)operation;
-        if (operation.source.fromUser) {
-            newViewCache = [self applyUserOverwriteTo:oldViewCache
-                                           changePath:overwrite.path
-                                          changedSnap:overwrite.snap
-                                          writesCache:writesCache
-                                        completeCache:optCompleteCache
-                                          accumulator:accumulator];
-        } else {
-            NSAssert(operation.source.fromServer,
-                     @"Unknown source for overwrite.");
-            // We filter the node if it's a tagged update or the node has been
-            // previously filtered  and the update is not at the root in which
-            // case it is ok (and necessary) to mark the node unfiltered again
-            BOOL filterServerNode = overwrite.source.isTagged ||
-                                    (oldViewCache.cachedServerSnap.isFiltered &&
-                                     !overwrite.path.isEmpty);
-            newViewCache = [self applyServerOverwriteTo:oldViewCache
-                                             changePath:overwrite.path
-                                                   snap:overwrite.snap
-                                            writesCache:writesCache
-                                          completeCache:optCompleteCache
-                                       filterServerNode:filterServerNode
-                                            accumulator:accumulator];
-        }
-    } else if (operation.type == FOperationTypeMerge) {
-        FMerge *merge = (FMerge *)operation;
-        if (operation.source.fromUser) {
-            newViewCache = [self applyUserMergeTo:oldViewCache
-                                             path:merge.path
-                                  changedChildren:merge.children
-                                      writesCache:writesCache
-                                    completeCache:optCompleteCache
-                                      accumulator:accumulator];
-        } else {
-            NSAssert(operation.source.fromServer, @"Unknown source for merge.");
-            // We filter the node if it's a tagged update or the node has been
-            // previously filtered
-            BOOL filterServerNode = merge.source.isTagged ||
-                                    oldViewCache.cachedServerSnap.isFiltered;
-            newViewCache = [self applyServerMergeTo:oldViewCache
-                                               path:merge.path
-                                    changedChildren:merge.children
-                                        writesCache:writesCache
-                                      completeCache:optCompleteCache
-                                   filterServerNode:filterServerNode
-                                        accumulator:accumulator];
-        }
-    } else if (operation.type == FOperationTypeAckUserWrite) {
-        FAckUserWrite *ackWrite = (FAckUserWrite *)operation;
-        if (!ackWrite.revert) {
-            newViewCache = [self ackUserWriteOn:oldViewCache
-                                        ackPath:ackWrite.path
-                                   affectedTree:ackWrite.affectedTree
-                                    writesCache:writesCache
-                                  completeCache:optCompleteCache
-                                    accumulator:accumulator];
-        } else {
-            newViewCache = [self revertUserWriteOn:oldViewCache
-                                              path:ackWrite.path
-                                       writesCache:writesCache
-                                     completeCache:optCompleteCache
-                                       accumulator:accumulator];
-        }
-    } else if (operation.type == FOperationTypeListenComplete) {
-        newViewCache = [self listenCompleteOldCache:oldViewCache
-                                               path:operation.path
-                                        writesCache:writesCache
-                                        serverCache:optCompleteCache
-                                        accumulator:accumulator];
-    } else {
-        [NSException
-             raise:NSInternalInconsistencyException
-            format:@"Unknown operation encountered %ld.", (long)operation.type];
-        return nil;
-    }
-
-    NSArray *changes = [self maybeAddValueFromOldViewCache:oldViewCache
-                                              newViewCache:newViewCache
-                                                   changes:accumulator.changes];
-    FViewProcessorResult *results =
-        [[FViewProcessorResult alloc] initWithViewCache:newViewCache
-                                                changes:changes];
-    return results;
-}
-
-- (NSArray *)maybeAddValueFromOldViewCache:(FViewCache *)oldViewCache
-                              newViewCache:(FViewCache *)newViewCache
-                                   changes:(NSArray *)changes {
-    NSArray *newChanges = changes;
-    FCacheNode *eventSnap = newViewCache.cachedEventSnap;
-    if (eventSnap.isFullyInitialized) {
-        BOOL isLeafOrEmpty =
-            eventSnap.node.isLeafNode || eventSnap.node.isEmpty;
-        if ([changes count] > 0 ||
-            !oldViewCache.cachedEventSnap.isFullyInitialized ||
-            (isLeafOrEmpty &&
-             ![eventSnap.node isEqual:oldViewCache.completeEventSnap]) ||
-            ![eventSnap.node.getPriority
-                isEqual:oldViewCache.completeEventSnap.getPriority]) {
-            FChange *valueChange =
-                [[FChange alloc] initWithType:FIRDataEventTypeValue
-                                  indexedNode:eventSnap.indexedNode];
-            NSMutableArray *mutableChanges = [changes mutableCopy];
-            [mutableChanges addObject:valueChange];
-            newChanges = mutableChanges;
-        }
-    }
-    return newChanges;
-}
-
-- (FViewCache *)
-    generateEventCacheAfterServerEvent:(FViewCache *)viewCache
-                                  path:(FPath *)changePath
-                           writesCache:(FWriteTreeRef *)writesCache
-                                source:(id<FCompleteChildSource>)source
-                           accumulator:(FChildChangeAccumulator *)accumulator {
-    FCacheNode *oldEventSnap = viewCache.cachedEventSnap;
-    if ([writesCache shadowingWriteAtPath:changePath] != nil) {
-        // we have a shadowing write, ignore changes.
-        return viewCache;
-    } else {
-        FIndexedNode *newEventCache;
-        if (changePath.isEmpty) {
-            // TODO: figure out how this plays with "sliding ack windows"
-            NSAssert(
-                viewCache.cachedServerSnap.isFullyInitialized,
-                @"If change path is empty, we must have complete server data");
-            id<FNode> nodeWithLocalWrites;
-            if (viewCache.cachedServerSnap.isFiltered) {
-                // We need to special case this, because we need to only apply
-                // writes to complete children, or we might end up raising
-                // events for incomplete children. If the server data is
-                // filtered deep writes cannot be guaranteed to be complete
-                id<FNode> serverCache = viewCache.completeServerSnap;
-                FChildrenNode *completeChildren =
-                    ([serverCache isKindOfClass:[FChildrenNode class]])
-                        ? serverCache
-                        : [FEmptyNode emptyNode];
-                nodeWithLocalWrites = [writesCache
-                    calculateCompleteEventChildrenWithCompleteServerChildren:
-                        completeChildren];
-            } else {
-                nodeWithLocalWrites = [writesCache
-                    calculateCompleteEventCacheWithCompleteServerCache:
-                        viewCache.completeServerSnap];
-            }
-            FIndexedNode *indexedNode =
-                [FIndexedNode indexedNodeWithNode:nodeWithLocalWrites
-                                            index:self.filter.index];
-            newEventCache = [self.filter
-                updateFullNode:viewCache.cachedEventSnap.indexedNode
-                   withNewNode:indexedNode
-                   accumulator:accumulator];
-        } else {
-            NSString *childKey = [changePath getFront];
-            if ([childKey isEqualToString:@".priority"]) {
-                NSAssert(
-                    changePath.length == 1,
-                    @"Can't have a priority with additional path components");
-                id<FNode> oldEventNode = oldEventSnap.node;
-                id<FNode> serverNode = viewCache.cachedServerSnap.node;
-                // we might have overwrites for this priority
-                id<FNode> updatedPriority = [writesCache
-                    calculateEventCacheAfterServerOverwriteWithChildPath:
-                        changePath
-                                                       existingEventSnap:
-                                                           oldEventNode
-                                                      existingServerSnap:
-                                                          serverNode];
-                if (updatedPriority != nil) {
-                    newEventCache =
-                        [self.filter updatePriority:updatedPriority
-                                            forNode:oldEventSnap.indexedNode];
-                } else {
-                    // priority didn't change, keep old node
-                    newEventCache = oldEventSnap.indexedNode;
-                }
-            } else {
-                FPath *childChangePath = [changePath popFront];
-                id<FNode> newEventChild;
-                if ([oldEventSnap isCompleteForChild:childKey]) {
-                    id<FNode> serverNode = viewCache.cachedServerSnap.node;
-                    id<FNode> eventChildUpdate = [writesCache
-                        calculateEventCacheAfterServerOverwriteWithChildPath:
-                            changePath
-                                                           existingEventSnap:
-                                                               oldEventSnap.node
-                                                          existingServerSnap:
-                                                              serverNode];
-                    if (eventChildUpdate != nil) {
-                        newEventChild =
-                            [[oldEventSnap.node getImmediateChild:childKey]
-                                 updateChild:childChangePath
-                                withNewChild:eventChildUpdate];
-                    } else {
-                        // Nothing changed, just keep the old child
-                        newEventChild =
-                            [oldEventSnap.node getImmediateChild:childKey];
-                    }
-                } else {
-                    newEventChild = [writesCache
-                        calculateCompleteChild:childKey
-                                         cache:viewCache.cachedServerSnap];
-                }
-                if (newEventChild != nil) {
-                    newEventCache =
-                        [self.filter updateChildIn:oldEventSnap.indexedNode
-                                       forChildKey:childKey
-                                          newChild:newEventChild
-                                      affectedPath:childChangePath
-                                        fromSource:source
-                                       accumulator:accumulator];
-                } else {
-                    // No complete children available or no change
-                    newEventCache = oldEventSnap.indexedNode;
-                }
-            }
-        }
-        return [viewCache updateEventSnap:newEventCache
-                               isComplete:(oldEventSnap.isFullyInitialized ||
-                                           changePath.isEmpty)
-                               isFiltered:self.filter.filtersNodes];
-    }
-}
-
-- (FViewCache *)applyServerOverwriteTo:(FViewCache *)oldViewCache
-                            changePath:(FPath *)changePath
-                                  snap:(id<FNode>)changedSnap
-                           writesCache:(FWriteTreeRef *)writesCache
-                         completeCache:(id<FNode>)optCompleteCache
-                      filterServerNode:(BOOL)filterServerNode
-                           accumulator:(FChildChangeAccumulator *)accumulator {
-    FCacheNode *oldServerSnap = oldViewCache.cachedServerSnap;
-    FIndexedNode *newServerCache;
-    id<FNodeFilter> serverFilter =
-        filterServerNode ? self.filter : self.filter.indexedFilter;
-
-    if (changePath.isEmpty) {
-        FIndexedNode *indexed =
-            [FIndexedNode indexedNodeWithNode:changedSnap
-                                        index:serverFilter.index];
-        newServerCache = [serverFilter updateFullNode:oldServerSnap.indexedNode
-                                          withNewNode:indexed
-                                          accumulator:nil];
-    } else if (serverFilter.filtersNodes && !oldServerSnap.isFiltered) {
-        // We want to filter the server node, but we didn't filter the server
-        // node yet, so simulate a full update
-        NSAssert(![changePath isEmpty],
-                 @"An empty path should been caught in the other branch");
-        NSString *childKey = [changePath getFront];
-        FPath *updatePath = [changePath popFront];
-        id<FNode> newChild = [[oldServerSnap.node getImmediateChild:childKey]
-             updateChild:updatePath
-            withNewChild:changedSnap];
-        FIndexedNode *indexed =
-            [oldServerSnap.indexedNode updateChild:childKey
-                                      withNewChild:newChild];
-        newServerCache = [serverFilter updateFullNode:oldServerSnap.indexedNode
-                                          withNewNode:indexed
-                                          accumulator:nil];
-    } else {
-        NSString *childKey = [changePath getFront];
-        if (![oldServerSnap isCompleteForPath:changePath] &&
-            changePath.length > 1) {
-            // We don't update incomplete nodes with updates intended for other
-            // listeners.
-            return oldViewCache;
-        }
-        FPath *childChangePath = [changePath popFront];
-        id<FNode> childNode = [oldServerSnap.node getImmediateChild:childKey];
-        id<FNode> newChildNode = [childNode updateChild:childChangePath
-                                           withNewChild:changedSnap];
-        if ([childKey isEqualToString:@".priority"]) {
-            newServerCache =
-                [serverFilter updatePriority:newChildNode
-                                     forNode:oldServerSnap.indexedNode];
-        } else {
-            newServerCache =
-                [serverFilter updateChildIn:oldServerSnap.indexedNode
-                                forChildKey:childKey
-                                   newChild:newChildNode
-                               affectedPath:childChangePath
-                                 fromSource:[FNoCompleteChildSource instance]
-                                accumulator:nil];
-        }
-    }
-    FViewCache *newViewCache =
-        [oldViewCache updateServerSnap:newServerCache
-                            isComplete:(oldServerSnap.isFullyInitialized ||
-                                        changePath.isEmpty)
-                            isFiltered:serverFilter.filtersNodes];
-    id<FCompleteChildSource> source =
-        [[FWriteTreeCompleteChildSource alloc] initWithWrites:writesCache
-                                                    viewCache:newViewCache
-                                                  serverCache:optCompleteCache];
-    return [self generateEventCacheAfterServerEvent:newViewCache
-                                               path:changePath
-                                        writesCache:writesCache
-                                             source:source
-                                        accumulator:accumulator];
-}
-
-- (FViewCache *)applyUserOverwriteTo:(FViewCache *)oldViewCache
-                          changePath:(FPath *)changePath
-                         changedSnap:(id<FNode>)changedSnap
-                         writesCache:(FWriteTreeRef *)writesCache
-                       completeCache:(id<FNode>)optCompleteCache
-                         accumulator:(FChildChangeAccumulator *)accumulator {
-    FCacheNode *oldEventSnap = oldViewCache.cachedEventSnap;
-    FViewCache *newViewCache;
-    id<FCompleteChildSource> source =
-        [[FWriteTreeCompleteChildSource alloc] initWithWrites:writesCache
-                                                    viewCache:oldViewCache
-                                                  serverCache:optCompleteCache];
-    if (changePath.isEmpty) {
-        FIndexedNode *newIndexed =
-            [FIndexedNode indexedNodeWithNode:changedSnap
-                                        index:self.filter.index];
-        FIndexedNode *newEventCache =
-            [self.filter updateFullNode:oldEventSnap.indexedNode
-                            withNewNode:newIndexed
-                            accumulator:accumulator];
-        newViewCache = [oldViewCache updateEventSnap:newEventCache
-                                          isComplete:YES
-                                          isFiltered:self.filter.filtersNodes];
-    } else {
-        NSString *childKey = [changePath getFront];
-        if ([childKey isEqualToString:@".priority"]) {
-            FIndexedNode *newEventCache = [self.filter
-                updatePriority:changedSnap
-                       forNode:oldViewCache.cachedEventSnap.indexedNode];
-            newViewCache =
-                [oldViewCache updateEventSnap:newEventCache
-                                   isComplete:oldEventSnap.isFullyInitialized
-                                   isFiltered:oldEventSnap.isFiltered];
-        } else {
-            FPath *childChangePath = [changePath popFront];
-            id<FNode> oldChild = [oldEventSnap.node getImmediateChild:childKey];
-            id<FNode> newChild;
-            if (childChangePath.isEmpty) {
-                // Child overwrite, we can replace the child
-                newChild = changedSnap;
-            } else {
-                id<FNode> childNode = [source completeChild:childKey];
-                if (childNode != nil) {
-                    if ([[childChangePath getBack]
-                            isEqualToString:@".priority"] &&
-                        [childNode getChild:[childChangePath parent]].isEmpty) {
-                        // This is a priority update on an empty node. If this
-                        // node exists on the server, the server will send down
-                        // the priority in the update, so ignore for now
-                        newChild = childNode;
-                    } else {
-                        newChild = [childNode updateChild:childChangePath
-                                             withNewChild:changedSnap];
-                    }
-                } else {
-                    newChild = [FEmptyNode emptyNode];
-                }
-            }
-            if (![oldChild isEqual:newChild]) {
-                FIndexedNode *newEventSnap =
-                    [self.filter updateChildIn:oldEventSnap.indexedNode
-                                   forChildKey:childKey
-                                      newChild:newChild
-                                  affectedPath:childChangePath
-                                    fromSource:source
-                                   accumulator:accumulator];
-                newViewCache = [oldViewCache
-                    updateEventSnap:newEventSnap
-                         isComplete:oldEventSnap.isFullyInitialized
-                         isFiltered:self.filter.filtersNodes];
-            } else {
-                newViewCache = oldViewCache;
-            }
-        }
-    }
-    return newViewCache;
-}
-
-+ (BOOL)cache:(FViewCache *)viewCache hasChild:(NSString *)childKey {
-    return [viewCache.cachedEventSnap isCompleteForChild:childKey];
-}
-
-/**
- * @param changedChildren NSDictionary of child name (NSString*) to child value
- * (id<FNode>)
- */
-- (FViewCache *)applyUserMergeTo:(FViewCache *)viewCache
-                            path:(FPath *)path
-                 changedChildren:(FCompoundWrite *)changedChildren
-                     writesCache:(FWriteTreeRef *)writesCache
-                   completeCache:(id<FNode>)serverCache
-                     accumulator:(FChildChangeAccumulator *)accumulator {
-    // HACK: In the case of a limit query, there may be some changes that bump
-    // things out of the window leaving room for new items.  It's important we
-    // process these changes first, so we iterate the changes twice, first
-    // processing any that affect items currently in view.
-    // TODO: I consider an item "in view" if cacheHasChild is true, which checks
-    // both the server and event snap.  I'm not sure if this will result in edge
-    // cases when a child is in one but not the other.
-    __block FViewCache *curViewCache = viewCache;
-
-    [changedChildren enumerateWrites:^(FPath *relativePath, id<FNode> childNode,
-                                       BOOL *stop) {
-      FPath *writePath = [path child:relativePath];
-      if ([FViewProcessor cache:viewCache hasChild:[writePath getFront]]) {
-          curViewCache = [self applyUserOverwriteTo:curViewCache
-                                         changePath:writePath
-                                        changedSnap:childNode
-                                        writesCache:writesCache
-                                      completeCache:serverCache
-                                        accumulator:accumulator];
-      }
-    }];
-
-    [changedChildren enumerateWrites:^(FPath *relativePath, id<FNode> childNode,
-                                       BOOL *stop) {
-      FPath *writePath = [path child:relativePath];
-      if (![FViewProcessor cache:viewCache hasChild:[writePath getFront]]) {
-          curViewCache = [self applyUserOverwriteTo:curViewCache
-                                         changePath:writePath
-                                        changedSnap:childNode
-                                        writesCache:writesCache
-                                      completeCache:serverCache
-                                        accumulator:accumulator];
-      }
-    }];
-
-    return curViewCache;
-}
-
-- (FViewCache *)applyServerMergeTo:(FViewCache *)viewCache
-                              path:(FPath *)path
-                   changedChildren:(FCompoundWrite *)changedChildren
-                       writesCache:(FWriteTreeRef *)writesCache
-                     completeCache:(id<FNode>)serverCache
-                  filterServerNode:(BOOL)filterServerNode
-                       accumulator:(FChildChangeAccumulator *)accumulator {
-    // If we don't have a cache yet, this merge was intended for a previously
-    // listen in the same location. Ignore it and wait for the complete data
-    // update coming soon.
-    if (viewCache.cachedServerSnap.node.isEmpty &&
-        !viewCache.cachedServerSnap.isFullyInitialized) {
-        return viewCache;
-    }
-
-    // HACK: In the case of a limit query, there may be some changes that bump
-    // things out of the window leaving room for new items.  It's important we
-    // process these changes first, so we iterate the changes twice, first
-    // processing any that affect items currently in view.
-    // TODO: I consider an item "in view" if cacheHasChild is true, which checks
-    // both the server and event snap.  I'm not sure if this will result in edge
-    // cases when a child is in one but not the other.
-    __block FViewCache *curViewCache = viewCache;
-    FCompoundWrite *actualMerge;
-    if (path.isEmpty) {
-        actualMerge = changedChildren;
-    } else {
-        actualMerge =
-            [[FCompoundWrite emptyWrite] addCompoundWrite:changedChildren
-                                                   atPath:path];
-    }
-    id<FNode> serverNode = viewCache.cachedServerSnap.node;
-
-    NSDictionary *childCompoundWrites = actualMerge.childCompoundWrites;
-    [childCompoundWrites
-        enumerateKeysAndObjectsUsingBlock:^(
-            NSString *childKey, FCompoundWrite *childMerge, BOOL *stop) {
-          if ([serverNode hasChild:childKey]) {
-              id<FNode> serverChild =
-                  [viewCache.cachedServerSnap.node getImmediateChild:childKey];
-              id<FNode> newChild = [childMerge applyToNode:serverChild];
-              curViewCache =
-                  [self applyServerOverwriteTo:curViewCache
-                                    changePath:[[FPath alloc] initWith:childKey]
-                                          snap:newChild
-                                   writesCache:writesCache
-                                 completeCache:serverCache
-                              filterServerNode:filterServerNode
-                                   accumulator:accumulator];
-          }
-        }];
-
-    [childCompoundWrites
-        enumerateKeysAndObjectsUsingBlock:^(
-            NSString *childKey, FCompoundWrite *childMerge, BOOL *stop) {
-          bool isUnknownDeepMerge =
-              ![viewCache.cachedServerSnap isCompleteForChild:childKey] &&
-              childMerge.rootWrite == nil;
-          if (![serverNode hasChild:childKey] && !isUnknownDeepMerge) {
-              id<FNode> serverChild =
-                  [viewCache.cachedServerSnap.node getImmediateChild:childKey];
-              id<FNode> newChild = [childMerge applyToNode:serverChild];
-              curViewCache =
-                  [self applyServerOverwriteTo:curViewCache
-                                    changePath:[[FPath alloc] initWith:childKey]
-                                          snap:newChild
-                                   writesCache:writesCache
-                                 completeCache:serverCache
-                              filterServerNode:filterServerNode
-                                   accumulator:accumulator];
-          }
-        }];
-
-    return curViewCache;
-}
-
-- (FViewCache *)ackUserWriteOn:(FViewCache *)viewCache
-                       ackPath:(FPath *)ackPath
-                  affectedTree:(FImmutableTree *)affectedTree
-                   writesCache:(FWriteTreeRef *)writesCache
-                 completeCache:(id<FNode>)optCompleteCache
-                   accumulator:(FChildChangeAccumulator *)accumulator {
-
-    if ([writesCache shadowingWriteAtPath:ackPath] != nil) {
-        return viewCache;
-    }
-
-    // Only filter server node if it is currently filtered
-    BOOL filterServerNode = viewCache.cachedServerSnap.isFiltered;
-
-    // Essentially we'll just get our existing server cache for the affected
-    // paths and re-apply it as a server update now that it won't be shadowed.
-    FCacheNode *serverCache = viewCache.cachedServerSnap;
-    if (affectedTree.value != nil) {
-        // This is an overwrite.
-        if ((ackPath.isEmpty && serverCache.isFullyInitialized) ||
-            [serverCache isCompleteForPath:ackPath]) {
-            return
-                [self applyServerOverwriteTo:viewCache
-                                  changePath:ackPath
-                                        snap:[serverCache.node getChild:ackPath]
-                                 writesCache:writesCache
-                               completeCache:optCompleteCache
-                            filterServerNode:filterServerNode
-                                 accumulator:accumulator];
-        } else if (ackPath.isEmpty) {
-            // This is a goofy edge case where we are acking data at this
-            // location but don't have full data.  We should just re-apply
-            // whatever we have in our cache as a merge.
-            FCompoundWrite *changedChildren = [FCompoundWrite emptyWrite];
-            for (FNamedNode *child in serverCache.node.childEnumerator) {
-                changedChildren = [changedChildren addWrite:child.node
-                                                      atKey:child.name];
-            }
-            return [self applyServerMergeTo:viewCache
-                                       path:ackPath
-                            changedChildren:changedChildren
-                                writesCache:writesCache
-                              completeCache:optCompleteCache
-                           filterServerNode:filterServerNode
-                                accumulator:accumulator];
-        } else {
-            return viewCache;
-        }
-    } else {
-        // This is a merge.
-        __block FCompoundWrite *changedChildren = [FCompoundWrite emptyWrite];
-        [affectedTree forEach:^(FPath *mergePath, id value) {
-          FPath *serverCachePath = [ackPath child:mergePath];
-          if ([serverCache isCompleteForPath:serverCachePath]) {
-              changedChildren = [changedChildren
-                  addWrite:[serverCache.node getChild:serverCachePath]
-                    atPath:mergePath];
-          }
-        }];
-        return [self applyServerMergeTo:viewCache
-                                   path:ackPath
-                        changedChildren:changedChildren
-                            writesCache:writesCache
-                          completeCache:optCompleteCache
-                       filterServerNode:filterServerNode
-                            accumulator:accumulator];
-    }
-}
-
-- (FViewCache *)revertUserWriteOn:(FViewCache *)viewCache
-                             path:(FPath *)path
-                      writesCache:(FWriteTreeRef *)writesCache
-                    completeCache:(id<FNode>)optCompleteCache
-                      accumulator:(FChildChangeAccumulator *)accumulator {
-    if ([writesCache shadowingWriteAtPath:path] != nil) {
-        return viewCache;
-    } else {
-        id<FCompleteChildSource> source = [[FWriteTreeCompleteChildSource alloc]
-            initWithWrites:writesCache
-                 viewCache:viewCache
-               serverCache:optCompleteCache];
-        FIndexedNode *oldEventCache = viewCache.cachedEventSnap.indexedNode;
-        FIndexedNode *newEventCache;
-        if (path.isEmpty || [[path getFront] isEqualToString:@".priority"]) {
-            id<FNode> newNode;
-            if (viewCache.cachedServerSnap.isFullyInitialized) {
-                newNode = [writesCache
-                    calculateCompleteEventCacheWithCompleteServerCache:
-                        viewCache.completeServerSnap];
-            } else {
-                newNode = [writesCache
-                    calculateCompleteEventChildrenWithCompleteServerChildren:
-                        viewCache.cachedServerSnap.node];
-            }
-            FIndexedNode *indexedNode =
-                [FIndexedNode indexedNodeWithNode:newNode
-                                            index:self.filter.index];
-            newEventCache = [self.filter updateFullNode:oldEventCache
-                                            withNewNode:indexedNode
-                                            accumulator:accumulator];
-        } else {
-            NSString *childKey = [path getFront];
-            id<FNode> newChild =
-                [writesCache calculateCompleteChild:childKey
-                                              cache:viewCache.cachedServerSnap];
-            if (newChild == nil &&
-                [viewCache.cachedServerSnap isCompleteForChild:childKey]) {
-                newChild = [oldEventCache.node getImmediateChild:childKey];
-            }
-            if (newChild != nil) {
-                newEventCache = [self.filter updateChildIn:oldEventCache
-                                               forChildKey:childKey
-                                                  newChild:newChild
-                                              affectedPath:[path popFront]
-                                                fromSource:source
-                                               accumulator:accumulator];
-            } else if (newChild == nil &&
-                       [viewCache.cachedEventSnap.node hasChild:childKey]) {
-                // No complete child available, delete the existing one, if any
-                newEventCache =
-                    [self.filter updateChildIn:oldEventCache
-                                   forChildKey:childKey
-                                      newChild:[FEmptyNode emptyNode]
-                                  affectedPath:[path popFront]
-                                    fromSource:source
-                                   accumulator:accumulator];
-            } else {
-                newEventCache = oldEventCache;
-            }
-            if (newEventCache.node.isEmpty &&
-                viewCache.cachedServerSnap.isFullyInitialized) {
-                // We might have reverted all child writes. Maybe the old event
-                // was a leaf node.
-                id<FNode> complete = [writesCache
-                    calculateCompleteEventCacheWithCompleteServerCache:
-                        viewCache.completeServerSnap];
-                if (complete.isLeafNode) {
-                    FIndexedNode *indexed =
-                        [FIndexedNode indexedNodeWithNode:complete];
-                    newEventCache = [self.filter updateFullNode:newEventCache
-                                                    withNewNode:indexed
-                                                    accumulator:accumulator];
-                }
-            }
-        }
-        BOOL complete = viewCache.cachedServerSnap.isFullyInitialized ||
-                        [writesCache shadowingWriteAtPath:[FPath empty]] != nil;
-        return [viewCache updateEventSnap:newEventCache
-                               isComplete:complete
-                               isFiltered:self.filter.filtersNodes];
-    }
-}
-
-- (FViewCache *)listenCompleteOldCache:(FViewCache *)viewCache
-                                  path:(FPath *)path
-                           writesCache:(FWriteTreeRef *)writesCache
-                           serverCache:(id<FNode>)servercache
-                           accumulator:(FChildChangeAccumulator *)accumulator {
-    FCacheNode *oldServerNode = viewCache.cachedServerSnap;
-    FViewCache *newViewCache = [viewCache
-        updateServerSnap:oldServerNode.indexedNode
-              isComplete:(oldServerNode.isFullyInitialized || path.isEmpty)
-              isFiltered:oldServerNode.isFiltered];
-    return [self
-        generateEventCacheAfterServerEvent:newViewCache
-                                      path:path
-                               writesCache:writesCache
-                                    source:[FNoCompleteChildSource instance]
-                               accumulator:accumulator];
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FViewProcessorResult.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FViewProcessorResult.h
deleted file mode 100644
index 8d3e2ef..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FViewProcessorResult.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@class FViewCache;
-
-@interface FViewProcessorResult : NSObject
-@property(nonatomic, strong, readonly) FViewCache *viewCache;
-/**
- * List of FChanges.
- */
-@property(nonatomic, strong, readonly) NSArray *changes;
-
-- (id)initWithViewCache:(FViewCache *)viewCache changes:(NSArray *)changes;
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FViewProcessorResult.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FViewProcessorResult.m
deleted file mode 100644
index 0d38947..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FViewProcessorResult.m
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FViewProcessorResult.h"
-#import "FViewCache.h"
-
-@interface FViewProcessorResult ()
-@property(nonatomic, strong, readwrite) FViewCache *viewCache;
-@property(nonatomic, strong, readwrite) NSArray *changes;
-@end
-
-@implementation FViewProcessorResult
-- (id)initWithViewCache:(FViewCache *)viewCache changes:(NSArray *)changes {
-    self = [super init];
-    if (self) {
-        self.viewCache = viewCache;
-        self.changes = changes;
-    }
-    return self;
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Login/FAuthTokenProvider.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Login/FAuthTokenProvider.h
deleted file mode 100644
index a4f8b15..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Login/FAuthTokenProvider.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#import "FTypedefs.h"
-#import "FTypedefs_Private.h"
-
-@protocol FIRAuthInterop;
-
-@protocol FAuthTokenProvider <NSObject>
-
-- (void)fetchTokenForcingRefresh:(BOOL)forceRefresh
-                    withCallback:(fbt_void_nsstring_nserror)callback;
-
-- (void)listenForTokenChanges:(fbt_void_nsstring)listener;
-
-@end
-
-@interface FAuthTokenProvider : NSObject
-
-+ (id<FAuthTokenProvider>)authTokenProviderWithAuth:(id<FIRAuthInterop>)auth;
-
-- (instancetype)init NS_UNAVAILABLE;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Login/FAuthTokenProvider.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Login/FAuthTokenProvider.m
deleted file mode 100644
index cd7fbe7..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Login/FAuthTokenProvider.m
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FAuthTokenProvider.h"
-
-#import <FirebaseAuthInterop/FIRAuthInterop.h>
-#import <FirebaseCore/FIRAppInternal.h>
-#import <FirebaseCore/FIRComponentContainer.h>
-#import <FirebaseCore/FIRLogger.h>
-
-#import "FIRDatabaseQuery_Private.h"
-#import "FIRNoopAuthTokenProvider.h"
-#import "FUtilities.h"
-
-@interface FAuthStateListenerWrapper : NSObject
-
-@property(nonatomic, copy) fbt_void_nsstring listener;
-@property(nonatomic, weak) id<FIRAuthInterop> auth;
-
-@end
-
-@implementation FAuthStateListenerWrapper
-
-- (instancetype)initWithListener:(fbt_void_nsstring)listener
-                            auth:(id<FIRAuthInterop>)auth {
-    self = [super init];
-    if (self != nil) {
-        self->_listener = listener;
-        self->_auth = auth;
-        [[NSNotificationCenter defaultCenter]
-            addObserver:self
-               selector:@selector(authStateDidChangeNotification:)
-                   name:FIRAuthStateDidChangeInternalNotification
-                 object:nil];
-    }
-    return self;
-}
-
-- (void)authStateDidChangeNotification:(NSNotification *)notification {
-    NSDictionary *userInfo = notification.userInfo;
-    if (notification.object == self.auth) {
-        NSString *token =
-            userInfo[FIRAuthStateDidChangeInternalNotificationTokenKey];
-        dispatch_async([FIRDatabaseQuery sharedQueue], ^{
-          self.listener(token);
-        });
-    }
-}
-
-- (void)dealloc {
-    [[NSNotificationCenter defaultCenter] removeObserver:self];
-}
-
-@end
-
-@interface FIRFirebaseAuthTokenProvider : NSObject <FAuthTokenProvider>
-
-@property(nonatomic, strong) id<FIRAuthInterop> auth;
-/** Strong references to the auth listeners as they are only weak in
- * FIRFirebaseApp */
-@property(nonatomic, strong) NSMutableArray *authListeners;
-
-- (instancetype)initWithAuth:(id<FIRAuthInterop>)auth;
-
-@end
-
-@implementation FIRFirebaseAuthTokenProvider
-
-- (instancetype)initWithAuth:(id<FIRAuthInterop>)auth {
-    self = [super init];
-    if (self != nil) {
-        self->_auth = auth;
-        self->_authListeners = [NSMutableArray array];
-    }
-    return self;
-}
-
-- (void)fetchTokenForcingRefresh:(BOOL)forceRefresh
-                    withCallback:(fbt_void_nsstring_nserror)callback {
-    if (self.auth == nil) {
-        // Signal that Auth is not available by returning nil.
-        callback(nil, nil);
-    } else {
-        [self.auth getTokenForcingRefresh:forceRefresh
-                             withCallback:^(NSString *_Nullable token,
-                                            NSError *_Nullable error) {
-                               dispatch_async([FIRDatabaseQuery sharedQueue], ^{
-                                 callback(token, error);
-                               });
-                             }];
-    }
-}
-
-- (void)listenForTokenChanges:(_Nonnull fbt_void_nsstring)listener {
-    FAuthStateListenerWrapper *wrapper =
-        [[FAuthStateListenerWrapper alloc] initWithListener:listener
-                                                       auth:self.auth];
-    [self.authListeners addObject:wrapper];
-}
-
-@end
-
-@implementation FAuthTokenProvider
-
-+ (id<FAuthTokenProvider>)authTokenProviderWithAuth:
-    (id<FIRAuthInterop>)authInterop {
-    return [[FIRFirebaseAuthTokenProvider alloc] initWithAuth:authInterop];
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Login/FIRNoopAuthTokenProvider.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Login/FIRNoopAuthTokenProvider.h
deleted file mode 100644
index 137c0ce..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Login/FIRNoopAuthTokenProvider.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FAuthTokenProvider.h"
-#import <Foundation/Foundation.h>
-
-@interface FIRNoopAuthTokenProvider : NSObject <FAuthTokenProvider>
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Login/FIRNoopAuthTokenProvider.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Login/FIRNoopAuthTokenProvider.m
deleted file mode 100644
index c50d308..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Login/FIRNoopAuthTokenProvider.m
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FIRNoopAuthTokenProvider.h"
-#import "FAuthTokenProvider.h"
-#import "FIRDatabaseQuery_Private.h"
-
-@implementation FIRNoopAuthTokenProvider
-
-- (void)fetchTokenForcingRefresh:(BOOL)forceRefresh
-                    withCallback:(fbt_void_nsstring_nserror)callback {
-    dispatch_async([FIRDatabaseQuery sharedQueue], ^{
-      callback(nil, nil);
-    });
-}
-
-- (void)listenForTokenChanges:(fbt_void_nsstring)listener {
-    // no-op, because token never changes
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FCachePolicy.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FCachePolicy.h
deleted file mode 100644
index 6305d34..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FCachePolicy.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@protocol FCachePolicy <NSObject>
-
-- (BOOL)shouldPruneCacheWithSize:(NSUInteger)cacheSize
-          numberOfTrackedQueries:(NSUInteger)numTrackedQueries;
-- (BOOL)shouldCheckCacheSize:(NSUInteger)serverUpdatesSinceLastCheck;
-- (float)percentOfQueriesToPruneAtOnce;
-- (NSUInteger)maxNumberOfQueriesToKeep;
-
-@end
-
-@interface FLRUCachePolicy : NSObject <FCachePolicy>
-
-@property(nonatomic, readonly) NSUInteger maxSize;
-
-- (id)initWithMaxSize:(NSUInteger)maxSize;
-
-@end
-
-@interface FNoCachePolicy : NSObject <FCachePolicy>
-
-+ (FNoCachePolicy *)noCachePolicy;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FCachePolicy.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FCachePolicy.m
deleted file mode 100644
index c1ecd98..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FCachePolicy.m
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FCachePolicy.h"
-
-@interface FLRUCachePolicy ()
-
-@property(nonatomic, readwrite) NSUInteger maxSize;
-
-@end
-
-static const NSUInteger kFServerUpdatesBetweenCacheSizeChecks = 1000;
-static const NSUInteger kFMaxNumberOfPrunableQueriesToKeep = 1000;
-static const float kFPercentOfQueriesToPruneAtOnce = 0.2f;
-
-@implementation FLRUCachePolicy
-
-- (id)initWithMaxSize:(NSUInteger)maxSize {
-    self = [super init];
-    if (self != nil) {
-        self->_maxSize = maxSize;
-    }
-    return self;
-}
-
-- (BOOL)shouldPruneCacheWithSize:(NSUInteger)cacheSize
-          numberOfTrackedQueries:(NSUInteger)numTrackedQueries {
-    return cacheSize > self.maxSize ||
-           numTrackedQueries > kFMaxNumberOfPrunableQueriesToKeep;
-}
-
-- (BOOL)shouldCheckCacheSize:(NSUInteger)serverUpdatesSinceLastCheck {
-    return serverUpdatesSinceLastCheck > kFServerUpdatesBetweenCacheSizeChecks;
-}
-
-- (float)percentOfQueriesToPruneAtOnce {
-    return kFPercentOfQueriesToPruneAtOnce;
-}
-
-- (NSUInteger)maxNumberOfQueriesToKeep {
-    return kFMaxNumberOfPrunableQueriesToKeep;
-}
-
-@end
-
-@implementation FNoCachePolicy
-
-+ (FNoCachePolicy *)noCachePolicy {
-    return [[FNoCachePolicy alloc] init];
-}
-
-- (BOOL)shouldPruneCacheWithSize:(NSUInteger)cacheSize
-          numberOfTrackedQueries:(NSUInteger)numTrackedQueries {
-    return NO;
-}
-
-- (BOOL)shouldCheckCacheSize:(NSUInteger)serverUpdatesSinceLastCheck {
-    return NO;
-}
-
-- (float)percentOfQueriesToPruneAtOnce {
-    return 0;
-}
-
-- (NSUInteger)maxNumberOfQueriesToKeep {
-    return NSUIntegerMax;
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FLevelDBStorageEngine.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FLevelDBStorageEngine.h
deleted file mode 100644
index 6d32b98..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FLevelDBStorageEngine.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#import "FCompoundWrite.h"
-#import "FNode.h"
-#import "FPath.h"
-#import "FQuerySpec.h"
-#import "FStorageEngine.h"
-
-@class FCacheNode;
-@class FTrackedQuery;
-@class FPruneForest;
-@class FRepoInfo;
-
-@interface FLevelDBStorageEngine : NSObject <FStorageEngine>
-
-+ (NSString *)firebaseDir;
-
-- (id)initWithPath:(NSString *)path;
-
-- (void)runLegacyMigration:(FRepoInfo *)info;
-- (void)purgeEverything;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FLevelDBStorageEngine.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FLevelDBStorageEngine.m
deleted file mode 100644
index 77a8303..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FLevelDBStorageEngine.m
+++ /dev/null
@@ -1,990 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#import "FLevelDBStorageEngine.h"
-
-#import "APLevelDB.h"
-#import "FEmptyNode.h"
-#import "FPendingPut.h" // For legacy migration
-#import "FPruneForest.h"
-#import "FQueryParams.h"
-#import "FSnapshotUtilities.h"
-#import "FTrackedQuery.h"
-#import "FUtilities.h"
-#import "FWriteRecord.h"
-#import <FirebaseCore/FIRLogger.h>
-
-@interface FLevelDBStorageEngine ()
-
-@property(nonatomic, strong) NSString *basePath;
-@property(nonatomic, strong) APLevelDB *writesDB;
-@property(nonatomic, strong) APLevelDB *serverCacheDB;
-
-@end
-
-// WARNING: If you change this, you need to write a migration script
-static NSString *const kFPersistenceVersion = @"1";
-
-static NSString *const kFServerDBPath = @"server_data";
-static NSString *const kFWritesDBPath = @"writes";
-
-static NSString *const kFUserWriteId = @"id";
-static NSString *const kFUserWritePath = @"path";
-static NSString *const kFUserWriteOverwrite = @"o";
-static NSString *const kFUserWriteMerge = @"m";
-
-static NSString *const kFTrackedQueryId = @"id";
-static NSString *const kFTrackedQueryPath = @"path";
-static NSString *const kFTrackedQueryParams = @"p";
-static NSString *const kFTrackedQueryLastUse = @"lu";
-static NSString *const kFTrackedQueryIsComplete = @"c";
-static NSString *const kFTrackedQueryIsActive = @"a";
-
-static NSString *const kFServerCachePrefix = @"/server_cache/";
-// '~' is the last non-control character in the ASCII table until 127
-// We wan't the entire range of thing stored in the DB
-static NSString *const kFServerCacheRangeEnd = @"/server_cache~";
-static NSString *const kFTrackedQueriesPrefix = @"/tracked_queries/";
-static NSString *const kFTrackedQueryKeysPrefix = @"/tracked_query_keys/";
-
-// Failed to load JSON because a valid JSON turns out to be NaN while
-// deserializing
-static const NSInteger kFNanFailureCode = 3840;
-
-static NSString *writeRecordKey(NSUInteger writeId) {
-    return [NSString stringWithFormat:@"%lu", (unsigned long)(writeId)];
-}
-
-static NSString *serverCacheKey(FPath *path) {
-    return [NSString stringWithFormat:@"%@%@", kFServerCachePrefix,
-                                      ([path toStringWithTrailingSlash])];
-}
-
-static NSString *trackedQueryKey(NSUInteger trackedQueryId) {
-    return [NSString stringWithFormat:@"%@%lu", kFTrackedQueriesPrefix,
-                                      (unsigned long)trackedQueryId];
-}
-
-static NSString *trackedQueryKeysKeyPrefix(NSUInteger trackedQueryId) {
-    return [NSString stringWithFormat:@"%@%lu/", kFTrackedQueryKeysPrefix,
-                                      (unsigned long)trackedQueryId];
-}
-
-static NSString *trackedQueryKeysKey(NSUInteger trackedQueryId, NSString *key) {
-    return [NSString stringWithFormat:@"%@%lu/%@", kFTrackedQueryKeysPrefix,
-                                      (unsigned long)trackedQueryId, key];
-}
-
-@implementation FLevelDBStorageEngine
-#pragma mark - Constructors
-
-- (id)initWithPath:(NSString *)dbPath {
-    self = [super init];
-    if (self) {
-        self.basePath = [[FLevelDBStorageEngine firebaseDir]
-            stringByAppendingPathComponent:dbPath];
-        /* For reference:
-         serverDataDB = [aPersistence createDbByName:@"server_data"];
-         FPangolinDB *completenessDb = [aPersistence
-         createDbByName:@"server_complete"];
-         */
-        [FLevelDBStorageEngine ensureDir:self.basePath markAsDoNotBackup:YES];
-        [self runMigration];
-        [self openDatabases];
-    }
-    return self;
-}
-
-- (void)runMigration {
-    // Currently we're at version 1, so all we need to do is write that to a
-    // file
-    NSString *versionFile =
-        [self.basePath stringByAppendingPathComponent:@"version"];
-    NSError *error;
-    NSString *oldVersion =
-        [NSString stringWithContentsOfFile:versionFile
-                                  encoding:NSUTF8StringEncoding
-                                     error:&error];
-    if (!oldVersion) {
-        // This is probably fine, we don't have a version file yet
-        BOOL success = [kFPersistenceVersion writeToFile:versionFile
-                                              atomically:NO
-                                                encoding:NSUTF8StringEncoding
-                                                   error:&error];
-        if (!success) {
-            FFWarn(@"I-RDB076001", @"Failed to write version for database: %@",
-                   error);
-        }
-    } else if ([oldVersion isEqualToString:kFPersistenceVersion]) {
-        // Everythings fine no need for migration
-    } else {
-        // If we add more versions in the future, we need to run migration here
-        [NSException raise:NSInternalInconsistencyException
-                    format:@"Unrecognized database version: %@", oldVersion];
-    }
-}
-
-- (void)runLegacyMigration:(FRepoInfo *)info {
-    NSArray *dirPaths = NSSearchPathForDirectoriesInDomains(
-        NSDocumentDirectory, NSUserDomainMask, YES);
-    NSString *documentsDir = [dirPaths objectAtIndex:0];
-    NSString *firebaseDir =
-        [documentsDir stringByAppendingPathComponent:@"firebase"];
-    NSString *repoHashString =
-        [NSString stringWithFormat:@"%@_%@", info.host, info.namespace];
-    NSString *legacyBaseDir =
-        [NSString stringWithFormat:@"%@/1/%@/v1", firebaseDir, repoHashString];
-    if ([[NSFileManager defaultManager] fileExistsAtPath:legacyBaseDir]) {
-        FFWarn(@"I-RDB076002", @"Legacy database found, migrating...");
-        // We only need to migrate writes
-        NSError *error = nil;
-        APLevelDB *writes = [APLevelDB
-            levelDBWithPath:[legacyBaseDir stringByAppendingPathComponent:
-                                               @"outstanding_puts"]
-                      error:&error];
-        if (writes != nil) {
-            __block NSUInteger numberOfWritesRestored = 0;
-            // Maybe we could use write batches, but what the heck, I'm sure
-            // it'll go fine :P
-            [writes enumerateKeysAndValuesAsData:^(NSString *key, NSData *data,
-                                                   BOOL *stop) {
-              id pendingPut = [NSKeyedUnarchiver unarchiveObjectWithData:data];
-              if ([pendingPut isKindOfClass:[FPendingPut class]]) {
-                  FPendingPut *put = pendingPut;
-                  id<FNode> newNode =
-                      [FSnapshotUtilities nodeFrom:put.data
-                                          priority:put.priority];
-                  [self saveUserOverwrite:newNode
-                                   atPath:put.path
-                                  writeId:[key integerValue]];
-                  numberOfWritesRestored++;
-              } else if ([pendingPut
-                             isKindOfClass:[FPendingPutPriority class]]) {
-                  // This is for backwards compatibility. Older clients will
-                  // save FPendingPutPriority. New ones will need to read it and
-                  // translate.
-                  FPendingPutPriority *putPriority = pendingPut;
-                  FPath *priorityPath =
-                      [putPriority.path childFromString:@".priority"];
-                  id<FNode> newNode =
-                      [FSnapshotUtilities nodeFrom:putPriority.priority
-                                          priority:nil];
-                  [self saveUserOverwrite:newNode
-                                   atPath:priorityPath
-                                  writeId:[key integerValue]];
-                  numberOfWritesRestored++;
-              } else if ([pendingPut isKindOfClass:[FPendingUpdate class]]) {
-                  FPendingUpdate *update = pendingPut;
-                  FCompoundWrite *merge = [FCompoundWrite
-                      compoundWriteWithValueDictionary:update.data];
-                  [self saveUserMerge:merge
-                               atPath:update.path
-                              writeId:[key integerValue]];
-                  numberOfWritesRestored++;
-              } else {
-                  FFWarn(@"I-RDB076003",
-                         @"Failed to migrate legacy write, meh!");
-              }
-            }];
-            FFWarn(@"I-RDB076004", @"Migrated %lu writes",
-                   (unsigned long)numberOfWritesRestored);
-            [writes close];
-            FFWarn(@"I-RDB076005", @"Deleting legacy database...");
-            BOOL success =
-                [[NSFileManager defaultManager] removeItemAtPath:legacyBaseDir
-                                                           error:&error];
-            if (!success) {
-                FFWarn(@"I-RDB076006", @"Failed to delete legacy database: %@",
-                       error);
-            } else {
-                FFWarn(@"I-RDB076007", @"Finished migrating legacy database.");
-            }
-        } else {
-            FFWarn(@"I-RDB076008", @"Failed to migrate old database: %@",
-                   error);
-        }
-    }
-}
-
-- (void)openDatabases {
-    self.serverCacheDB = [self createDB:kFServerDBPath];
-    self.writesDB = [self createDB:kFWritesDBPath];
-}
-
-- (void)purgeDatabase:(NSString *)dbPath {
-    NSString *path = [self.basePath stringByAppendingPathComponent:dbPath];
-    NSError *error;
-    FFWarn(@"I-RDB076009", @"Deleting database at path %@", path);
-    BOOL success = [[NSFileManager defaultManager] removeItemAtPath:path
-                                                              error:&error];
-    if (!success) {
-        [NSException raise:NSInternalInconsistencyException
-                    format:@"Failed to delete database files: %@", error];
-    }
-}
-
-- (void)purgeEverything {
-    [self close];
-    [@[ kFServerDBPath, kFWritesDBPath ]
-        enumerateObjectsUsingBlock:^(NSString *dbPath, NSUInteger idx,
-                                     BOOL *stop) {
-          [self purgeDatabase:dbPath];
-        }];
-
-    [self openDatabases];
-}
-
-- (void)close {
-    // autoreleasepool will cause deallocation which will close the DB
-    @autoreleasepool {
-        [self.serverCacheDB close];
-        self.serverCacheDB = nil;
-        [self.writesDB close];
-        self.writesDB = nil;
-    }
-}
-
-+ (NSString *)firebaseDir {
-#if TARGET_OS_IOS || TARGET_OS_TV
-    NSArray *dirPaths = NSSearchPathForDirectoriesInDomains(
-        NSDocumentDirectory, NSUserDomainMask, YES);
-    NSString *documentsDir = [dirPaths objectAtIndex:0];
-    return [documentsDir stringByAppendingPathComponent:@"firebase"];
-#elif TARGET_OS_OSX
-    return [NSHomeDirectory() stringByAppendingPathComponent:@".firebase"];
-#endif
-}
-
-- (APLevelDB *)createDB:(NSString *)dbName {
-    NSError *err = nil;
-    NSString *path = [self.basePath stringByAppendingPathComponent:dbName];
-    APLevelDB *db = [APLevelDB levelDBWithPath:path error:&err];
-
-    if (err) {
-        FFWarn(@"I-RDB076036",
-               @"Failed to read database persistence file '%@': %@", dbName,
-               [err localizedDescription]);
-        err = nil;
-
-        // Delete the database and try again.
-        [self purgeDatabase:dbName];
-        db = [APLevelDB levelDBWithPath:path error:&err];
-
-        if (err) {
-            NSString *reason = [NSString
-                stringWithFormat:@"Error initializing persistence: %@",
-                                 [err description]];
-            @throw [NSException
-                exceptionWithName:@"FirebaseDatabasePersistenceFailure"
-                           reason:reason
-                         userInfo:nil];
-        }
-    }
-
-    return db;
-}
-
-- (void)saveUserOverwrite:(id<FNode>)node
-                   atPath:(FPath *)path
-                  writeId:(NSUInteger)writeId {
-    NSDictionary *write = @{
-        kFUserWriteId : @(writeId),
-        kFUserWritePath : [path toStringWithTrailingSlash],
-        kFUserWriteOverwrite : [node valForExport:YES]
-    };
-    NSError *error = nil;
-    NSData *data = [NSJSONSerialization dataWithJSONObject:write
-                                                   options:0
-                                                     error:&error];
-    NSAssert(data, @"Failed to serialize user overwrite: %@, (Error: %@)",
-             write, error);
-    [self.writesDB setData:data forKey:writeRecordKey(writeId)];
-}
-
-- (void)saveUserMerge:(FCompoundWrite *)merge
-               atPath:(FPath *)path
-              writeId:(NSUInteger)writeId {
-    NSDictionary *write = @{
-        kFUserWriteId : @(writeId),
-        kFUserWritePath : [path toStringWithTrailingSlash],
-        kFUserWriteMerge : [merge valForExport:YES]
-    };
-    NSError *error = nil;
-    NSData *data = [NSJSONSerialization dataWithJSONObject:write
-                                                   options:0
-                                                     error:&error];
-    NSAssert(data, @"Failed to serialize user merge: %@ (Error: %@)", write,
-             error);
-    [self.writesDB setData:data forKey:writeRecordKey(writeId)];
-}
-
-- (void)removeUserWrite:(NSUInteger)writeId {
-    [self.writesDB removeKey:writeRecordKey(writeId)];
-}
-
-- (void)removeAllUserWrites {
-    __block NSUInteger count = 0;
-    NSDate *start = [NSDate date];
-    id<APLevelDBWriteBatch> batch = [self.writesDB beginWriteBatch];
-    [self.writesDB enumerateKeys:^(NSString *key, BOOL *stop) {
-      [batch removeKey:key];
-      count++;
-    }];
-    BOOL success = [batch commit];
-    if (!success) {
-        FFWarn(@"I-RDB076010", @"Failed to remove all users writes on disk!");
-    } else {
-        FFDebug(@"I-RDB076011", @"Removed %lu writes in %fms",
-                (unsigned long)count, [start timeIntervalSinceNow] * -1000);
-    }
-}
-
-- (NSArray *)userWrites {
-    NSDate *date = [NSDate date];
-    NSMutableArray *writes = [NSMutableArray array];
-    [self.writesDB enumerateKeysAndValuesAsData:^(NSString *key, NSData *data,
-                                                  BOOL *stop) {
-      NSError *error = nil;
-      NSDictionary *writeJSON = [NSJSONSerialization JSONObjectWithData:data
-                                                                options:0
-                                                                  error:&error];
-      if (writeJSON == nil) {
-          if (error.code == kFNanFailureCode) {
-              FFWarn(@"I-RDB076012",
-                     @"Failed to deserialize write (%@), likely because of out "
-                     @"of range doubles (Error: %@)",
-                     [[NSString alloc] initWithData:data
-                                           encoding:NSUTF8StringEncoding],
-                     error);
-              FFWarn(@"I-RDB076013", @"Removing failed write with key %@", key);
-              [self.writesDB removeKey:key];
-          } else {
-              [NSException raise:NSInternalInconsistencyException
-                          format:@"Failed to deserialize write: %@", error];
-          }
-      } else {
-          NSInteger writeId =
-              ((NSNumber *)writeJSON[kFUserWriteId]).integerValue;
-          FPath *path = [FPath pathWithString:writeJSON[kFUserWritePath]];
-          FWriteRecord *writeRecord;
-          if (writeJSON[kFUserWriteMerge] != nil) {
-              // It's a merge
-              FCompoundWrite *merge = [FCompoundWrite
-                  compoundWriteWithValueDictionary:writeJSON[kFUserWriteMerge]];
-              writeRecord = [[FWriteRecord alloc] initWithPath:path
-                                                         merge:merge
-                                                       writeId:writeId];
-          } else {
-              // It's an overwrite
-              NSAssert(writeJSON[kFUserWriteOverwrite] != nil,
-                       @"Persisted write did not contain merge or overwrite!");
-              id<FNode> node =
-                  [FSnapshotUtilities nodeFrom:writeJSON[kFUserWriteOverwrite]];
-              writeRecord = [[FWriteRecord alloc] initWithPath:path
-                                                     overwrite:node
-                                                       writeId:writeId
-                                                       visible:YES];
-          }
-          [writes addObject:writeRecord];
-      }
-    }];
-    // Make sure writes are sorted
-    [writes sortUsingComparator:^NSComparisonResult(FWriteRecord *one,
-                                                    FWriteRecord *two) {
-      if (one.writeId < two.writeId) {
-          return NSOrderedAscending;
-      } else if (one.writeId > two.writeId) {
-          return NSOrderedDescending;
-      } else {
-          return NSOrderedSame;
-      }
-    }];
-    FFDebug(@"I-RDB076014", @"Loaded %lu writes in %fms",
-            (unsigned long)writes.count, [date timeIntervalSinceNow] * -1000);
-    return writes;
-}
-
-- (id<FNode>)serverCacheAtPath:(FPath *)path {
-    NSDate *start = [NSDate date];
-    id data = [self internalNestedDataForPath:path];
-    id<FNode> node = [FSnapshotUtilities nodeFrom:data];
-    FFDebug(@"I-RDB076015", @"Loaded node with %d children at %@ in %fms",
-            [node numChildren], path, [start timeIntervalSinceNow] * -1000);
-    return node;
-}
-
-- (id<FNode>)serverCacheForKeys:(NSSet *)keys atPath:(FPath *)path {
-    NSDate *start = [NSDate date];
-    __block id<FNode> node = [FEmptyNode emptyNode];
-    [keys enumerateObjectsUsingBlock:^(NSString *key, BOOL *stop) {
-      id data = [self internalNestedDataForPath:[path childFromString:key]];
-      node = [node updateImmediateChild:key
-                           withNewChild:[FSnapshotUtilities nodeFrom:data]];
-    }];
-    FFDebug(@"I-RDB076016",
-            @"Loaded node with %d children for %lu keys at %@ in %fms",
-            [node numChildren], (unsigned long)keys.count, path,
-            [start timeIntervalSinceNow] * -1000);
-    return node;
-}
-
-- (void)updateServerCache:(id<FNode>)node
-                   atPath:(FPath *)path
-                    merge:(BOOL)merge {
-    NSDate *start = [NSDate date];
-    id<APLevelDBWriteBatch> batch = [self.serverCacheDB beginWriteBatch];
-    // Remove any leaf nodes that might be higher up
-    [self removeAllLeafNodesOnPath:path batch:batch];
-    __block NSUInteger counter = 0;
-    if (merge) {
-        // remove any children that exist
-        [node enumerateChildrenUsingBlock:^(NSString *childKey,
-                                            id<FNode> childNode, BOOL *stop) {
-          FPath *childPath = [path childFromString:childKey];
-          [self removeAllWithPrefix:serverCacheKey(childPath)
-                              batch:batch
-                           database:self.serverCacheDB];
-          [self saveNodeInternal:childNode
-                          atPath:childPath
-                           batch:batch
-                         counter:&counter];
-        }];
-    } else {
-        // remove everything
-        [self removeAllWithPrefix:serverCacheKey(path)
-                            batch:batch
-                         database:self.serverCacheDB];
-        [self saveNodeInternal:node atPath:path batch:batch counter:&counter];
-    }
-    BOOL success = [batch commit];
-    if (!success) {
-        FFWarn(@"I-RDB076017", @"Failed to update server cache on disk!");
-    } else {
-        FFDebug(@"I-RDB076018", @"Saved %lu leaf nodes for overwrite in %fms",
-                (unsigned long)counter, [start timeIntervalSinceNow] * -1000);
-    }
-}
-
-- (void)updateServerCacheWithMerge:(FCompoundWrite *)merge
-                            atPath:(FPath *)path {
-    NSDate *start = [NSDate date];
-    __block NSUInteger counter = 0;
-    id<APLevelDBWriteBatch> batch = [self.serverCacheDB beginWriteBatch];
-    // Remove any leaf nodes that might be higher up
-    [self removeAllLeafNodesOnPath:path batch:batch];
-    [merge enumerateWrites:^(FPath *relativePath, id<FNode> node, BOOL *stop) {
-      FPath *childPath = [path child:relativePath];
-      [self removeAllWithPrefix:serverCacheKey(childPath)
-                          batch:batch
-                       database:self.serverCacheDB];
-      [self saveNodeInternal:node
-                      atPath:childPath
-                       batch:batch
-                     counter:&counter];
-    }];
-    BOOL success = [batch commit];
-    if (!success) {
-        FFWarn(@"I-RDB076019", @"Failed to update server cache on disk!");
-    } else {
-        FFDebug(@"I-RDB076020", @"Saved %lu leaf nodes for merge in %fms",
-                (unsigned long)counter, [start timeIntervalSinceNow] * -1000);
-    }
-}
-
-- (void)saveNodeInternal:(id<FNode>)node
-                  atPath:(FPath *)path
-                   batch:(id<APLevelDBWriteBatch>)batch
-                 counter:(NSUInteger *)counter {
-    id data = [node valForExport:YES];
-    if (data != nil && ![data isKindOfClass:[NSNull class]]) {
-        [self internalSetNestedData:data
-                             forKey:serverCacheKey(path)
-                          withBatch:batch
-                            counter:counter];
-    }
-}
-
-- (NSUInteger)serverCacheEstimatedSizeInBytes {
-    // Use the exact size, because for pruning the approximate size can lead to
-    // weird situations where we prune everything because no compaction is ever
-    // run
-    return [self.serverCacheDB exactSizeFrom:kFServerCachePrefix
-                                          to:kFServerCacheRangeEnd];
-}
-
-- (void)pruneCache:(FPruneForest *)pruneForest atPath:(FPath *)path {
-    // TODO: be more intelligent, don't scan entire database...
-
-    __block NSUInteger pruned = 0;
-    __block NSUInteger kept = 0;
-    NSDate *start = [NSDate date];
-
-    NSString *prefix = serverCacheKey(path);
-    id<APLevelDBWriteBatch> batch = [self.serverCacheDB beginWriteBatch];
-
-    [self.serverCacheDB
-        enumerateKeysWithPrefix:prefix
-                     usingBlock:^(NSString *dbKey, BOOL *stop) {
-                       NSString *pathStr =
-                           [dbKey substringFromIndex:prefix.length];
-                       FPath *relativePath = [[FPath alloc] initWith:pathStr];
-                       if ([pruneForest shouldPruneUnkeptDescendantsAtPath:
-                                            relativePath]) {
-                           pruned++;
-                           [batch removeKey:dbKey];
-                       } else {
-                           kept++;
-                       }
-                     }];
-    BOOL success = [batch commit];
-    if (!success) {
-        FFWarn(@"I-RDB076021", @"Failed to prune cache on disk!");
-    } else {
-        FFDebug(@"I-RDB076022", @"Pruned %lu paths, kept %lu paths in %fms",
-                (unsigned long)pruned, (unsigned long)kept,
-                [start timeIntervalSinceNow] * -1000);
-    }
-}
-
-#pragma mark - Tracked Queries
-
-- (NSArray *)loadTrackedQueries {
-    NSDate *date = [NSDate date];
-    NSMutableArray *trackedQueries = [NSMutableArray array];
-    [self.serverCacheDB
-        enumerateKeysWithPrefix:kFTrackedQueriesPrefix
-                         asData:^(NSString *key, NSData *data, BOOL *stop) {
-                           NSError *error = nil;
-                           NSDictionary *queryJSON =
-                               [NSJSONSerialization JSONObjectWithData:data
-                                                               options:0
-                                                                 error:&error];
-                           if (queryJSON == nil) {
-                               if (error.code == kFNanFailureCode) {
-                                   FFWarn(
-                                       @"I-RDB076023",
-                                       @"Failed to deserialize tracked query "
-                                       @"(%@), likely because of out of range "
-                                       @"doubles (Error: %@)",
-                                       [[NSString alloc]
-                                           initWithData:data
-                                               encoding:NSUTF8StringEncoding],
-                                       error);
-                                   FFWarn(@"I-RDB076024",
-                                          @"Removing failed tracked query with "
-                                          @"key %@",
-                                          key);
-                                   [self.serverCacheDB removeKey:key];
-                               } else {
-                                   [NSException
-                                        raise:NSInternalInconsistencyException
-                                       format:@"Failed to deserialize tracked "
-                                              @"query: %@",
-                                              error];
-                               }
-                           } else {
-                               NSUInteger queryId =
-                                   ((NSNumber *)queryJSON[kFTrackedQueryId])
-                                       .unsignedIntegerValue;
-                               FPath *path =
-                                   [FPath pathWithString:
-                                              queryJSON[kFTrackedQueryPath]];
-                               FQueryParams *params = [FQueryParams
-                                   fromQueryObject:queryJSON
-                                                       [kFTrackedQueryParams]];
-                               FQuerySpec *query =
-                                   [[FQuerySpec alloc] initWithPath:path
-                                                             params:params];
-                               BOOL isComplete =
-                                   [queryJSON[kFTrackedQueryIsComplete]
-                                       boolValue];
-                               BOOL isActive =
-                                   [queryJSON[kFTrackedQueryIsActive]
-                                       boolValue];
-                               NSTimeInterval lastUse =
-                                   [queryJSON[kFTrackedQueryLastUse]
-                                       doubleValue];
-
-                               FTrackedQuery *trackedQuery =
-                                   [[FTrackedQuery alloc]
-                                       initWithId:queryId
-                                            query:query
-                                          lastUse:lastUse
-                                         isActive:isActive
-                                       isComplete:isComplete];
-
-                               [trackedQueries addObject:trackedQuery];
-                           }
-                         }];
-    FFDebug(@"I-RDB076025", @"Loaded %lu tracked queries in %fms",
-            (unsigned long)trackedQueries.count,
-            [date timeIntervalSinceNow] * -1000);
-    return trackedQueries;
-}
-
-- (void)removeTrackedQuery:(NSUInteger)queryId {
-    NSDate *start = [NSDate date];
-    id<APLevelDBWriteBatch> batch = [self.serverCacheDB beginWriteBatch];
-    [batch removeKey:trackedQueryKey(queryId)];
-    __block NSUInteger keyCount = 0;
-    [self.serverCacheDB
-        enumerateKeysWithPrefix:trackedQueryKeysKeyPrefix(queryId)
-                     usingBlock:^(NSString *key, BOOL *stop) {
-                       [batch removeKey:key];
-                       keyCount++;
-                     }];
-
-    BOOL success = [batch commit];
-    if (!success) {
-        FFWarn(@"I-RDB076026", @"Failed to remove tracked query on disk!");
-    } else {
-        FFDebug(@"I-RDB076027",
-                @"Removed query with id %lu (and removed %lu keys) in %fms",
-                (unsigned long)queryId, (unsigned long)keyCount,
-                [start timeIntervalSinceNow] * -1000);
-    }
-}
-
-- (void)saveTrackedQuery:(FTrackedQuery *)query {
-    NSDate *start = [NSDate date];
-    NSDictionary *trackedQuery = @{
-        kFTrackedQueryId : @(query.queryId),
-        kFTrackedQueryPath : [query.query.path toStringWithTrailingSlash],
-        kFTrackedQueryParams : [query.query.params wireProtocolParams],
-        kFTrackedQueryLastUse : @(query.lastUse),
-        kFTrackedQueryIsComplete : @(query.isComplete),
-        kFTrackedQueryIsActive : @(query.isActive)
-    };
-    NSError *error = nil;
-    NSData *data = [NSJSONSerialization dataWithJSONObject:trackedQuery
-                                                   options:0
-                                                     error:&error];
-    NSAssert(data, @"Failed to serialize tracked query (Error: %@)", error);
-    [self.serverCacheDB setData:data forKey:trackedQueryKey(query.queryId)];
-    FFDebug(@"I-RDB076028", @"Saved tracked query %lu in %fms",
-            (unsigned long)query.queryId, [start timeIntervalSinceNow] * -1000);
-}
-
-- (void)setTrackedQueryKeys:(NSSet *)keys forQueryId:(NSUInteger)queryId {
-    NSDate *start = [NSDate date];
-    __block NSUInteger removed = 0;
-    __block NSUInteger added = 0;
-    id<APLevelDBWriteBatch> batch = [self.serverCacheDB beginWriteBatch];
-    NSMutableSet *seenKeys = [NSMutableSet set];
-    // First, delete any keys that might be stored and are not part of the
-    // current keys
-    [self.serverCacheDB
-        enumerateKeysWithPrefix:trackedQueryKeysKeyPrefix(queryId)
-                      asStrings:^(NSString *dbKey, NSString *actualKey,
-                                  BOOL *stop) {
-                        if ([keys containsObject:actualKey]) {
-                            // Already in DB
-                            [seenKeys addObject:actualKey];
-                        } else {
-                            // Not part of set, delete key
-                            [batch removeKey:dbKey];
-                            removed++;
-                        }
-                      }];
-
-    // Next add any keys that are missing in the database
-    [keys enumerateObjectsUsingBlock:^(NSString *childKey, BOOL *stop) {
-      if (![seenKeys containsObject:childKey]) {
-          [batch setString:childKey
-                    forKey:trackedQueryKeysKey(queryId, childKey)];
-          added++;
-      }
-    }];
-    BOOL success = [batch commit];
-    if (!success) {
-        FFWarn(@"I-RDB076029", @"Failed to set tracked queries on disk!");
-    } else {
-        FFDebug(@"I-RDB076030",
-                @"Set %lu tracked keys (%lu added, %lu removed) for query %lu "
-                @"in %fms",
-                (unsigned long)keys.count, (unsigned long)added,
-                (unsigned long)removed, (unsigned long)queryId,
-                [start timeIntervalSinceNow] * -1000);
-    }
-}
-
-- (void)updateTrackedQueryKeysWithAddedKeys:(NSSet *)added
-                                removedKeys:(NSSet *)removed
-                                 forQueryId:(NSUInteger)queryId {
-    NSDate *start = [NSDate date];
-    id<APLevelDBWriteBatch> batch = [self.serverCacheDB beginWriteBatch];
-    [removed enumerateObjectsUsingBlock:^(NSString *key, BOOL *stop) {
-      [batch removeKey:trackedQueryKeysKey(queryId, key)];
-    }];
-    [added enumerateObjectsUsingBlock:^(NSString *key, BOOL *stop) {
-      [batch setString:key forKey:trackedQueryKeysKey(queryId, key)];
-    }];
-    BOOL success = [batch commit];
-    if (!success) {
-        FFWarn(@"I-RDB076031", @"Failed to update tracked queries on disk!");
-    } else {
-        FFDebug(@"I-RDB076032",
-                @"Added %lu tracked keys, removed %lu for query %lu in %fms",
-                (unsigned long)added.count, (unsigned long)removed.count,
-                (unsigned long)queryId, [start timeIntervalSinceNow] * -1000);
-    }
-}
-
-- (NSSet *)trackedQueryKeysForQuery:(NSUInteger)queryId {
-    NSDate *start = [NSDate date];
-    NSMutableSet *set = [NSMutableSet set];
-    [self.serverCacheDB
-        enumerateKeysWithPrefix:trackedQueryKeysKeyPrefix(queryId)
-                      asStrings:^(NSString *dbKey, NSString *actualKey,
-                                  BOOL *stop) {
-                        [set addObject:actualKey];
-                      }];
-    FFDebug(@"I-RDB076033", @"Loaded %lu tracked keys for query %lu in %fms",
-            (unsigned long)set.count, (unsigned long)queryId,
-            [start timeIntervalSinceNow] * -1000);
-    return set;
-}
-
-#pragma mark - Internal methods
-
-- (void)removeAllLeafNodesOnPath:(FPath *)path
-                           batch:(id<APLevelDBWriteBatch>)batch {
-    while (!path.isEmpty) {
-        [batch removeKey:serverCacheKey(path)];
-        path = [path parent];
-    }
-    // Make sure to delete any nodes at the root
-    [batch removeKey:serverCacheKey([FPath empty])];
-}
-
-- (void)removeAllWithPrefix:(NSString *)prefix
-                      batch:(id<APLevelDBWriteBatch>)batch
-                   database:(APLevelDB *)database {
-    assert(prefix != nil);
-
-    [database enumerateKeysWithPrefix:prefix
-                           usingBlock:^(NSString *key, BOOL *stop) {
-                             [batch removeKey:key];
-                           }];
-}
-
-#pragma mark - Internal helper methods
-
-- (void)internalSetNestedData:(id)value
-                       forKey:(NSString *)key
-                    withBatch:(id<APLevelDBWriteBatch>)batch
-                      counter:(NSUInteger *)counter {
-    if ([value isKindOfClass:[NSDictionary class]]) {
-        NSDictionary *dictionary = value;
-        [dictionary enumerateKeysAndObjectsUsingBlock:^(id childKey, id obj,
-                                                        BOOL *stop) {
-          assert(obj != nil);
-          NSString *childPath =
-              [NSString stringWithFormat:@"%@%@/", key, childKey];
-          [self internalSetNestedData:obj
-                               forKey:childPath
-                            withBatch:batch
-                              counter:counter];
-        }];
-    } else {
-        NSData *data = [self serializePrimitive:value];
-        [batch setData:data forKey:key];
-        (*counter)++;
-    }
-}
-
-- (id)internalNestedDataForPath:(FPath *)path {
-    NSAssert(path != nil, @"Path was nil!");
-
-    NSString *baseKey = serverCacheKey(path);
-
-    // HACK to make sure iter is freed now to avoid race conditions (if self.db
-    // is deleted before iter, you get an access violation).
-    @autoreleasepool {
-        APLevelDBIterator *iter =
-            [APLevelDBIterator iteratorWithLevelDB:self.serverCacheDB];
-
-        [iter seekToKey:baseKey];
-        if (iter.key == nil || ![iter.key hasPrefix:baseKey]) {
-            // No data.
-            return nil;
-        } else {
-            return [self internalNestedDataFromIterator:iter
-                                           andKeyPrefix:baseKey];
-        }
-    }
-}
-
-- (id)internalNestedDataFromIterator:(APLevelDBIterator *)iterator
-                        andKeyPrefix:(NSString *)prefix {
-    NSString *key = iterator.key;
-
-    if ([key isEqualToString:prefix]) {
-        id result = [self deserializePrimitive:iterator.valueAsData];
-        [iterator nextKey];
-        return result;
-    } else {
-        NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
-        while (key != nil && [key hasPrefix:prefix]) {
-            NSString *relativePath = [key substringFromIndex:prefix.length];
-            NSArray *pathPieces =
-                [relativePath componentsSeparatedByString:@"/"];
-            assert(pathPieces.count > 0);
-            NSString *childName = pathPieces[0];
-            NSString *childPath =
-                [NSString stringWithFormat:@"%@%@/", prefix, childName];
-            id childValue = [self internalNestedDataFromIterator:iterator
-                                                    andKeyPrefix:childPath];
-            [dict setValue:childValue forKey:childName];
-
-            key = iterator.key;
-        }
-        return dict;
-    }
-}
-
-- (NSData *)serializePrimitive:(id)value {
-    // HACK: The built-in serialization only works on dicts and arrays.  So we
-    // create an array and then strip off the leading / trailing byte (the [ and
-    // ]).
-    NSError *error = nil;
-    NSData *data = [NSJSONSerialization dataWithJSONObject:@[ value ]
-                                                   options:0
-                                                     error:&error];
-    NSAssert(data, @"Failed to serialize primitive: %@", error);
-
-    return [data subdataWithRange:NSMakeRange(1, data.length - 2)];
-}
-
-- (id)fixDoubleParsing:(id)value
-    __attribute__((no_sanitize("float-cast-overflow"))) {
-    if ([value isKindOfClass:[NSDecimalNumber class]]) {
-        // In case the value is an NSDecimalNumber, we may be dealing with
-        // precisions that are higher than what can be represented in a double.
-        // In this case it does not suffice to check for integral numbers by
-        // casting the [value doubleValue] to an int64_t, because this will
-        // cause the compared values to be rounded to double precision.
-        // Coupled with a bug in [NSDecimalNumber longLongValue] that triggers
-        // when converting values with high precision, this would cause
-        // values of high precision, but with an integral 'doubleValue'
-        // representation to be converted to bogus values.
-        // A radar for the NSDecimalNumber issue can be found here:
-        // http://www.openradar.me/radar?id=5007005597040640
-        // Consider the NSDecimalNumber value: 999.9999999999999487
-        // This number has a 'doubleValue' of 1000. Using the previous version
-        // of this method would cause the value to be interpreted to be integral
-        // and then the resulting value would be based on the longLongValue
-        // which due to the NSDecimalNumber issue would turn out as -844.
-        // By using NSDecimal logic to test for integral values,
-        // 999.9999999999999487 will not be considered integral, and instead
-        // of triggering the 'longLongValue' issue, it will be returned as
-        // the 'doubleValue' representation (1000).
-        // Please note, that even without the NSDecimalNumber issue, the
-        // 'correct' longLongValue of 999.9999999999999487 is 999 and not 1000,
-        // so the previous code would cause issues even without the bug
-        // referenced in the radar.
-        NSDecimal original = [(NSDecimalNumber *)value decimalValue];
-        NSDecimal rounded;
-        NSDecimalRound(&rounded, &original, 0, NSRoundPlain);
-        if (NSDecimalCompare(&original, &rounded) != NSOrderedSame) {
-            NSString *doubleString = [value stringValue];
-            return [NSNumber numberWithDouble:[doubleString doubleValue]];
-        } else {
-            return [NSNumber numberWithLongLong:[value longLongValue]];
-        }
-    } else if ([value isKindOfClass:[NSNumber class]]) {
-        // The parser for double values in JSONSerialization at the root takes
-        // some short-cuts and delivers wrong results (wrong rounding) for some
-        // double values, including 2.47. Because we use the exact bytes for
-        // hashing on the server this will lead to hash mismatches. The parser
-        // of NSNumber seems to be more in line with what the server expects, so
-        // we use that here
-        CFNumberType type = CFNumberGetType((CFNumberRef)value);
-        if (type == kCFNumberDoubleType || type == kCFNumberFloatType) {
-            // The NSJSON parser returns all numbers as double values, even
-            // those that contain no exponent. To make sure that the String
-            // conversion below doesn't unexpectedly reduce precision, we make
-            // sure that our number is indeed not an integer.
-            if ((double)(int64_t)[value doubleValue] != [value doubleValue]) {
-                NSString *doubleString = [value stringValue];
-                return [NSNumber numberWithDouble:[doubleString doubleValue]];
-            } else {
-                return [NSNumber numberWithLongLong:[value longLongValue]];
-            }
-        }
-    }
-    return value;
-}
-
-- (id)deserializePrimitive:(NSData *)data {
-    NSError *error = nil;
-    id result =
-        [NSJSONSerialization JSONObjectWithData:data
-                                        options:NSJSONReadingAllowFragments
-                                          error:&error];
-    if (result != nil) {
-        return [self fixDoubleParsing:result];
-    } else {
-        if (error.code == kFNanFailureCode) {
-            FFWarn(@"I-RDB076034",
-                   @"Failed to load primitive %@, likely because doubles where "
-                   @"out of range (Error: %@)",
-                   [[NSString alloc] initWithData:data
-                                         encoding:NSUTF8StringEncoding],
-                   error);
-            return [NSNull null];
-        } else {
-            [NSException raise:NSInternalInconsistencyException
-                        format:@"Failed to deserialiaze primitive: %@", error];
-            return nil;
-        }
-    }
-}
-
-+ (void)ensureDir:(NSString *)path markAsDoNotBackup:(BOOL)markAsDoNotBackup {
-    NSError *error;
-    BOOL success =
-        [[NSFileManager defaultManager] createDirectoryAtPath:path
-                                  withIntermediateDirectories:YES
-                                                   attributes:nil
-                                                        error:&error];
-    if (!success) {
-        @throw [NSException
-            exceptionWithName:@"FailedToCreatePersistenceDir"
-                       reason:@"Failed to create persistence directory."
-                     userInfo:@{@"path" : path}];
-    }
-
-    if (markAsDoNotBackup) {
-        NSURL *firebaseDirURL = [NSURL fileURLWithPath:path];
-        success = [firebaseDirURL setResourceValue:@YES
-                                            forKey:NSURLIsExcludedFromBackupKey
-                                             error:&error];
-        if (!success) {
-            FFWarn(
-                @"I-RDB076035",
-                @"Failed to mark firebase database folder as do not backup: %@",
-                error);
-            [NSException raise:@"Error marking as do not backup"
-                        format:@"Failed to mark folder %@ as do not backup",
-                               firebaseDirURL];
-        }
-    }
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPendingPut.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPendingPut.h
deleted file mode 100644
index 602bf8c..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPendingPut.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FPath.h"
-#import <Foundation/Foundation.h>
-
-// These are all legacy classes and are used to migrate older persistence data
-// base to newer ones These classes should not be used in newer code
-
-@interface FPendingPut : NSObject <NSCoding>
-
-@property(nonatomic, strong) FPath *path;
-@property(nonatomic, strong) id data;
-@property(nonatomic, strong) id priority;
-
-- (id)initWithPath:(FPath *)aPath andData:(id)aData andPriority:aPriority;
-- (void)encodeWithCoder:(NSCoder *)aCoder;
-- (id)initWithCoder:(NSCoder *)aDecoder;
-@end
-
-@interface FPendingPutPriority : NSObject <NSCoding>
-
-@property(nonatomic, strong) FPath *path;
-@property(nonatomic, strong) id priority;
-
-- (id)initWithPath:(FPath *)aPath andPriority:(id)aPriority;
-- (void)encodeWithCoder:(NSCoder *)aCoder;
-- (id)initWithCoder:(NSCoder *)aDecoder;
-
-@end
-
-@interface FPendingUpdate : NSObject <NSCoding>
-
-@property(nonatomic, strong) FPath *path;
-@property(nonatomic, strong) NSDictionary *data;
-
-- (id)initWithPath:(FPath *)aPath andData:(NSDictionary *)aData;
-- (void)encodeWithCoder:(NSCoder *)aCoder;
-- (id)initWithCoder:(NSCoder *)aDecoder;
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPendingPut.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPendingPut.m
deleted file mode 100644
index c519599..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPendingPut.m
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FPendingPut.h"
-
-@implementation FPendingPut
-
-@synthesize path;
-@synthesize data;
-
-- (id)initWithPath:(FPath *)aPath andData:(id)aData andPriority:(id)aPriority {
-    self = [super init];
-    if (self) {
-        self.path = aPath;
-        self.data = aData;
-        self.priority = aPriority;
-    }
-    return self;
-}
-
-- (void)encodeWithCoder:(NSCoder *)aCoder {
-    [aCoder encodeObject:[self.path description] forKey:@"path"];
-    [aCoder encodeObject:self.data forKey:@"data"];
-    [aCoder encodeObject:self.priority forKey:@"priority"];
-}
-
-- (id)initWithCoder:(NSCoder *)aDecoder {
-    self = [super init];
-    if (self) {
-        self.path =
-            [[FPath alloc] initWith:[aDecoder decodeObjectForKey:@"path"]];
-        self.data = [aDecoder decodeObjectForKey:@"data"];
-        self.priority = [aDecoder decodeObjectForKey:@"priority"];
-    }
-    return self;
-}
-
-@end
-
-@implementation FPendingPutPriority
-
-@synthesize path;
-@synthesize priority;
-
-- (id)initWithPath:(FPath *)aPath andPriority:(id)aPriority {
-    self = [super init];
-    if (self) {
-        self.path = aPath;
-        self.priority = aPriority;
-    }
-    return self;
-}
-
-- (void)encodeWithCoder:(NSCoder *)aCoder {
-    [aCoder encodeObject:[self.path description] forKey:@"path"];
-    [aCoder encodeObject:self.priority forKey:@"priority"];
-}
-
-- (id)initWithCoder:(NSCoder *)aDecoder {
-    self = [super init];
-    if (self) {
-        self.path =
-            [[FPath alloc] initWith:[aDecoder decodeObjectForKey:@"path"]];
-        self.priority = [aDecoder decodeObjectForKey:@"priority"];
-    }
-    return self;
-}
-
-@end
-
-@implementation FPendingUpdate
-
-@synthesize path;
-@synthesize data;
-
-- (id)initWithPath:(FPath *)aPath andData:(id)aData {
-    self = [super init];
-    if (self) {
-        self.path = aPath;
-        self.data = aData;
-    }
-    return self;
-}
-
-- (void)encodeWithCoder:(NSCoder *)aCoder {
-    [aCoder encodeObject:[self.path description] forKey:@"path"];
-    [aCoder encodeObject:self.data forKey:@"data"];
-}
-
-- (id)initWithCoder:(NSCoder *)aDecoder {
-    self = [super init];
-    if (self) {
-        self.path =
-            [[FPath alloc] initWith:[aDecoder decodeObjectForKey:@"path"]];
-        self.data = [aDecoder decodeObjectForKey:@"data"];
-    }
-    return self;
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPersistenceManager.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPersistenceManager.h
deleted file mode 100644
index 681c56d..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPersistenceManager.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#import "FCacheNode.h"
-#import "FCachePolicy.h"
-#import "FCompoundWrite.h"
-#import "FNode.h"
-#import "FQuerySpec.h"
-#import "FRepoInfo.h"
-#import "FStorageEngine.h"
-
-@interface FPersistenceManager : NSObject
-
-- (id)initWithStorageEngine:(id<FStorageEngine>)storageEngine
-                cachePolicy:(id<FCachePolicy>)cachePolicy;
-- (void)close;
-
-- (void)saveUserOverwrite:(id<FNode>)node
-                   atPath:(FPath *)path
-                  writeId:(NSUInteger)writeId;
-- (void)saveUserMerge:(FCompoundWrite *)merge
-               atPath:(FPath *)path
-              writeId:(NSUInteger)writeId;
-- (void)removeUserWrite:(NSUInteger)writeId;
-- (void)removeAllUserWrites;
-- (NSArray *)userWrites;
-
-- (FCacheNode *)serverCacheForQuery:(FQuerySpec *)spec;
-- (void)updateServerCacheWithNode:(id<FNode>)node forQuery:(FQuerySpec *)spec;
-- (void)updateServerCacheWithMerge:(FCompoundWrite *)merge atPath:(FPath *)path;
-
-- (void)applyUserWrite:(id<FNode>)write toServerCacheAtPath:(FPath *)path;
-- (void)applyUserMerge:(FCompoundWrite *)merge
-    toServerCacheAtPath:(FPath *)path;
-
-- (void)setQueryComplete:(FQuerySpec *)spec;
-- (void)setQueryActive:(FQuerySpec *)spec;
-- (void)setQueryInactive:(FQuerySpec *)spec;
-
-- (void)setTrackedQueryKeys:(NSSet *)keys forQuery:(FQuerySpec *)query;
-- (void)updateTrackedQueryKeysWithAddedKeys:(NSSet *)added
-                                removedKeys:(NSSet *)removed
-                                   forQuery:(FQuerySpec *)query;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPersistenceManager.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPersistenceManager.m
deleted file mode 100644
index 8924802..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPersistenceManager.m
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FPersistenceManager.h"
-#import "FCacheNode.h"
-#import "FClock.h"
-#import "FIndexedNode.h"
-#import "FLevelDBStorageEngine.h"
-#import "FPruneForest.h"
-#import "FTrackedQuery.h"
-#import "FTrackedQueryManager.h"
-#import "FUtilities.h"
-#import <FirebaseCore/FIRLogger.h>
-
-@interface FPersistenceManager ()
-
-@property(nonatomic, strong) id<FStorageEngine> storageEngine;
-@property(nonatomic, strong) id<FCachePolicy> cachePolicy;
-@property(nonatomic, strong) FTrackedQueryManager *trackedQueryManager;
-@property(nonatomic) NSUInteger serverCacheUpdatesSinceLastPruneCheck;
-
-@end
-
-@implementation FPersistenceManager
-
-- (id)initWithStorageEngine:(id<FStorageEngine>)storageEngine
-                cachePolicy:(id<FCachePolicy>)cachePolicy {
-    self = [super init];
-    if (self != nil) {
-        self->_storageEngine = storageEngine;
-        self->_cachePolicy = cachePolicy;
-        self->_trackedQueryManager = [[FTrackedQueryManager alloc]
-            initWithStorageEngine:self.storageEngine
-                            clock:[FSystemClock clock]];
-    }
-    return self;
-}
-
-- (void)close {
-    [self.storageEngine close];
-    self.storageEngine = nil;
-    self.trackedQueryManager = nil;
-}
-
-- (void)saveUserOverwrite:(id<FNode>)node
-                   atPath:(FPath *)path
-                  writeId:(NSUInteger)writeId {
-    [self.storageEngine saveUserOverwrite:node atPath:path writeId:writeId];
-}
-
-- (void)saveUserMerge:(FCompoundWrite *)merge
-               atPath:(FPath *)path
-              writeId:(NSUInteger)writeId {
-    [self.storageEngine saveUserMerge:merge atPath:path writeId:writeId];
-}
-
-- (void)removeUserWrite:(NSUInteger)writeId {
-    [self.storageEngine removeUserWrite:writeId];
-}
-
-- (void)removeAllUserWrites {
-    [self.storageEngine removeAllUserWrites];
-}
-
-- (NSArray *)userWrites {
-    return [self.storageEngine userWrites];
-}
-
-- (FCacheNode *)serverCacheForQuery:(FQuerySpec *)query {
-    NSSet *trackedKeys;
-    BOOL complete;
-    // TODO[offline]: Should we use trackedKeys to find out if this location is
-    // a child of a complete query?
-    if ([self.trackedQueryManager isQueryComplete:query]) {
-        complete = YES;
-        FTrackedQuery *trackedQuery =
-            [self.trackedQueryManager findTrackedQuery:query];
-        if (!query.loadsAllData && trackedQuery.isComplete) {
-            trackedKeys = [self.storageEngine
-                trackedQueryKeysForQuery:trackedQuery.queryId];
-        } else {
-            trackedKeys = nil;
-        }
-    } else {
-        complete = NO;
-        trackedKeys =
-            [self.trackedQueryManager knownCompleteChildrenAtPath:query.path];
-    }
-
-    id<FNode> node;
-    if (trackedKeys != nil) {
-        node = [self.storageEngine serverCacheForKeys:trackedKeys
-                                               atPath:query.path];
-    } else {
-        node = [self.storageEngine serverCacheAtPath:query.path];
-    }
-
-    FIndexedNode *indexedNode = [FIndexedNode indexedNodeWithNode:node
-                                                            index:query.index];
-    return [[FCacheNode alloc] initWithIndexedNode:indexedNode
-                                isFullyInitialized:complete
-                                        isFiltered:(trackedKeys != nil)];
-}
-
-- (void)updateServerCacheWithNode:(id<FNode>)node forQuery:(FQuerySpec *)query {
-    BOOL merge = !query.loadsAllData;
-    [self.storageEngine updateServerCache:node atPath:query.path merge:merge];
-    [self setQueryComplete:query];
-    [self doPruneCheckAfterServerUpdate];
-}
-
-- (void)updateServerCacheWithMerge:(FCompoundWrite *)merge
-                            atPath:(FPath *)path {
-    [self.storageEngine updateServerCacheWithMerge:merge atPath:path];
-    [self doPruneCheckAfterServerUpdate];
-}
-
-- (void)applyUserMerge:(FCompoundWrite *)merge
-    toServerCacheAtPath:(FPath *)path {
-    // TODO[offline]: rework this to be more efficient
-    [merge enumerateWrites:^(FPath *relativePath, id<FNode> node, BOOL *stop) {
-      [self applyUserWrite:node toServerCacheAtPath:[path child:relativePath]];
-    }];
-}
-
-- (void)applyUserWrite:(id<FNode>)write toServerCacheAtPath:(FPath *)path {
-    // This is a hack to guess whether we already cached this because we got a
-    // server data update for this write via an existing active default query.
-    // If we didn't, then we'll manually cache this and add a tracked query to
-    // mark it complete and keep it cached. Unfortunately this is just a guess
-    // and it's possible that we *did* get an update (e.g. via a filtered query)
-    // and by overwriting the cache here, we'll actually store an incorrect
-    // value (e.g. in the case that we wrote a ServerValue.TIMESTAMP and the
-    // server resolved it to a different value).
-    // TODO[offline]: Consider reworking.
-    if (![self.trackedQueryManager hasActiveDefaultQueryAtPath:path]) {
-        [self.storageEngine updateServerCache:write atPath:path merge:NO];
-        [self.trackedQueryManager ensureCompleteTrackedQueryAtPath:path];
-    }
-}
-
-- (void)setQueryComplete:(FQuerySpec *)query {
-    if (query.loadsAllData) {
-        [self.trackedQueryManager setQueriesCompleteAtPath:query.path];
-    } else {
-        [self.trackedQueryManager setQueryComplete:query];
-    }
-}
-
-- (void)setQueryActive:(FQuerySpec *)spec {
-    [self.trackedQueryManager setQueryActive:spec];
-}
-
-- (void)setQueryInactive:(FQuerySpec *)spec {
-    [self.trackedQueryManager setQueryInactive:spec];
-}
-
-- (void)doPruneCheckAfterServerUpdate {
-    self.serverCacheUpdatesSinceLastPruneCheck++;
-    if ([self.cachePolicy
-            shouldCheckCacheSize:self.serverCacheUpdatesSinceLastPruneCheck]) {
-        FFDebug(@"I-RDB078001", @"Reached prune check threshold. Checking...");
-        NSDate *date = [NSDate date];
-        self.serverCacheUpdatesSinceLastPruneCheck = 0;
-        BOOL canPrune = YES;
-        NSUInteger cacheSize =
-            [self.storageEngine serverCacheEstimatedSizeInBytes];
-        FFDebug(@"I-RDB078002", @"Server cache size: %lu",
-                (unsigned long)cacheSize);
-        while (canPrune &&
-               [self.cachePolicy
-                   shouldPruneCacheWithSize:cacheSize
-                     numberOfTrackedQueries:self.trackedQueryManager
-                                                .numberOfPrunableQueries]) {
-            FPruneForest *pruneForest =
-                [self.trackedQueryManager pruneOldQueries:self.cachePolicy];
-            if (pruneForest.prunesAnything) {
-                [self.storageEngine pruneCache:pruneForest
-                                        atPath:[FPath empty]];
-            } else {
-                canPrune = NO;
-            }
-            cacheSize = [self.storageEngine serverCacheEstimatedSizeInBytes];
-            FFDebug(@"I-RDB078003", @"Cache size after pruning: %lu",
-                    (unsigned long)cacheSize);
-        }
-        FFDebug(@"I-RDB078004", @"Pruning round took %fms",
-                [date timeIntervalSinceNow] * -1000);
-    }
-}
-
-- (void)setTrackedQueryKeys:(NSSet *)keys forQuery:(FQuerySpec *)query {
-    NSAssert(!query.loadsAllData,
-             @"We should only track keys for filtered queries");
-    FTrackedQuery *trackedQuery =
-        [self.trackedQueryManager findTrackedQuery:query];
-    NSAssert(trackedQuery.isActive,
-             @"We only expect tracked keys for currently-active queries.");
-    [self.storageEngine setTrackedQueryKeys:keys
-                                 forQueryId:trackedQuery.queryId];
-}
-
-- (void)updateTrackedQueryKeysWithAddedKeys:(NSSet *)added
-                                removedKeys:(NSSet *)removed
-                                   forQuery:(FQuerySpec *)query {
-    NSAssert(!query.loadsAllData,
-             @"We should only track keys for filtered queries");
-    FTrackedQuery *trackedQuery =
-        [self.trackedQueryManager findTrackedQuery:query];
-    NSAssert(trackedQuery.isActive,
-             @"We only expect tracked keys for currently-active queries.");
-    [self.storageEngine
-        updateTrackedQueryKeysWithAddedKeys:added
-                                removedKeys:removed
-                                 forQueryId:trackedQuery.queryId];
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPruneForest.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPruneForest.h
deleted file mode 100644
index 9e77217..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPruneForest.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@class FPath;
-
-@interface FPruneForest : NSObject
-
-+ (FPruneForest *)empty;
-
-- (BOOL)prunesAnything;
-- (BOOL)shouldPruneUnkeptDescendantsAtPath:(FPath *)path;
-- (BOOL)shouldKeepPath:(FPath *)path;
-- (BOOL)affectsPath:(FPath *)path;
-- (FPruneForest *)child:(NSString *)childKey;
-- (FPruneForest *)childAtPath:(FPath *)childKey;
-- (FPruneForest *)prunePath:(FPath *)path;
-- (FPruneForest *)keepPath:(FPath *)path;
-- (FPruneForest *)keepAll:(NSSet *)children atPath:(FPath *)path;
-- (FPruneForest *)pruneAll:(NSSet *)children atPath:(FPath *)path;
-
-- (void)enumarateKeptNodesUsingBlock:(void (^)(FPath *path))block;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPruneForest.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPruneForest.m
deleted file mode 100644
index e795c69..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPruneForest.m
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FPruneForest.h"
-
-#import "FImmutableTree.h"
-
-@interface FPruneForest ()
-
-@property(nonatomic, strong) FImmutableTree *pruneForest;
-
-@end
-
-@implementation FPruneForest
-
-static BOOL (^kFPrunePredicate)(id) = ^BOOL(NSNumber *pruneValue) {
-  return [pruneValue boolValue];
-};
-
-static BOOL (^kFKeepPredicate)(id) = ^BOOL(NSNumber *pruneValue) {
-  return ![pruneValue boolValue];
-};
-
-+ (FImmutableTree *)pruneTree {
-    static dispatch_once_t onceToken;
-    static FImmutableTree *pruneTree;
-    dispatch_once(&onceToken, ^{
-      pruneTree = [[FImmutableTree alloc] initWithValue:@YES];
-    });
-    return pruneTree;
-}
-
-+ (FImmutableTree *)keepTree {
-    static dispatch_once_t onceToken;
-    static FImmutableTree *keepTree;
-    dispatch_once(&onceToken, ^{
-      keepTree = [[FImmutableTree alloc] initWithValue:@NO];
-    });
-    return keepTree;
-}
-
-- (id)initWithForest:(FImmutableTree *)tree {
-    self = [super init];
-    if (self != nil) {
-        self->_pruneForest = tree;
-    }
-    return self;
-}
-
-+ (FPruneForest *)empty {
-    static dispatch_once_t onceToken;
-    static FPruneForest *forest;
-    dispatch_once(&onceToken, ^{
-      forest = [[FPruneForest alloc] initWithForest:[FImmutableTree empty]];
-    });
-    return forest;
-}
-
-- (BOOL)prunesAnything {
-    return [self.pruneForest containsValueMatching:kFPrunePredicate];
-}
-
-- (BOOL)shouldPruneUnkeptDescendantsAtPath:(FPath *)path {
-    NSNumber *shouldPrune = [self.pruneForest leafMostValueOnPath:path];
-    return shouldPrune != nil && [shouldPrune boolValue];
-}
-
-- (BOOL)shouldKeepPath:(FPath *)path {
-    NSNumber *shouldPrune = [self.pruneForest leafMostValueOnPath:path];
-    return shouldPrune != nil && ![shouldPrune boolValue];
-}
-
-- (BOOL)affectsPath:(FPath *)path {
-    return [self.pruneForest rootMostValueOnPath:path] != nil ||
-           ![[self.pruneForest subtreeAtPath:path] isEmpty];
-}
-
-- (FPruneForest *)child:(NSString *)childKey {
-    FImmutableTree *childPruneForest = [self.pruneForest.children get:childKey];
-    if (childPruneForest == nil) {
-        if (self.pruneForest.value != nil) {
-            childPruneForest = [self.pruneForest.value boolValue]
-                                   ? [FPruneForest pruneTree]
-                                   : [FPruneForest keepTree];
-        } else {
-            childPruneForest = [FImmutableTree empty];
-        }
-    } else {
-        if (childPruneForest.value == nil && self.pruneForest.value != nil) {
-            childPruneForest = [childPruneForest setValue:self.pruneForest.value
-                                                   atPath:[FPath empty]];
-        }
-    }
-    return [[FPruneForest alloc] initWithForest:childPruneForest];
-}
-
-- (FPruneForest *)childAtPath:(FPath *)path {
-    if (path.isEmpty) {
-        return self;
-    } else {
-        return [[self child:path.getFront] childAtPath:[path popFront]];
-    }
-}
-
-- (FPruneForest *)prunePath:(FPath *)path {
-    if ([self.pruneForest rootMostValueOnPath:path matching:kFKeepPredicate]) {
-        [NSException raise:NSInvalidArgumentException
-                    format:@"Can't prune path that was kept previously!"];
-    }
-    if ([self.pruneForest rootMostValueOnPath:path matching:kFPrunePredicate]) {
-        // This path will already be pruned
-        return self;
-    } else {
-        FImmutableTree *newPruneForest =
-            [self.pruneForest setTree:[FPruneForest pruneTree] atPath:path];
-        return [[FPruneForest alloc] initWithForest:newPruneForest];
-    }
-}
-
-- (FPruneForest *)keepPath:(FPath *)path {
-    if ([self.pruneForest rootMostValueOnPath:path matching:kFKeepPredicate]) {
-        // This path will already be kept
-        return self;
-    } else {
-        FImmutableTree *newPruneForest =
-            [self.pruneForest setTree:[FPruneForest keepTree] atPath:path];
-        return [[FPruneForest alloc] initWithForest:newPruneForest];
-    }
-}
-
-- (FPruneForest *)keepAll:(NSSet *)children atPath:(FPath *)path {
-    if ([self.pruneForest rootMostValueOnPath:path matching:kFKeepPredicate]) {
-        // This path will already be kept
-        return self;
-    } else {
-        return [self setPruneValue:[FPruneForest keepTree]
-                            forAll:children
-                            atPath:path];
-    }
-}
-
-- (FPruneForest *)pruneAll:(NSSet *)children atPath:(FPath *)path {
-    if ([self.pruneForest rootMostValueOnPath:path matching:kFKeepPredicate]) {
-        [NSException raise:NSInvalidArgumentException
-                    format:@"Can't prune path that was kept previously!"];
-    }
-    if ([self.pruneForest rootMostValueOnPath:path matching:kFPrunePredicate]) {
-        // This path will already be pruned
-        return self;
-    } else {
-        return [self setPruneValue:[FPruneForest pruneTree]
-                            forAll:children
-                            atPath:path];
-    }
-}
-
-- (FPruneForest *)setPruneValue:(FImmutableTree *)pruneValue
-                         forAll:(NSSet *)children
-                         atPath:(FPath *)path {
-    FImmutableTree *subtree = [self.pruneForest subtreeAtPath:path];
-    __block FImmutableSortedDictionary *childrenDictionary = subtree.children;
-    [children enumerateObjectsUsingBlock:^(NSString *childKey, BOOL *stop) {
-      childrenDictionary = [childrenDictionary insertKey:childKey
-                                               withValue:pruneValue];
-    }];
-    FImmutableTree *newSubtree =
-        [[FImmutableTree alloc] initWithValue:subtree.value
-                                     children:childrenDictionary];
-    return [[FPruneForest alloc]
-        initWithForest:[self.pruneForest setTree:newSubtree atPath:path]];
-}
-
-- (void)enumarateKeptNodesUsingBlock:(void (^)(FPath *))block {
-    [self.pruneForest forEach:^(FPath *path, id value) {
-      if (value != nil && ![value boolValue]) {
-          block(path);
-      }
-    }];
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FStorageEngine.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FStorageEngine.h
deleted file mode 100644
index 5f418b8..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FStorageEngine.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@protocol FNode;
-@class FPruneForest;
-@class FPath;
-@class FCompoundWrite;
-@class FQuerySpec;
-@class FTrackedQuery;
-
-@protocol FStorageEngine <NSObject>
-
-- (void)close;
-
-- (void)saveUserOverwrite:(id<FNode>)node
-                   atPath:(FPath *)path
-                  writeId:(NSUInteger)writeId;
-- (void)saveUserMerge:(FCompoundWrite *)merge
-               atPath:(FPath *)path
-              writeId:(NSUInteger)writeId;
-- (void)removeUserWrite:(NSUInteger)writeId;
-- (void)removeAllUserWrites;
-- (NSArray *)userWrites;
-
-- (id<FNode>)serverCacheAtPath:(FPath *)path;
-- (id<FNode>)serverCacheForKeys:(NSSet *)keys atPath:(FPath *)path;
-- (void)updateServerCache:(id<FNode>)node
-                   atPath:(FPath *)path
-                    merge:(BOOL)merge;
-- (void)updateServerCacheWithMerge:(FCompoundWrite *)merge atPath:(FPath *)path;
-- (NSUInteger)serverCacheEstimatedSizeInBytes;
-
-- (void)pruneCache:(FPruneForest *)pruneForest atPath:(FPath *)path;
-
-- (NSArray *)loadTrackedQueries;
-- (void)removeTrackedQuery:(NSUInteger)queryId;
-- (void)saveTrackedQuery:(FTrackedQuery *)query;
-
-- (void)setTrackedQueryKeys:(NSSet *)keys forQueryId:(NSUInteger)queryId;
-- (void)updateTrackedQueryKeysWithAddedKeys:(NSSet *)added
-                                removedKeys:(NSSet *)removed
-                                 forQueryId:(NSUInteger)queryId;
-- (NSSet *)trackedQueryKeysForQuery:(NSUInteger)queryId;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FTrackedQuery.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FTrackedQuery.h
deleted file mode 100644
index 7413816..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FTrackedQuery.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@class FQuerySpec;
-
-@interface FTrackedQuery : NSObject
-
-@property(nonatomic, readonly) NSUInteger queryId;
-@property(nonatomic, strong, readonly) FQuerySpec *query;
-@property(nonatomic, readonly) NSTimeInterval lastUse;
-@property(nonatomic, readonly) BOOL isComplete;
-@property(nonatomic, readonly) BOOL isActive;
-
-- (id)initWithId:(NSUInteger)queryId
-           query:(FQuerySpec *)query
-         lastUse:(NSTimeInterval)lastUse
-        isActive:(BOOL)isActive;
-- (id)initWithId:(NSUInteger)queryId
-           query:(FQuerySpec *)query
-         lastUse:(NSTimeInterval)lastUse
-        isActive:(BOOL)isActive
-      isComplete:(BOOL)isComplete;
-
-- (FTrackedQuery *)updateLastUse:(NSTimeInterval)lastUse;
-- (FTrackedQuery *)setComplete;
-- (FTrackedQuery *)setActiveState:(BOOL)isActive;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FTrackedQuery.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FTrackedQuery.m
deleted file mode 100644
index 6ca7ec0..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FTrackedQuery.m
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FTrackedQuery.h"
-
-#import "FQuerySpec.h"
-
-@interface FTrackedQuery ()
-
-@property(nonatomic, readwrite) NSUInteger queryId;
-@property(nonatomic, strong, readwrite) FQuerySpec *query;
-@property(nonatomic, readwrite) NSTimeInterval lastUse;
-@property(nonatomic, readwrite) BOOL isComplete;
-@property(nonatomic, readwrite) BOOL isActive;
-
-@end
-
-@implementation FTrackedQuery
-
-- (id)initWithId:(NSUInteger)queryId
-           query:(FQuerySpec *)query
-         lastUse:(NSTimeInterval)lastUse
-        isActive:(BOOL)isActive
-      isComplete:(BOOL)isComplete {
-    self = [super init];
-    if (self != nil) {
-        self->_queryId = queryId;
-        self->_query = query;
-        self->_lastUse = lastUse;
-        self->_isComplete = isComplete;
-        self->_isActive = isActive;
-    }
-    return self;
-}
-
-- (id)initWithId:(NSUInteger)queryId
-           query:(FQuerySpec *)query
-         lastUse:(NSTimeInterval)lastUse
-        isActive:(BOOL)isActive {
-    return [self initWithId:queryId
-                      query:query
-                    lastUse:lastUse
-                   isActive:isActive
-                 isComplete:NO];
-}
-
-- (FTrackedQuery *)updateLastUse:(NSTimeInterval)lastUse {
-    return [[FTrackedQuery alloc] initWithId:self.queryId
-                                       query:self.query
-                                     lastUse:lastUse
-                                    isActive:self.isActive
-                                  isComplete:self.isComplete];
-}
-
-- (FTrackedQuery *)setComplete {
-    return [[FTrackedQuery alloc] initWithId:self.queryId
-                                       query:self.query
-                                     lastUse:self.lastUse
-                                    isActive:self.isActive
-                                  isComplete:YES];
-}
-
-- (FTrackedQuery *)setActiveState:(BOOL)isActive {
-    return [[FTrackedQuery alloc] initWithId:self.queryId
-                                       query:self.query
-                                     lastUse:self.lastUse
-                                    isActive:isActive
-                                  isComplete:self.isComplete];
-}
-
-- (BOOL)isEqual:(id)object {
-    if (![object isKindOfClass:[FTrackedQuery class]]) {
-        return NO;
-    }
-    FTrackedQuery *other = (FTrackedQuery *)object;
-    if (self.queryId != other.queryId)
-        return NO;
-    if (self.query != other.query && ![self.query isEqual:other.query])
-        return NO;
-    if (self.lastUse != other.lastUse)
-        return NO;
-    if (self.isComplete != other.isComplete)
-        return NO;
-    if (self.isActive != other.isActive)
-        return NO;
-
-    return YES;
-}
-
-- (NSUInteger)hash {
-    NSUInteger hash = self.queryId;
-    hash = hash * 31 + self.query.hash;
-    hash = hash * 31 + (self.isActive ? 1 : 0);
-    hash = hash * 31 + (NSUInteger)self.lastUse;
-    hash = hash * 31 + (self.isComplete ? 1 : 0);
-    hash = hash * 31 + (self.isActive ? 1 : 0);
-    return hash;
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FTrackedQueryManager.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FTrackedQueryManager.h
deleted file mode 100644
index cd7d5a1..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FTrackedQueryManager.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@protocol FStorageEngine;
-@protocol FClock;
-@protocol FCachePolicy;
-@class FQuerySpec;
-@class FPath;
-@class FTrackedQuery;
-@class FPruneForest;
-
-@interface FTrackedQueryManager : NSObject
-
-- (id)initWithStorageEngine:(id<FStorageEngine>)storageEngine
-                      clock:(id<FClock>)clock;
-
-- (FTrackedQuery *)findTrackedQuery:(FQuerySpec *)query;
-
-- (BOOL)isQueryComplete:(FQuerySpec *)query;
-
-- (void)removeTrackedQuery:(FQuerySpec *)query;
-- (void)setQueryComplete:(FQuerySpec *)query;
-- (void)setQueriesCompleteAtPath:(FPath *)path;
-- (void)setQueryActive:(FQuerySpec *)query;
-- (void)setQueryInactive:(FQuerySpec *)query;
-
-- (BOOL)hasActiveDefaultQueryAtPath:(FPath *)path;
-- (void)ensureCompleteTrackedQueryAtPath:(FPath *)path;
-
-- (FPruneForest *)pruneOldQueries:(id<FCachePolicy>)cachePolicy;
-- (NSUInteger)numberOfPrunableQueries;
-- (NSSet *)knownCompleteChildrenAtPath:(FPath *)path;
-
-// For testing
-- (void)verifyCache;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FTrackedQueryManager.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FTrackedQueryManager.m
deleted file mode 100644
index 26accaf..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FTrackedQueryManager.m
+++ /dev/null
@@ -1,375 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FTrackedQueryManager.h"
-#import "FCachePolicy.h"
-#import "FClock.h"
-#import "FImmutableTree.h"
-#import "FLevelDBStorageEngine.h"
-#import "FPruneForest.h"
-#import "FTrackedQuery.h"
-#import "FUtilities.h"
-#import <FirebaseCore/FIRLogger.h>
-
-@interface FTrackedQueryManager ()
-
-@property(nonatomic, strong) FImmutableTree *trackedQueryTree;
-@property(nonatomic, strong) id<FStorageEngine> storageEngine;
-@property(nonatomic, strong) id<FClock> clock;
-@property(nonatomic) NSUInteger currentQueryId;
-
-@end
-
-@implementation FTrackedQueryManager
-
-- (id)initWithStorageEngine:(id<FStorageEngine>)storageEngine
-                      clock:(id<FClock>)clock {
-    self = [super init];
-    if (self != nil) {
-        self->_storageEngine = storageEngine;
-        self->_clock = clock;
-        self->_trackedQueryTree = [FImmutableTree empty];
-
-        NSTimeInterval lastUse = [clock currentTime];
-
-        NSArray *trackedQueries = [self.storageEngine loadTrackedQueries];
-        [trackedQueries enumerateObjectsUsingBlock:^(
-                            FTrackedQuery *trackedQuery, NSUInteger idx,
-                            BOOL *stop) {
-          self.currentQueryId =
-              MAX(trackedQuery.queryId + 1, self.currentQueryId);
-          if (trackedQuery.isActive) {
-              trackedQuery =
-                  [[trackedQuery setActiveState:NO] updateLastUse:lastUse];
-              FFDebug(
-                  @"I-RDB081001",
-                  @"Setting active query %lu from previous app start inactive",
-                  (unsigned long)trackedQuery.queryId);
-              [self.storageEngine saveTrackedQuery:trackedQuery];
-          }
-          [self cacheTrackedQuery:trackedQuery];
-        }];
-    }
-    return self;
-}
-
-+ (void)assertValidTrackedQuery:(FQuerySpec *)query {
-    NSAssert(!query.loadsAllData || query.isDefault,
-             @"Can't have tracked non-default query that loads all data");
-}
-
-+ (FQuerySpec *)normalizeQuery:(FQuerySpec *)query {
-    return query.loadsAllData ? [FQuerySpec defaultQueryAtPath:query.path]
-                              : query;
-}
-
-- (FTrackedQuery *)findTrackedQuery:(FQuerySpec *)query {
-    query = [FTrackedQueryManager normalizeQuery:query];
-    NSDictionary *set = [self.trackedQueryTree valueAtPath:query.path];
-    return set[query.params];
-}
-
-- (void)removeTrackedQuery:(FQuerySpec *)query {
-    query = [FTrackedQueryManager normalizeQuery:query];
-    FTrackedQuery *trackedQuery = [self findTrackedQuery:query];
-    NSAssert(trackedQuery, @"Tracked query must exist to be removed!");
-
-    [self.storageEngine removeTrackedQuery:trackedQuery.queryId];
-    NSMutableDictionary *trackedQueries =
-        [self.trackedQueryTree valueAtPath:query.path];
-    [trackedQueries removeObjectForKey:query.params];
-}
-
-- (void)setQueryActive:(FQuerySpec *)query {
-    [self setQueryActive:YES forQuery:query];
-}
-
-- (void)setQueryInactive:(FQuerySpec *)query {
-    [self setQueryActive:NO forQuery:query];
-}
-
-- (void)setQueryActive:(BOOL)isActive forQuery:(FQuerySpec *)query {
-    query = [FTrackedQueryManager normalizeQuery:query];
-    FTrackedQuery *trackedQuery = [self findTrackedQuery:query];
-
-    // Regardless of whether it's now active or no langer active, we update the
-    // lastUse time
-    NSTimeInterval lastUse = [self.clock currentTime];
-    if (trackedQuery != nil) {
-        trackedQuery =
-            [[trackedQuery updateLastUse:lastUse] setActiveState:isActive];
-        [self.storageEngine saveTrackedQuery:trackedQuery];
-    } else {
-        NSAssert(isActive, @"If we're setting the query to inactive, we should "
-                           @"already be tracking it!");
-        trackedQuery = [[FTrackedQuery alloc] initWithId:self.currentQueryId++
-                                                   query:query
-                                                 lastUse:lastUse
-                                                isActive:isActive];
-        [self.storageEngine saveTrackedQuery:trackedQuery];
-    }
-
-    [self cacheTrackedQuery:trackedQuery];
-}
-
-- (void)setQueryComplete:(FQuerySpec *)query {
-    query = [FTrackedQueryManager normalizeQuery:query];
-    FTrackedQuery *trackedQuery = [self findTrackedQuery:query];
-    if (!trackedQuery) {
-        // We might have removed a query and pruned it before we got the
-        // complete message from the server...
-        FFWarn(@"I-RDB081002",
-               @"Trying to set a query complete that is not tracked!");
-    } else if (!trackedQuery.isComplete) {
-        trackedQuery = [trackedQuery setComplete];
-        [self.storageEngine saveTrackedQuery:trackedQuery];
-        [self cacheTrackedQuery:trackedQuery];
-    } else {
-        // Nothing to do, already marked complete
-    }
-}
-
-- (void)setQueriesCompleteAtPath:(FPath *)path {
-    [[self.trackedQueryTree subtreeAtPath:path]
-        forEach:^(FPath *childPath, NSDictionary *trackedQueries) {
-          [trackedQueries enumerateKeysAndObjectsUsingBlock:^(
-                              FQueryParams *parms, FTrackedQuery *trackedQuery,
-                              BOOL *stop) {
-            if (!trackedQuery.isComplete) {
-                FTrackedQuery *newTrackedQuery = [trackedQuery setComplete];
-                [self.storageEngine saveTrackedQuery:newTrackedQuery];
-                [self cacheTrackedQuery:newTrackedQuery];
-            }
-          }];
-        }];
-}
-
-- (BOOL)isQueryComplete:(FQuerySpec *)query {
-    if ([self isIncludedInDefaultCompleteQuery:query]) {
-        return YES;
-    } else if (query.loadsAllData) {
-        // We didn't find a default complete query, so must not be complete.
-        return NO;
-    } else {
-        NSDictionary *trackedQueries =
-            [self.trackedQueryTree valueAtPath:query.path];
-        return [trackedQueries[query.params] isComplete];
-    }
-}
-
-- (BOOL)hasActiveDefaultQueryAtPath:(FPath *)path {
-    return [self.trackedQueryTree
-               rootMostValueOnPath:path
-                          matching:^BOOL(NSDictionary *trackedQueries) {
-                            return
-                                [trackedQueries[[FQueryParams defaultInstance]]
-                                    isActive];
-                          }] != nil;
-}
-
-- (void)ensureCompleteTrackedQueryAtPath:(FPath *)path {
-    FQuerySpec *query = [FQuerySpec defaultQueryAtPath:path];
-    if (![self isIncludedInDefaultCompleteQuery:query]) {
-        FTrackedQuery *trackedQuery = [self findTrackedQuery:query];
-        if (trackedQuery == nil) {
-            trackedQuery =
-                [[FTrackedQuery alloc] initWithId:self.currentQueryId++
-                                            query:query
-                                          lastUse:[self.clock currentTime]
-                                         isActive:NO
-                                       isComplete:YES];
-        } else {
-            NSAssert(!trackedQuery.isComplete,
-                     @"This should have been handled above!");
-            trackedQuery = [trackedQuery setComplete];
-        }
-        [self.storageEngine saveTrackedQuery:trackedQuery];
-        [self cacheTrackedQuery:trackedQuery];
-    }
-}
-
-- (BOOL)isIncludedInDefaultCompleteQuery:(FQuerySpec *)query {
-    return
-        [self.trackedQueryTree
-            findRootMostMatchingPath:query.path
-                           predicate:^BOOL(NSDictionary *trackedQueries) {
-                             return
-                                 [trackedQueries[[FQueryParams defaultInstance]]
-                                     isComplete];
-                           }] != nil;
-}
-
-- (void)cacheTrackedQuery:(FTrackedQuery *)query {
-    [FTrackedQueryManager assertValidTrackedQuery:query.query];
-    NSMutableDictionary *trackedDict =
-        [self.trackedQueryTree valueAtPath:query.query.path];
-    if (trackedDict == nil) {
-        trackedDict = [NSMutableDictionary dictionary];
-        self.trackedQueryTree =
-            [self.trackedQueryTree setValue:trackedDict
-                                     atPath:query.query.path];
-    }
-    trackedDict[query.query.params] = query;
-}
-
-- (NSUInteger)numberOfQueriesToPrune:(id<FCachePolicy>)cachePolicy
-                       prunableCount:(NSUInteger)numPrunable {
-    NSUInteger numPercent = (NSUInteger)ceilf(
-        numPrunable * [cachePolicy percentOfQueriesToPruneAtOnce]);
-    NSUInteger maxToKeep = [cachePolicy maxNumberOfQueriesToKeep];
-    NSUInteger numMax = (numPrunable > maxToKeep) ? numPrunable - maxToKeep : 0;
-    // Make sure we get below number of max queries to prune
-    return MAX(numMax, numPercent);
-}
-
-- (FPruneForest *)pruneOldQueries:(id<FCachePolicy>)cachePolicy {
-    NSMutableArray *pruneableQueries = [NSMutableArray array];
-    NSMutableArray *unpruneableQueries = [NSMutableArray array];
-    [self.trackedQueryTree
-        forEach:^(FPath *path, NSDictionary *trackedQueries) {
-          [trackedQueries enumerateKeysAndObjectsUsingBlock:^(
-                              FQueryParams *params, FTrackedQuery *trackedQuery,
-                              BOOL *stop) {
-            if (!trackedQuery.isActive) {
-                [pruneableQueries addObject:trackedQuery];
-            } else {
-                [unpruneableQueries addObject:trackedQuery];
-            }
-          }];
-        }];
-    [pruneableQueries sortUsingComparator:^NSComparisonResult(
-                          FTrackedQuery *q1, FTrackedQuery *q2) {
-      if (q1.lastUse < q2.lastUse) {
-          return NSOrderedAscending;
-      } else if (q1.lastUse > q2.lastUse) {
-          return NSOrderedDescending;
-      } else {
-          return NSOrderedSame;
-      }
-    }];
-
-    __block FPruneForest *pruneForest = [FPruneForest empty];
-    NSUInteger numToPrune =
-        [self numberOfQueriesToPrune:cachePolicy
-                       prunableCount:pruneableQueries.count];
-
-    // TODO: do in transaction
-    for (NSUInteger i = 0; i < numToPrune; i++) {
-        FTrackedQuery *toPrune = pruneableQueries[i];
-        pruneForest = [pruneForest prunePath:toPrune.query.path];
-        [self removeTrackedQuery:toPrune.query];
-    }
-
-    // Keep the rest of the prunable queries
-    for (NSUInteger i = numToPrune; i < pruneableQueries.count; i++) {
-        FTrackedQuery *toKeep = pruneableQueries[i];
-        pruneForest = [pruneForest keepPath:toKeep.query.path];
-    }
-
-    // Also keep unprunable queries
-    [unpruneableQueries enumerateObjectsUsingBlock:^(
-                            FTrackedQuery *toKeep, NSUInteger idx, BOOL *stop) {
-      pruneForest = [pruneForest keepPath:toKeep.query.path];
-    }];
-
-    return pruneForest;
-}
-
-- (NSUInteger)numberOfPrunableQueries {
-    __block NSUInteger count = 0;
-    [self.trackedQueryTree
-        forEach:^(FPath *path, NSDictionary *trackedQueries) {
-          [trackedQueries enumerateKeysAndObjectsUsingBlock:^(
-                              FQueryParams *params, FTrackedQuery *trackedQuery,
-                              BOOL *stop) {
-            if (!trackedQuery.isActive) {
-                count++;
-            }
-          }];
-        }];
-    return count;
-}
-
-- (NSSet *)filteredQueryIdsAtPath:(FPath *)path {
-    NSDictionary *queries = [self.trackedQueryTree valueAtPath:path];
-    if (queries) {
-        NSMutableSet *ids = [NSMutableSet set];
-        [queries enumerateKeysAndObjectsUsingBlock:^(
-                     FQueryParams *params, FTrackedQuery *query, BOOL *stop) {
-          if (!query.query.loadsAllData) {
-              [ids addObject:@(query.queryId)];
-          }
-        }];
-        return ids;
-    } else {
-        return [NSSet set];
-    }
-}
-
-- (NSSet *)knownCompleteChildrenAtPath:(FPath *)path {
-    NSAssert(![self isQueryComplete:[FQuerySpec defaultQueryAtPath:path]],
-             @"Path is fully complete");
-
-    NSMutableSet *completeChildren = [NSMutableSet set];
-    // First, get complete children from any queries at this location.
-    NSSet *queryIds = [self filteredQueryIdsAtPath:path];
-    [queryIds enumerateObjectsUsingBlock:^(NSNumber *queryId, BOOL *stop) {
-      NSSet *keys = [self.storageEngine
-          trackedQueryKeysForQuery:[queryId unsignedIntegerValue]];
-      [completeChildren unionSet:keys];
-    }];
-
-    // Second, get any complete default queries immediately below us.
-    [[[self.trackedQueryTree subtreeAtPath:path] children]
-        enumerateKeysAndObjectsUsingBlock:^(
-            NSString *childKey, FImmutableTree *childTree, BOOL *stop) {
-          if ([childTree.value[[FQueryParams defaultInstance]] isComplete]) {
-              [completeChildren addObject:childKey];
-          }
-        }];
-
-    return completeChildren;
-}
-
-- (void)verifyCache {
-    NSArray *storedTrackedQueries = [self.storageEngine loadTrackedQueries];
-    NSMutableArray *trackedQueries = [NSMutableArray array];
-
-    [self.trackedQueryTree forEach:^(FPath *path, NSDictionary *queryDict) {
-      [trackedQueries addObjectsFromArray:queryDict.allValues];
-    }];
-    NSComparator comparator =
-        ^NSComparisonResult(FTrackedQuery *q1, FTrackedQuery *q2) {
-          if (q1.queryId < q2.queryId) {
-              return NSOrderedAscending;
-          } else if (q1.queryId > q2.queryId) {
-              return NSOrderedDescending;
-          } else {
-              return NSOrderedSame;
-          }
-        };
-    [trackedQueries sortUsingComparator:comparator];
-    storedTrackedQueries =
-        [storedTrackedQueries sortedArrayUsingComparator:comparator];
-
-    if (![trackedQueries isEqualToArray:storedTrackedQueries]) {
-        [NSException
-             raise:NSInternalInconsistencyException
-            format:@"Tracked queries and queries stored on disk don't match"];
-    }
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRDataEventType.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRDataEventType.h
deleted file mode 100644
index 3aecd81..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRDataEventType.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef Firebase_FIRDataEventType_h
-#define Firebase_FIRDataEventType_h
-
-#import <Foundation/Foundation.h>
-
-/**
- * This enum is the set of events that you can observe at a Firebase Database
- * location.
- */
-typedef NS_ENUM(NSInteger, FIRDataEventType) {
-    /// A new child node is added to a location.
-    FIRDataEventTypeChildAdded,
-    /// A child node is removed from a location.
-    FIRDataEventTypeChildRemoved,
-    /// A child node at a location changes.
-    FIRDataEventTypeChildChanged,
-    /// A child node moves relative to the other child nodes at a location.
-    FIRDataEventTypeChildMoved,
-    /// Any data changes at a location or, recursively, at any child node.
-    FIRDataEventTypeValue
-} NS_SWIFT_NAME(DataEventType);
-
-#endif
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRDataSnapshot.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRDataSnapshot.h
deleted file mode 100644
index e88febb..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRDataSnapshot.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-@class FIRDatabaseReference;
-
-/**
- * A FIRDataSnapshot contains data from a Firebase Database location. Any time
- * you read Firebase data, you receive the data as a FIRDataSnapshot.
- *
- * FIRDataSnapshots are passed to the blocks you attach with
- * observeEventType:withBlock: or observeSingleEvent:withBlock:. They are
- * efficiently-generated immutable copies of the data at a Firebase Database
- * location. They can't be modified and will never change. To modify data at a
- * location, use a FIRDatabaseReference (e.g. with setValue:).
- */
-NS_SWIFT_NAME(DataSnapshot)
-@interface FIRDataSnapshot : NSObject
-
-#pragma mark - Navigating and inspecting a snapshot
-
-/**
- * Gets a FIRDataSnapshot for the location at the specified relative path.
- * The relative path can either be a simple child key (e.g. 'fred')
- * or a deeper slash-separated path (e.g. 'fred/name/first'). If the child
- * location has no data, an empty FIRDataSnapshot is returned.
- *
- * @param childPathString A relative path to the location of child data.
- * @return The FIRDataSnapshot for the child location.
- */
-- (FIRDataSnapshot *)childSnapshotForPath:(NSString *)childPathString;
-
-/**
- * Return YES if the specified child exists.
- *
- * @param childPathString A relative path to the location of a potential child.
- * @return YES if data exists at the specified childPathString, else NO.
- */
-- (BOOL)hasChild:(NSString *)childPathString;
-
-/**
- * Return YES if the DataSnapshot has any children.
- *
- * @return YES if this snapshot has any children, else NO.
- */
-- (BOOL)hasChildren;
-
-/**
- * Return YES if the DataSnapshot contains a non-null value.
- *
- * @return YES if this snapshot contains a non-null value, else NO.
- */
-- (BOOL)exists;
-
-#pragma mark - Data export
-
-/**
- * Returns the raw value at this location, coupled with any metadata, such as
- * priority.
- *
- * Priorities, where they exist, are accessible under the ".priority" key in
- * instances of NSDictionary. For leaf locations with priorities, the value will
- * be under the ".value" key.
- */
-- (id __nullable)valueInExportFormat;
-
-#pragma mark - Properties
-
-/**
- * Returns the contents of this data snapshot as native types.
- *
- * Data types returned:
- * + NSDictionary
- * + NSArray
- * + NSNumber (also includes booleans)
- * + NSString
- *
- * @return The data as a native object.
- */
-@property(strong, readonly, nonatomic, nullable) id value;
-
-/**
- * Gets the number of children for this DataSnapshot.
- *
- * @return An integer indicating the number of children.
- */
-@property(readonly, nonatomic) NSUInteger childrenCount;
-
-/**
- * Gets a FIRDatabaseReference for the location that this data came from.
- *
- * @return A FIRDatabaseReference instance for the location of this data.
- */
-@property(nonatomic, readonly, strong) FIRDatabaseReference *ref;
-
-/**
- * The key of the location that generated this FIRDataSnapshot.
- *
- * @return An NSString containing the key for the location of this
- * FIRDataSnapshot.
- */
-@property(strong, readonly, nonatomic) NSString *key;
-
-/**
- * An iterator for snapshots of the child nodes in this snapshot.
- * You can use the native for..in syntax:
- *
- * for (FIRDataSnapshot* child in snapshot.children) {
- *     ...
- * }
- *
- * @return An NSEnumerator of the children.
- */
-@property(strong, readonly, nonatomic)
-    NSEnumerator<FIRDataSnapshot *> *children;
-
-/**
- * The priority of the data in this FIRDataSnapshot.
- *
- * @return The priority as a string, or nil if no priority was set.
- */
-@property(strong, readonly, nonatomic, nullable) id priority;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRDatabase.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRDatabase.h
deleted file mode 100644
index 02af8c7..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRDatabase.h
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FIRDatabaseReference.h"
-#import <Foundation/Foundation.h>
-
-@class FIRApp;
-
-NS_ASSUME_NONNULL_BEGIN
-
-/**
- * The entry point for accessing a Firebase Database.  You can get an instance
- * by calling [FIRDatabase database]. To access a location in the database and
- * read or write data, use [FIRDatabase reference].
- */
-NS_SWIFT_NAME(Database)
-@interface FIRDatabase : NSObject
-
-/**
- * The NSObject initializer that has been marked as unavailable. Use the
- * `database` method instead
- *
- * @return An instancetype instance
- */
-- (instancetype)init
-    __attribute__((unavailable("use the database method instead")));
-
-/**
- * Gets the instance of FIRDatabase for the default FIRApp.
- *
- * @return A FIRDatabase instance.
- */
-+ (FIRDatabase *)database NS_SWIFT_NAME(database());
-
-/**
- * Gets a FirebaseDatabase instance for the specified URL.
- *
- * @param url The URL to the Firebase Database instance you want to access.
- * @return A FIRDatabase instance.
- */
-+ (FIRDatabase *)databaseWithURL:(NSString *)url NS_SWIFT_NAME(database(url:));
-
-/**
- * Gets a FirebaseDatabase instance for the specified URL, using the specified
- * FirebaseApp.
- *
- * @param app The FIRApp to get a FIRDatabase for.
- * @param url The URL to the Firebase Database instance you want to access.
- * @return A FIRDatabase instance.
- */
-// clang-format off
-+ (FIRDatabase *)databaseForApp:(FIRApp *)app
-                            URL:(NSString *)url NS_SWIFT_NAME(database(app:url:));
-// clang-format on
-
-/**
- * Gets an instance of FIRDatabase for a specific FIRApp.
- *
- * @param app The FIRApp to get a FIRDatabase for.
- * @return A FIRDatabase instance.
- */
-+ (FIRDatabase *)databaseForApp:(FIRApp *)app NS_SWIFT_NAME(database(app:));
-
-/** The FIRApp instance to which this FIRDatabase belongs. */
-@property(weak, readonly, nonatomic) FIRApp *app;
-
-/**
- * Gets a FIRDatabaseReference for the root of your Firebase Database.
- */
-- (FIRDatabaseReference *)reference;
-
-/**
- * Gets a FIRDatabaseReference for the provided path.
- *
- * @param path Path to a location in your Firebase Database.
- * @return A FIRDatabaseReference pointing to the specified path.
- */
-- (FIRDatabaseReference *)referenceWithPath:(NSString *)path;
-
-/**
- * Gets a FIRDatabaseReference for the provided URL.  The URL must be a URL to a
- * path within this Firebase Database.  To create a FIRDatabaseReference to a
- * different database, create a FIRApp} with a FIROptions object configured with
- * the appropriate database URL.
- *
- * @param databaseUrl A URL to a path within your database.
- * @return A FIRDatabaseReference for the provided URL.
- */
-- (FIRDatabaseReference *)referenceFromURL:(NSString *)databaseUrl;
-
-/**
- * The Firebase Database client automatically queues writes and sends them to
- * the server at the earliest opportunity, depending on network connectivity. In
- * some cases (e.g. offline usage) there may be a large number of writes waiting
- * to be sent. Calling this method will purge all outstanding writes so they are
- * abandoned.
- *
- * All writes will be purged, including transactions and onDisconnect writes.
- * The writes will be rolled back locally, perhaps triggering events for
- * affected event listeners, and the client will not (re-)send them to the
- * Firebase Database backend.
- */
-- (void)purgeOutstandingWrites;
-
-/**
- * Shuts down our connection to the Firebase Database backend until goOnline is
- * called.
- */
-- (void)goOffline;
-
-/**
- * Resumes our connection to the Firebase Database backend after a previous
- * goOffline call.
- */
-- (void)goOnline;
-
-/**
- * The Firebase Database client will cache synchronized data and keep track of
- * all writes you've initiated while your application is running. It seamlessly
- * handles intermittent network connections and re-sends write operations when
- * the network connection is restored.
- *
- * However by default your write operations and cached data are only stored
- * in-memory and will be lost when your app restarts.  By setting this value to
- * `YES`, the data will be persisted to on-device (disk) storage and will thus
- * be available again when the app is restarted (even when there is no network
- * connectivity at that time). Note that this property must be set before
- * creating your first Database reference and only needs to be called once per
- * application.
- *
- */
-@property(nonatomic) BOOL persistenceEnabled NS_SWIFT_NAME(isPersistenceEnabled)
-    ;
-
-/**
- * By default the Firebase Database client will use up to 10MB of disk space to
- * cache data. If the cache grows beyond this size, the client will start
- * removing data that hasn't been recently used. If you find that your
- * application caches too little or too much data, call this method to change
- * the cache size. This property must be set before creating your first
- * FIRDatabaseReference and only needs to be called once per application.
- *
- * Note that the specified cache size is only an approximation and the size on
- * disk may temporarily exceed it at times. Cache sizes smaller than 1 MB or
- * greater than 100 MB are not supported.
- */
-@property(nonatomic) NSUInteger persistenceCacheSizeBytes;
-
-/**
- * Sets the dispatch queue on which all events are raised. The default queue is
- * the main queue.
- *
- * Note that this must be set before creating your first Database reference.
- */
-@property(nonatomic, strong) dispatch_queue_t callbackQueue;
-
-/**
- * Enables verbose diagnostic logging.
- *
- * @param enabled YES to enable logging, NO to disable.
- */
-+ (void)setLoggingEnabled:(BOOL)enabled;
-
-/** Retrieve the Firebase Database SDK version. */
-+ (NSString *)sdkVersion;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRDatabaseQuery.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRDatabaseQuery.h
deleted file mode 100644
index 82057aa..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRDatabaseQuery.h
+++ /dev/null
@@ -1,395 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FIRDataEventType.h"
-#import "FIRDataSnapshot.h"
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-/**
- * A FIRDatabaseHandle is used to identify listeners of Firebase Database
- * events. These handles are returned by observeEventType: and can later be
- * passed to removeObserverWithHandle: to stop receiving updates.
- */
-typedef NSUInteger FIRDatabaseHandle NS_SWIFT_NAME(DatabaseHandle);
-
-/**
- * A FIRDatabaseQuery instance represents a query over the data at a particular
- * location.
- *
- * You create one by calling one of the query methods (queryOrderedByChild:,
- * queryStartingAtValue:, etc.) on a FIRDatabaseReference. The query methods can
- * be chained to further specify the data you are interested in observing
- */
-NS_SWIFT_NAME(DatabaseQuery)
-@interface FIRDatabaseQuery : NSObject
-
-#pragma mark - Attach observers to read data
-
-/**
- * observeEventType:withBlock: is used to listen for data changes at a
- * particular location. This is the primary way to read data from the Firebase
- * Database. Your block will be triggered for the initial data and again
- * whenever the data changes.
- *
- * Use removeObserverWithHandle: to stop receiving updates.
- *
- * @param eventType The type of event to listen for.
- * @param block The block that should be called with initial data and updates.
- * It is passed the data as a FIRDataSnapshot.
- * @return A handle used to unregister this block later using
- * removeObserverWithHandle:
- */
-- (FIRDatabaseHandle)observeEventType:(FIRDataEventType)eventType
-                            withBlock:
-                                (void (^)(FIRDataSnapshot *snapshot))block;
-
-/**
- * observeEventType:andPreviousSiblingKeyWithBlock: is used to listen for data
- * changes at a particular location. This is the primary way to read data from
- * the Firebase Database. Your block will be triggered for the initial data and
- * again whenever the data changes. In addition, for FIRDataEventTypeChildAdded,
- * FIRDataEventTypeChildMoved, and FIRDataEventTypeChildChanged events, your
- * block will be passed the key of the previous node by priority order.
- *
- * Use removeObserverWithHandle: to stop receiving updates.
- *
- * @param eventType The type of event to listen for.
- * @param block The block that should be called with initial data and updates.
- * It is passed the data as a FIRDataSnapshot and the previous child's key.
- * @return A handle used to unregister this block later using
- * removeObserverWithHandle:
- */
-- (FIRDatabaseHandle)observeEventType:(FIRDataEventType)eventType
-       andPreviousSiblingKeyWithBlock:
-           (void (^)(FIRDataSnapshot *snapshot,
-                     NSString *__nullable prevKey))block;
-
-/**
- * observeEventType:withBlock: is used to listen for data changes at a
- * particular location. This is the primary way to read data from the Firebase
- * Database. Your block will be triggered for the initial data and again
- * whenever the data changes.
- *
- * The cancelBlock will be called if you will no longer receive new events due
- * to no longer having permission.
- *
- * Use removeObserverWithHandle: to stop receiving updates.
- *
- * @param eventType The type of event to listen for.
- * @param block The block that should be called with initial data and updates.
- * It is passed the data as a FIRDataSnapshot.
- * @param cancelBlock The block that should be called if this client no longer
- * has permission to receive these events
- * @return A handle used to unregister this block later using
- * removeObserverWithHandle:
- */
-- (FIRDatabaseHandle)observeEventType:(FIRDataEventType)eventType
-                            withBlock:(void (^)(FIRDataSnapshot *snapshot))block
-                      withCancelBlock:
-                          (nullable void (^)(NSError *error))cancelBlock;
-
-/**
- * observeEventType:andPreviousSiblingKeyWithBlock: is used to listen for data
- * changes at a particular location. This is the primary way to read data from
- * the Firebase Database. Your block will be triggered for the initial data and
- * again whenever the data changes. In addition, for FIRDataEventTypeChildAdded,
- * FIRDataEventTypeChildMoved, and FIRDataEventTypeChildChanged events, your
- * block will be passed the key of the previous node by priority order.
- *
- * The cancelBlock will be called if you will no longer receive new events due
- * to no longer having permission.
- *
- * Use removeObserverWithHandle: to stop receiving updates.
- *
- * @param eventType The type of event to listen for.
- * @param block The block that should be called with initial data and updates.
- * It is passed the data as a FIRDataSnapshot and the previous child's key.
- * @param cancelBlock The block that should be called if this client no longer
- * has permission to receive these events
- * @return A handle used to unregister this block later using
- * removeObserverWithHandle:
- */
-- (FIRDatabaseHandle)observeEventType:(FIRDataEventType)eventType
-       andPreviousSiblingKeyWithBlock:
-           (void (^)(FIRDataSnapshot *snapshot,
-                     NSString *__nullable prevKey))block
-                      withCancelBlock:
-                          (nullable void (^)(NSError *error))cancelBlock;
-
-/**
- * This is equivalent to observeEventType:withBlock:, except the block is
- * immediately canceled after the initial data is returned.
- *
- * @param eventType The type of event to listen for.
- * @param block The block that should be called.  It is passed the data as a
- * FIRDataSnapshot.
- */
-- (void)observeSingleEventOfType:(FIRDataEventType)eventType
-                       withBlock:(void (^)(FIRDataSnapshot *snapshot))block;
-
-/**
- * This is equivalent to observeEventType:withBlock:, except the block is
- * immediately canceled after the initial data is returned. In addition, for
- * FIRDataEventTypeChildAdded, FIRDataEventTypeChildMoved, and
- * FIRDataEventTypeChildChanged events, your block will be passed the key of the
- * previous node by priority order.
- *
- * @param eventType The type of event to listen for.
- * @param block The block that should be called.  It is passed the data as a
- * FIRDataSnapshot and the previous child's key.
- */
-- (void)observeSingleEventOfType:(FIRDataEventType)eventType
-    andPreviousSiblingKeyWithBlock:
-        (void (^)(FIRDataSnapshot *snapshot,
-                  NSString *__nullable prevKey))block;
-
-/**
- * This is equivalent to observeEventType:withBlock:, except the block is
- * immediately canceled after the initial data is returned.
- *
- * The cancelBlock will be called if you do not have permission to read data at
- * this location.
- *
- * @param eventType The type of event to listen for.
- * @param block The block that should be called.  It is passed the data as a
- * FIRDataSnapshot.
- * @param cancelBlock The block that will be called if you don't have permission
- * to access this data
- */
-- (void)observeSingleEventOfType:(FIRDataEventType)eventType
-                       withBlock:(void (^)(FIRDataSnapshot *snapshot))block
-                 withCancelBlock:(nullable void (^)(NSError *error))cancelBlock;
-
-/**
- * This is equivalent to observeEventType:withBlock:, except the block is
- * immediately canceled after the initial data is returned. In addition, for
- * FIRDataEventTypeChildAdded, FIRDataEventTypeChildMoved, and
- * FIRDataEventTypeChildChanged events, your block will be passed the key of the
- * previous node by priority order.
- *
- * The cancelBlock will be called if you do not have permission to read data at
- * this location.
- *
- * @param eventType The type of event to listen for.
- * @param block The block that should be called.  It is passed the data as a
- * FIRDataSnapshot and the previous child's key.
- * @param cancelBlock The block that will be called if you don't have permission
- * to access this data
- */
-- (void)observeSingleEventOfType:(FIRDataEventType)eventType
-    andPreviousSiblingKeyWithBlock:(void (^)(FIRDataSnapshot *snapshot,
-                                             NSString *__nullable prevKey))block
-                   withCancelBlock:
-                       (nullable void (^)(NSError *error))cancelBlock;
-
-#pragma mark - Detaching observers
-
-/**
- * Detach a block previously attached with observeEventType:withBlock:.
- *
- * @param handle The handle returned by the call to observeEventType:withBlock:
- * which we are trying to remove.
- */
-- (void)removeObserverWithHandle:(FIRDatabaseHandle)handle;
-
-/**
- * Detach all blocks previously attached to this Firebase Database location with
- * observeEventType:withBlock:
- */
-- (void)removeAllObservers;
-
-/**
- * By calling `keepSynced:YES` on a location, the data for that location will
- * automatically be downloaded and kept in sync, even when no listeners are
- * attached for that location. Additionally, while a location is kept synced, it
- * will not be evicted from the persistent disk cache.
- *
- * @param keepSynced Pass YES to keep this location synchronized, pass NO to
- * stop synchronization.
- */
-- (void)keepSynced:(BOOL)keepSynced;
-
-#pragma mark - Querying and limiting
-
-/**
- * queryLimitedToFirst: is used to generate a reference to a limited view of the
- * data at this location. The FIRDatabaseQuery instance returned by
- * queryLimitedToFirst: will respond to at most the first limit child nodes.
- *
- * @param limit The upper bound, inclusive, for the number of child nodes to
- * receive events for
- * @return A FIRDatabaseQuery instance, limited to at most limit child nodes.
- */
-- (FIRDatabaseQuery *)queryLimitedToFirst:(NSUInteger)limit;
-
-/**
- * queryLimitedToLast: is used to generate a reference to a limited view of the
- * data at this location. The FIRDatabaseQuery instance returned by
- * queryLimitedToLast: will respond to at most the last limit child nodes.
- *
- * @param limit The upper bound, inclusive, for the number of child nodes to
- * receive events for
- * @return A FIRDatabaseQuery instance, limited to at most limit child nodes.
- */
-- (FIRDatabaseQuery *)queryLimitedToLast:(NSUInteger)limit;
-
-/**
- * queryOrderBy: is used to generate a reference to a view of the data that's
- * been sorted by the values of a particular child key. This method is intended
- * to be used in combination with queryStartingAtValue:, queryEndingAtValue:, or
- * queryEqualToValue:.
- *
- * @param key The child key to use in ordering data visible to the returned
- * FIRDatabaseQuery
- * @return A FIRDatabaseQuery instance, ordered by the values of the specified
- * child key.
- */
-- (FIRDatabaseQuery *)queryOrderedByChild:(NSString *)key;
-
-/**
- * queryOrderedByKey: is used to generate a reference to a view of the data
- * that's been sorted by child key. This method is intended to be used in
- * combination with queryStartingAtValue:, queryEndingAtValue:, or
- * queryEqualToValue:.
- *
- * @return A FIRDatabaseQuery instance, ordered by child keys.
- */
-- (FIRDatabaseQuery *)queryOrderedByKey;
-
-/**
- * queryOrderedByValue: is used to generate a reference to a view of the data
- * that's been sorted by child value. This method is intended to be used in
- * combination with queryStartingAtValue:, queryEndingAtValue:, or
- * queryEqualToValue:.
- *
- * @return A FIRDatabaseQuery instance, ordered by child value.
- */
-- (FIRDatabaseQuery *)queryOrderedByValue;
-
-/**
- * queryOrderedByPriority: is used to generate a reference to a view of the data
- * that's been sorted by child priority. This method is intended to be used in
- * combination with queryStartingAtValue:, queryEndingAtValue:, or
- * queryEqualToValue:.
- *
- * @return A FIRDatabaseQuery instance, ordered by child priorities.
- */
-- (FIRDatabaseQuery *)queryOrderedByPriority;
-
-/**
- * queryStartingAtValue: is used to generate a reference to a limited view of
- * the data at this location. The FIRDatabaseQuery instance returned by
- * queryStartingAtValue: will respond to events at nodes with a value greater
- * than or equal to startValue.
- *
- * @param startValue The lower bound, inclusive, for the value of data visible
- * to the returned FIRDatabaseQuery
- * @return A FIRDatabaseQuery instance, limited to data with value greater than
- * or equal to startValue
- */
-- (FIRDatabaseQuery *)queryStartingAtValue:(nullable id)startValue;
-
-/**
- * queryStartingAtValue:childKey: is used to generate a reference to a limited
- * view of the data at this location. The FIRDatabaseQuery instance returned by
- * queryStartingAtValue:childKey will respond to events at nodes with a value
- * greater than startValue, or equal to startValue and with a key greater than
- * or equal to childKey. This is most useful when implementing pagination in a
- * case where multiple nodes can match the startValue.
- *
- * @param startValue The lower bound, inclusive, for the value of data visible
- * to the returned FIRDatabaseQuery
- * @param childKey The lower bound, inclusive, for the key of nodes with value
- * equal to startValue
- * @return A FIRDatabaseQuery instance, limited to data with value greater than
- * or equal to startValue
- */
-- (FIRDatabaseQuery *)queryStartingAtValue:(nullable id)startValue
-                                  childKey:(nullable NSString *)childKey;
-
-/**
- * queryEndingAtValue: is used to generate a reference to a limited view of the
- * data at this location. The FIRDatabaseQuery instance returned by
- * queryEndingAtValue: will respond to events at nodes with a value less than or
- * equal to endValue.
- *
- * @param endValue The upper bound, inclusive, for the value of data visible to
- * the returned FIRDatabaseQuery
- * @return A FIRDatabaseQuery instance, limited to data with value less than or
- * equal to endValue
- */
-- (FIRDatabaseQuery *)queryEndingAtValue:(nullable id)endValue;
-
-/**
- * queryEndingAtValue:childKey: is used to generate a reference to a limited
- * view of the data at this location. The FIRDatabaseQuery instance returned by
- * queryEndingAtValue:childKey will respond to events at nodes with a value less
- * than endValue, or equal to endValue and with a key less than or equal to
- * childKey. This is most useful when implementing pagination in a case where
- * multiple nodes can match the endValue.
- *
- * @param endValue The upper bound, inclusive, for the value of data visible to
- * the returned FIRDatabaseQuery
- * @param childKey The upper bound, inclusive, for the key of nodes with value
- * equal to endValue
- * @return A FIRDatabaseQuery instance, limited to data with value less than or
- * equal to endValue
- */
-- (FIRDatabaseQuery *)queryEndingAtValue:(nullable id)endValue
-                                childKey:(nullable NSString *)childKey;
-
-/**
- * queryEqualToValue: is used to generate a reference to a limited view of the
- * data at this location. The FIRDatabaseQuery instance returned by
- * queryEqualToValue: will respond to events at nodes with a value equal to the
- * supplied argument.
- *
- * @param value The value that the data returned by this FIRDatabaseQuery will
- * have
- * @return A FIRDatabaseQuery instance, limited to data with the supplied value.
- */
-- (FIRDatabaseQuery *)queryEqualToValue:(nullable id)value;
-
-/**
- * queryEqualToValue:childKey: is used to generate a reference to a limited view
- * of the data at this location. The FIRDatabaseQuery instance returned by
- * queryEqualToValue:childKey will respond to events at nodes with a value equal
- * to the supplied argument and with their key equal to childKey. There will be
- * at most one node that matches because child keys are unique.
- *
- * @param value The value that the data returned by this FIRDatabaseQuery will
- * have
- * @param childKey The name of nodes with the right value
- * @return A FIRDatabaseQuery instance, limited to data with the supplied value
- * and the key.
- */
-- (FIRDatabaseQuery *)queryEqualToValue:(nullable id)value
-                               childKey:(nullable NSString *)childKey;
-
-#pragma mark - Properties
-
-/**
- * Gets a FIRDatabaseReference for the location of this query.
- *
- * @return A FIRDatabaseReference for the location of this query.
- */
-@property(nonatomic, readonly, strong) FIRDatabaseReference *ref;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRDatabaseReference.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRDatabaseReference.h
deleted file mode 100644
index c80b2f8..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRDatabaseReference.h
+++ /dev/null
@@ -1,861 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FIRDataSnapshot.h"
-#import "FIRDatabase.h"
-#import "FIRDatabaseQuery.h"
-#import "FIRMutableData.h"
-#import "FIRServerValue.h"
-#import "FIRTransactionResult.h"
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-@class FIRDatabase;
-
-/**
- * A FIRDatabaseReference represents a particular location in your Firebase
- * Database and can be used for reading or writing data to that Firebase
- * Database location.
- *
- * This class is the starting point for all Firebase Database operations. After
- * you've obtained your first FIRDatabaseReference via [FIRDatabase reference],
- * you can use it to read data (ie. observeEventType:withBlock:), write data
- * (ie. setValue:), and to create new FIRDatabaseReferences (ie. child:).
- */
-NS_SWIFT_NAME(DatabaseReference)
-@interface FIRDatabaseReference : FIRDatabaseQuery
-
-#pragma mark - Getting references to children locations
-
-/**
- * Gets a FIRDatabaseReference for the location at the specified relative path.
- * The relative path can either be a simple child key (e.g. 'fred') or a
- * deeper slash-separated path (e.g. 'fred/name/first').
- *
- * @param pathString A relative path from this location to the desired child
- * location.
- * @return A FIRDatabaseReference for the specified relative path.
- */
-- (FIRDatabaseReference *)child:(NSString *)pathString;
-
-/**
- * childByAutoId generates a new child location using a unique key and returns a
- * FIRDatabaseReference to it. This is useful when the children of a Firebase
- * Database location represent a list of items.
- *
- * The unique key generated by childByAutoId: is prefixed with a
- * client-generated timestamp so that the resulting list will be
- * chronologically-sorted.
- *
- * @return A FIRDatabaseReference for the generated location.
- */
-- (FIRDatabaseReference *)childByAutoId;
-
-#pragma mark - Writing data
-
-/** Write data to this Firebase Database location.
-
-This will overwrite any data at this location and all child locations.
-
-Data types that can be set are:
-
-- NSString -- @"Hello World"
-- NSNumber (also includes boolean) -- @YES, @43, @4.333
-- NSDictionary -- @{@"key": @"value", @"nested": @{@"another": @"value"} }
-- NSArray
-
-The effect of the write will be visible immediately and the corresponding
-events will be triggered. Synchronization of the data to the Firebase Database
-servers will also be started.
-
-Passing null for the new value is equivalent to calling remove:;
-all data at this location or any child location will be deleted.
-
-Note that setValue: will remove any priority stored at this location, so if
-priority is meant to be preserved, you should use setValue:andPriority: instead.
-
-@param value The value to be written.
- */
-- (void)setValue:(nullable id)value;
-
-/**
- * The same as setValue: with a block that gets triggered after the write
- * operation has been committed to the Firebase Database servers.
- *
- * @param value The value to be written.
- * @param block The block to be called after the write has been committed to the
- * Firebase Database servers.
- */
-- (void)setValue:(nullable id)value
-    withCompletionBlock:
-        (void (^)(NSError *__nullable error, FIRDatabaseReference *ref))block;
-
-/**
- * The same as setValue: with an additional priority to be attached to the data
- * being written. Priorities are used to order items.
- *
- * @param value The value to be written.
- * @param priority The priority to be attached to that data.
- */
-- (void)setValue:(nullable id)value andPriority:(nullable id)priority;
-
-/**
- * The same as setValue:andPriority: with a block that gets triggered after the
- * write operation has been committed to the Firebase Database servers.
- *
- * @param value The value to be written.
- * @param priority The priority to be attached to that data.
- * @param block The block to be called after the write has been committed to the
- * Firebase Database servers.
- */
-- (void)setValue:(nullable id)value
-            andPriority:(nullable id)priority
-    withCompletionBlock:
-        (void (^)(NSError *__nullable error, FIRDatabaseReference *ref))block;
-
-/**
- * Remove the data at this Firebase Database location. Any data at child
- * locations will also be deleted.
- *
- * The effect of the delete will be visible immediately and the corresponding
- * events will be triggered. Synchronization of the delete to the Firebase
- * Database servers will also be started.
- *
- * remove: is equivalent to calling setValue:nil
- */
-- (void)removeValue;
-
-/**
- * The same as remove: with a block that gets triggered after the remove
- * operation has been committed to the Firebase Database servers.
- *
- * @param block The block to be called after the remove has been committed to
- * the Firebase Database servers.
- */
-- (void)removeValueWithCompletionBlock:
-    (void (^)(NSError *__nullable error, FIRDatabaseReference *ref))block;
-
-/**
- * Sets a priority for the data at this Firebase Database location.
- * Priorities can be used to provide a custom ordering for the children at a
- * location (if no priorities are specified, the children are ordered by key).
- *
- * You cannot set a priority on an empty location. For this reason
- * setValue:andPriority: should be used when setting initial data with a
- * specific priority and setPriority: should be used when updating the priority
- * of existing data.
- *
- * Children are sorted based on this priority using the following rules:
- *
- * Children with no priority come first.
- * Children with a number as their priority come next. They are sorted
- * numerically by priority (small to large). Children with a string as their
- * priority come last. They are sorted lexicographically by priority. Whenever
- * two children have the same priority (including no priority), they are sorted
- * by key. Numeric keys come first (sorted numerically), followed by the
- * remaining keys (sorted lexicographically).
- *
- * Note that priorities are parsed and ordered as IEEE 754 double-precision
- * floating-point numbers. Keys are always stored as strings and are treated as
- * numbers only when they can be parsed as a 32-bit integer
- *
- * @param priority The priority to set at the specified location.
- */
-- (void)setPriority:(nullable id)priority;
-
-/**
- * The same as setPriority: with a block that is called once the priority has
- * been committed to the Firebase Database servers.
- *
- * @param priority The priority to set at the specified location.
- * @param block The block that is triggered after the priority has been written
- * on the servers.
- */
-- (void)setPriority:(nullable id)priority
-    withCompletionBlock:
-        (void (^)(NSError *__nullable error, FIRDatabaseReference *ref))block;
-
-/**
- * Updates the values at the specified paths in the dictionary without
- * overwriting other keys at this location.
- *
- * @param values A dictionary of the keys to change and their new values
- */
-- (void)updateChildValues:(NSDictionary *)values;
-
-/**
- * The same as update: with a block that is called once the update has been
- * committed to the Firebase Database servers
- *
- * @param values A dictionary of the keys to change and their new values
- * @param block The block that is triggered after the update has been written on
- * the Firebase Database servers
- */
-- (void)updateChildValues:(NSDictionary *)values
-      withCompletionBlock:
-          (void (^)(NSError *__nullable error, FIRDatabaseReference *ref))block;
-
-#pragma mark - Attaching observers to read data
-
-/**
- * observeEventType:withBlock: is used to listen for data changes at a
- * particular location. This is the primary way to read data from the Firebase
- * Database. Your block will be triggered for the initial data and again
- * whenever the data changes.
- *
- * Use removeObserverWithHandle: to stop receiving updates.
- * @param eventType The type of event to listen for.
- * @param block The block that should be called with initial data and updates.
- * It is passed the data as a FIRDataSnapshot.
- * @return A handle used to unregister this block later using
- * removeObserverWithHandle:
- */
-- (FIRDatabaseHandle)observeEventType:(FIRDataEventType)eventType
-                            withBlock:
-                                (void (^)(FIRDataSnapshot *snapshot))block;
-
-/**
- * observeEventType:andPreviousSiblingKeyWithBlock: is used to listen for data
- * changes at a particular location. This is the primary way to read data from
- * the Firebase Database. Your block will be triggered for the initial data and
- * again whenever the data changes. In addition, for FIRDataEventTypeChildAdded,
- * FIRDataEventTypeChildMoved, and FIRDataEventTypeChildChanged events, your
- * block will be passed the key of the previous node by priority order.
- *
- * Use removeObserverWithHandle: to stop receiving updates.
- *
- * @param eventType The type of event to listen for.
- * @param block The block that should be called with initial data and updates.
- * It is passed the data as a FIRDataSnapshot and the previous child's key.
- * @return A handle used to unregister this block later using
- * removeObserverWithHandle:
- */
-- (FIRDatabaseHandle)observeEventType:(FIRDataEventType)eventType
-       andPreviousSiblingKeyWithBlock:
-           (void (^)(FIRDataSnapshot *snapshot,
-                     NSString *__nullable prevKey))block;
-
-/**
- * observeEventType:withBlock: is used to listen for data changes at a
- * particular location. This is the primary way to read data from the Firebase
- * Database. Your block will be triggered for the initial data and again
- * whenever the data changes.
- *
- * The cancelBlock will be called if you will no longer receive new events due
- * to no longer having permission.
- *
- * Use removeObserverWithHandle: to stop receiving updates.
- *
- * @param eventType The type of event to listen for.
- * @param block The block that should be called with initial data and updates.
- * It is passed the data as a FIRDataSnapshot.
- * @param cancelBlock The block that should be called if this client no longer
- * has permission to receive these events
- * @return A handle used to unregister this block later using
- * removeObserverWithHandle:
- */
-- (FIRDatabaseHandle)observeEventType:(FIRDataEventType)eventType
-                            withBlock:(void (^)(FIRDataSnapshot *snapshot))block
-                      withCancelBlock:
-                          (nullable void (^)(NSError *error))cancelBlock;
-
-/**
- * observeEventType:andPreviousSiblingKeyWithBlock: is used to listen for data
- * changes at a particular location. This is the primary way to read data from
- * the Firebase Database. Your block will be triggered for the initial data and
- * again whenever the data changes. In addition, for FIRDataEventTypeChildAdded,
- * FIRDataEventTypeChildMoved, and FIRDataEventTypeChildChanged events, your
- * block will be passed the key of the previous node by priority order.
- *
- * The cancelBlock will be called if you will no longer receive new events due
- * to no longer having permission.
- *
- * Use removeObserverWithHandle: to stop receiving updates.
- *
- * @param eventType The type of event to listen for.
- * @param block The block that should be called with initial data and updates.
- * It is passed the data as a FIRDataSnapshot and the previous child's key.
- * @param cancelBlock The block that should be called if this client no longer
- * has permission to receive these events
- * @return A handle used to unregister this block later using
- * removeObserverWithHandle:
- */
-- (FIRDatabaseHandle)observeEventType:(FIRDataEventType)eventType
-       andPreviousSiblingKeyWithBlock:
-           (void (^)(FIRDataSnapshot *snapshot,
-                     NSString *__nullable prevKey))block
-                      withCancelBlock:
-                          (nullable void (^)(NSError *error))cancelBlock;
-
-/**
- * This is equivalent to observeEventType:withBlock:, except the block is
- * immediately canceled after the initial data is returned.
- *
- * @param eventType The type of event to listen for.
- * @param block The block that should be called.  It is passed the data as a
- * FIRDataSnapshot.
- */
-- (void)observeSingleEventOfType:(FIRDataEventType)eventType
-                       withBlock:(void (^)(FIRDataSnapshot *snapshot))block;
-
-/**
- * This is equivalent to observeEventType:withBlock:, except the block is
- * immediately canceled after the initial data is returned. In addition, for
- * FIRDataEventTypeChildAdded, FIRDataEventTypeChildMoved, and
- * FIRDataEventTypeChildChanged events, your block will be passed the key of the
- * previous node by priority order.
- *
- * @param eventType The type of event to listen for.
- * @param block The block that should be called.  It is passed the data as a
- * FIRDataSnapshot and the previous child's key.
- */
-- (void)observeSingleEventOfType:(FIRDataEventType)eventType
-    andPreviousSiblingKeyWithBlock:
-        (void (^)(FIRDataSnapshot *snapshot,
-                  NSString *__nullable prevKey))block;
-
-/**
- * This is equivalent to observeEventType:withBlock:, except the block is
- * immediately canceled after the initial data is returned.
- *
- * The cancelBlock will be called if you do not have permission to read data at
- * this location.
- *
- * @param eventType The type of event to listen for.
- * @param block The block that should be called.  It is passed the data as a
- * FIRDataSnapshot.
- * @param cancelBlock The block that will be called if you don't have permission
- * to access this data
- */
-- (void)observeSingleEventOfType:(FIRDataEventType)eventType
-                       withBlock:(void (^)(FIRDataSnapshot *snapshot))block
-                 withCancelBlock:(nullable void (^)(NSError *error))cancelBlock;
-
-/**
- * This is equivalent to observeEventType:withBlock:, except the block is
- * immediately canceled after the initial data is returned. In addition, for
- * FIRDataEventTypeChildAdded, FIRDataEventTypeChildMoved, and
- * FIRDataEventTypeChildChanged events, your block will be passed the key of the
- * previous node by priority order.
- *
- * The cancelBlock will be called if you do not have permission to read data at
- * this location.
- *
- * @param eventType The type of event to listen for.
- * @param block The block that should be called.  It is passed the data as a
- * FIRDataSnapshot and the previous child's key.
- * @param cancelBlock The block that will be called if you don't have permission
- * to access this data
- */
-- (void)observeSingleEventOfType:(FIRDataEventType)eventType
-    andPreviousSiblingKeyWithBlock:(void (^)(FIRDataSnapshot *snapshot,
-                                             NSString *__nullable prevKey))block
-                   withCancelBlock:
-                       (nullable void (^)(NSError *error))cancelBlock;
-
-#pragma mark - Detaching observers
-
-/**
- * Detach a block previously attached with observeEventType:withBlock:.
- *
- * @param handle The handle returned by the call to observeEventType:withBlock:
- * which we are trying to remove.
- */
-- (void)removeObserverWithHandle:(FIRDatabaseHandle)handle;
-
-/**
- * By calling `keepSynced:YES` on a location, the data for that location will
- * automatically be downloaded and kept in sync, even when no listeners are
- * attached for that location. Additionally, while a location is kept synced, it
- * will not be evicted from the persistent disk cache.
- *
- * @param keepSynced Pass YES to keep this location synchronized, pass NO to
- * stop synchronization.
- */
-- (void)keepSynced:(BOOL)keepSynced;
-
-/**
- * Removes all observers at the current reference, but does not remove any
- * observers at child references. removeAllObservers must be called again for
- * each child reference where a listener was established to remove the
- * observers.
- */
-- (void)removeAllObservers;
-
-#pragma mark - Querying and limiting
-
-/**
- * queryLimitedToFirst: is used to generate a reference to a limited view of the
- * data at this location. The FIRDatabaseQuery instance returned by
- * queryLimitedToFirst: will respond to at most the first limit child nodes.
- *
- * @param limit The upper bound, inclusive, for the number of child nodes to
- * receive events for
- * @return A FIRDatabaseQuery instance, limited to at most limit child nodes.
- */
-- (FIRDatabaseQuery *)queryLimitedToFirst:(NSUInteger)limit;
-
-/**
- * queryLimitedToLast: is used to generate a reference to a limited view of the
- * data at this location. The FIRDatabaseQuery instance returned by
- * queryLimitedToLast: will respond to at most the last limit child nodes.
- *
- * @param limit The upper bound, inclusive, for the number of child nodes to
- * receive events for
- * @return A FIRDatabaseQuery instance, limited to at most limit child nodes.
- */
-- (FIRDatabaseQuery *)queryLimitedToLast:(NSUInteger)limit;
-
-/**
- * queryOrderBy: is used to generate a reference to a view of the data that's
- * been sorted by the values of a particular child key. This method is intended
- * to be used in combination with queryStartingAtValue:, queryEndingAtValue:, or
- * queryEqualToValue:.
- *
- * @param key The child key to use in ordering data visible to the returned
- * FIRDatabaseQuery
- * @return A FIRDatabaseQuery instance, ordered by the values of the specified
- * child key.
- */
-- (FIRDatabaseQuery *)queryOrderedByChild:(NSString *)key;
-
-/**
- * queryOrderedByKey: is used to generate a reference to a view of the data
- * that's been sorted by child key. This method is intended to be used in
- * combination with queryStartingAtValue:, queryEndingAtValue:, or
- * queryEqualToValue:.
- *
- * @return A FIRDatabaseQuery instance, ordered by child keys.
- */
-- (FIRDatabaseQuery *)queryOrderedByKey;
-
-/**
- * queryOrderedByPriority: is used to generate a reference to a view of the data
- * that's been sorted by child priority. This method is intended to be used in
- * combination with queryStartingAtValue:, queryEndingAtValue:, or
- * queryEqualToValue:.
- *
- * @return A FIRDatabaseQuery instance, ordered by child priorities.
- */
-- (FIRDatabaseQuery *)queryOrderedByPriority;
-
-/**
- * queryStartingAtValue: is used to generate a reference to a limited view of
- * the data at this location. The FIRDatabaseQuery instance returned by
- * queryStartingAtValue: will respond to events at nodes with a value greater
- * than or equal to startValue.
- *
- * @param startValue The lower bound, inclusive, for the value of data visible
- * to the returned FIRDatabaseQuery
- * @return A FIRDatabaseQuery instance, limited to data with value greater than
- * or equal to startValue
- */
-- (FIRDatabaseQuery *)queryStartingAtValue:(nullable id)startValue;
-
-/**
- * queryStartingAtValue:childKey: is used to generate a reference to a limited
- * view of the data at this location. The FIRDatabaseQuery instance returned by
- * queryStartingAtValue:childKey will respond to events at nodes with a value
- * greater than startValue, or equal to startValue and with a key greater than
- * or equal to childKey.
- *
- * @param startValue The lower bound, inclusive, for the value of data visible
- * to the returned FIRDatabaseQuery
- * @param childKey The lower bound, inclusive, for the key of nodes with value
- * equal to startValue
- * @return A FIRDatabaseQuery instance, limited to data with value greater than
- * or equal to startValue
- */
-- (FIRDatabaseQuery *)queryStartingAtValue:(nullable id)startValue
-                                  childKey:(nullable NSString *)childKey;
-
-/**
- * queryEndingAtValue: is used to generate a reference to a limited view of the
- * data at this location. The FIRDatabaseQuery instance returned by
- * queryEndingAtValue: will respond to events at nodes with a value less than or
- * equal to endValue.
- *
- * @param endValue The upper bound, inclusive, for the value of data visible to
- * the returned FIRDatabaseQuery
- * @return A FIRDatabaseQuery instance, limited to data with value less than or
- * equal to endValue
- */
-- (FIRDatabaseQuery *)queryEndingAtValue:(nullable id)endValue;
-
-/**
- * queryEndingAtValue:childKey: is used to generate a reference to a limited
- * view of the data at this location. The FIRDatabaseQuery instance returned by
- * queryEndingAtValue:childKey will respond to events at nodes with a value less
- * than endValue, or equal to endValue and with a key less than or equal to
- * childKey.
- *
- * @param endValue The upper bound, inclusive, for the value of data visible to
- * the returned FIRDatabaseQuery
- * @param childKey The upper bound, inclusive, for the key of nodes with value
- * equal to endValue
- * @return A FIRDatabaseQuery instance, limited to data with value less than or
- * equal to endValue
- */
-- (FIRDatabaseQuery *)queryEndingAtValue:(nullable id)endValue
-                                childKey:(nullable NSString *)childKey;
-
-/**
- * queryEqualToValue: is used to generate a reference to a limited view of the
- * data at this location. The FIRDatabaseQuery instance returned by
- * queryEqualToValue: will respond to events at nodes with a value equal to the
- * supplied argument.
- *
- * @param value The value that the data returned by this FIRDatabaseQuery will
- * have
- * @return A FIRDatabaseQuery instance, limited to data with the supplied value.
- */
-- (FIRDatabaseQuery *)queryEqualToValue:(nullable id)value;
-
-/**
- * queryEqualToValue:childKey: is used to generate a reference to a limited view
- * of the data at this location. The FIRDatabaseQuery instance returned by
- * queryEqualToValue:childKey will respond to events at nodes with a value equal
- * to the supplied argument with a key equal to childKey. There will be at most
- * one node that matches because child keys are unique.
- *
- * @param value The value that the data returned by this FIRDatabaseQuery will
- * have
- * @param childKey The key of nodes with the right value
- * @return A FIRDatabaseQuery instance, limited to data with the supplied value
- * and the key.
- */
-- (FIRDatabaseQuery *)queryEqualToValue:(nullable id)value
-                               childKey:(nullable NSString *)childKey;
-
-#pragma mark - Managing presence
-
-/**
- * Ensure the data at this location is set to the specified value when
- * the client is disconnected (due to closing the browser, navigating
- * to a new page, or network issues).
- *
- * onDisconnectSetValue: is especially useful for implementing "presence"
- * systems, where a value should be changed or cleared when a user disconnects
- * so that he appears "offline" to other users.
- *
- * @param value The value to be set after the connection is lost.
- */
-- (void)onDisconnectSetValue:(nullable id)value;
-
-/**
- * Ensure the data at this location is set to the specified value when
- * the client is disconnected (due to closing the browser, navigating
- * to a new page, or network issues).
- *
- * The completion block will be triggered when the operation has been
- * successfully queued up on the Firebase Database servers
- *
- * @param value The value to be set after the connection is lost.
- * @param block Block to be triggered when the operation has been queued up on
- * the Firebase Database servers
- */
-- (void)onDisconnectSetValue:(nullable id)value
-         withCompletionBlock:(void (^)(NSError *__nullable error,
-                                       FIRDatabaseReference *ref))block;
-
-/**
- * Ensure the data at this location is set to the specified value and priority
- * when the client is disconnected (due to closing the browser, navigating to a
- * new page, or network issues).
- *
- * @param value The value to be set after the connection is lost.
- * @param priority The priority to be set after the connection is lost.
- */
-- (void)onDisconnectSetValue:(nullable id)value andPriority:(id)priority;
-
-/**
- * Ensure the data at this location is set to the specified value and priority
- * when the client is disconnected (due to closing the browser, navigating to a
- * new page, or network issues).
- *
- * The completion block will be triggered when the operation has been
- * successfully queued up on the Firebase Database servers
- *
- * @param value The value to be set after the connection is lost.
- * @param priority The priority to be set after the connection is lost.
- * @param block Block to be triggered when the operation has been queued up on
- * the Firebase Database servers
- */
-- (void)onDisconnectSetValue:(nullable id)value
-                 andPriority:(nullable id)priority
-         withCompletionBlock:(void (^)(NSError *__nullable error,
-                                       FIRDatabaseReference *ref))block;
-
-/**
- * Ensure the data at this location is removed when
- * the client is disconnected (due to closing the app, navigating
- * to a new page, or network issues).
- *
- * onDisconnectRemoveValue is especially useful for implementing "presence"
- * systems.
- */
-- (void)onDisconnectRemoveValue;
-
-/**
- * Ensure the data at this location is removed when
- * the client is disconnected (due to closing the app, navigating
- * to a new page, or network issues).
- *
- * onDisconnectRemoveValueWithCompletionBlock: is especially useful for
- * implementing "presence" systems.
- *
- * @param block Block to be triggered when the operation has been queued up on
- * the Firebase Database servers
- */
-- (void)onDisconnectRemoveValueWithCompletionBlock:
-    (void (^)(NSError *__nullable error, FIRDatabaseReference *ref))block;
-
-/**
- * Ensure the data has the specified child values updated when
- * the client is disconnected (due to closing the browser, navigating
- * to a new page, or network issues).
- *
- *
- * @param values A dictionary of child node keys and the values to set them to
- * after the connection is lost.
- */
-- (void)onDisconnectUpdateChildValues:(NSDictionary *)values;
-
-/**
- * Ensure the data has the specified child values updated when
- * the client is disconnected (due to closing the browser, navigating
- * to a new page, or network issues).
- *
- *
- * @param values A dictionary of child node keys and the values to set them to
- * after the connection is lost.
- * @param block A block that will be called once the operation has been queued
- * up on the Firebase Database servers
- */
-- (void)onDisconnectUpdateChildValues:(NSDictionary *)values
-                  withCompletionBlock:
-                      (void (^)(NSError *__nullable error,
-                                FIRDatabaseReference *ref))block;
-
-/**
- * Cancel any operations that are set to run on disconnect. If you previously
- * called onDisconnectSetValue:, onDisconnectRemoveValue:, or
- * onDisconnectUpdateChildValues:, and no longer want the values updated when
- * the connection is lost, call cancelDisconnectOperations:
- */
-- (void)cancelDisconnectOperations;
-
-/**
- * Cancel any operations that are set to run on disconnect. If you previously
- * called onDisconnectSetValue:, onDisconnectRemoveValue:, or
- * onDisconnectUpdateChildValues:, and no longer want the values updated when
- * the connection is lost, call cancelDisconnectOperations:
- *
- * @param block A block that will be triggered once the Firebase Database
- * servers have acknowledged the cancel request.
- */
-- (void)cancelDisconnectOperationsWithCompletionBlock:
-    (nullable void (^)(NSError *__nullable error,
-                       FIRDatabaseReference *ref))block;
-
-#pragma mark - Manual Connection Management
-
-/**
- * Manually disconnect the Firebase Database client from the server and disable
- * automatic reconnection.
- *
- * The Firebase Database client automatically maintains a persistent connection
- * to the Firebase Database server, which will remain active indefinitely and
- * reconnect when disconnected. However, the goOffline( ) and goOnline( )
- * methods may be used to manually control the client connection in cases where
- * a persistent connection is undesirable.
- *
- * While offline, the Firebase Database client will no longer receive data
- * updates from the server. However, all database operations performed locally
- * will continue to immediately fire events, allowing your application to
- * continue behaving normally. Additionally, each operation performed locally
- * will automatically be queued and retried upon reconnection to the Firebase
- * Database server.
- *
- * To reconnect to the Firebase Database server and begin receiving remote
- * events, see goOnline( ). Once the connection is reestablished, the Firebase
- * Database client will transmit the appropriate data and fire the appropriate
- * events so that your client "catches up" automatically.
- *
- * Note: Invoking this method will impact all Firebase Database connections.
- */
-+ (void)goOffline;
-
-/**
- * Manually reestablish a connection to the Firebase Database server and enable
- * automatic reconnection.
- *
- * The Firebase Database client automatically maintains a persistent connection
- * to the Firebase Database server, which will remain active indefinitely and
- * reconnect when disconnected. However, the goOffline( ) and goOnline( )
- * methods may be used to manually control the client connection in cases where
- * a persistent connection is undesirable.
- *
- * This method should be used after invoking goOffline( ) to disable the active
- * connection. Once reconnected, the Firebase Database client will automatically
- * transmit the proper data and fire the appropriate events so that your client
- * "catches up" automatically.
- *
- * To disconnect from the Firebase Database server, see goOffline( ).
- *
- * Note: Invoking this method will impact all Firebase Database connections.
- */
-+ (void)goOnline;
-
-#pragma mark - Transactions
-
-/**
- * Performs an optimistic-concurrency transactional update to the data at this
- * location. Your block will be called with a FIRMutableData instance that
- * contains the current data at this location. Your block should update this
- * data to the value you wish to write to this location, and then return an
- * instance of FIRTransactionResult with the new data.
- *
- * If, when the operation reaches the server, it turns out that this client had
- * stale data, your block will be run again with the latest data from the
- * server.
- *
- * When your block is run, you may decide to abort the transaction by returning
- * [FIRTransactionResult abort].
- *
- * @param block This block receives the current data at this location and must
- * return an instance of FIRTransactionResult
- */
-- (void)runTransactionBlock:
-    (FIRTransactionResult * (^)(FIRMutableData *currentData))block;
-
-/**
- * Performs an optimistic-concurrency transactional update to the data at this
- * location. Your block will be called with a FIRMutableData instance that
- * contains the current data at this location. Your block should update this
- * data to the value you wish to write to this location, and then return an
- * instance of FIRTransactionResult with the new data.
- *
- * If, when the operation reaches the server, it turns out that this client had
- * stale data, your block will be run again with the latest data from the
- * server.
- *
- * When your block is run, you may decide to abort the transaction by returning
- * [FIRTransactionResult abort].
- *
- * @param block This block receives the current data at this location and must
- * return an instance of FIRTransactionResult
- * @param completionBlock This block will be triggered once the transaction is
- * complete, whether it was successful or not. It will indicate if there was an
- * error, whether or not the data was committed, and what the current value of
- * the data at this location is.
- */
-- (void)runTransactionBlock:
-            (FIRTransactionResult * (^)(FIRMutableData *currentData))block
-         andCompletionBlock:
-             (void (^)(NSError *__nullable error, BOOL committed,
-                       FIRDataSnapshot *__nullable snapshot))completionBlock;
-
-/**
- * Performs an optimistic-concurrency transactional update to the data at this
- * location. Your block will be called with a FIRMutableData instance that
- * contains the current data at this location. Your block should update this
- * data to the value you wish to write to this location, and then return an
- * instance of FIRTransactionResult with the new data.
- *
- * If, when the operation reaches the server, it turns out that this client had
- * stale data, your block will be run again with the latest data from the
- * server.
- *
- * When your block is run, you may decide to abort the transaction by return
- * [FIRTransactionResult abort].
- *
- * Since your block may be run multiple times, this client could see several
- * immediate states that don't exist on the server. You can suppress those
- * immediate states until the server confirms the final state of the
- * transaction.
- *
- * @param block This block receives the current data at this location and must
- * return an instance of FIRTransactionResult
- * @param completionBlock This block will be triggered once the transaction is
- * complete, whether it was successful or not. It will indicate if there was an
- * error, whether or not the data was committed, and what the current value of
- * the data at this location is.
- * @param localEvents Set this to NO to suppress events raised for intermediate
- * states, and only get events based on the final state of the transaction.
- */
-- (void)runTransactionBlock:
-            (FIRTransactionResult * (^)(FIRMutableData *currentData))block
-         andCompletionBlock:
-             (nullable void (^)(NSError *__nullable error, BOOL committed,
-                                FIRDataSnapshot *__nullable snapshot))
-                 completionBlock
-            withLocalEvents:(BOOL)localEvents;
-
-#pragma mark - Retrieving String Representation
-
-/**
- * Gets the absolute URL of this Firebase Database location.
- *
- * @return The absolute URL of the referenced Firebase Database location.
- */
-- (NSString *)description;
-
-#pragma mark - Properties
-
-/**
- * Gets a FIRDatabaseReference for the parent location.
- * If this instance refers to the root of your Firebase Database, it has no
- * parent, and therefore parent( ) will return null.
- *
- * @return A FIRDatabaseReference for the parent location.
- */
-@property(strong, readonly, nonatomic, nullable) FIRDatabaseReference *parent;
-
-/**
- * Gets a FIRDatabaseReference for the root location
- *
- * @return A new FIRDatabaseReference to root location.
- */
-@property(strong, readonly, nonatomic) FIRDatabaseReference *root;
-
-/**
- * Gets the last token in a Firebase Database location (e.g. 'fred' in
- * https&#58;//SampleChat.firebaseIO-demo.com/users/fred)
- *
- * @return The key of the location this reference points to.
- */
-@property(strong, readonly, nonatomic, nullable) NSString *key;
-
-/**
- * Gets the URL for the Firebase Database location referenced by this
- * FIRDatabaseReference.
- *
- * @return The url of the location this reference points to.
- */
-@property(strong, readonly, nonatomic) NSString *URL;
-
-/**
- * Gets the FIRDatabase instance associated with this reference.
- *
- * @return The FIRDatabase object for this reference.
- */
-@property(strong, readonly, nonatomic) FIRDatabase *database;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRMutableData.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRMutableData.h
deleted file mode 100644
index 9797a67..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRMutableData.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-/**
- * A FIRMutableData instance is populated with data from a Firebase Database
- * location. When you are using runTransactionBlock:, you will be given an
- * instance containing the current data at that location. Your block will be
- * responsible for updating that instance to the data you wish to save at that
- * location, and then returning using [FIRTransactionResult successWithValue:].
- *
- * To modify the data, set its value property to any of the native types support
- * by Firebase Database:
- *
- * + NSNumber (includes BOOL)
- * + NSDictionary
- * + NSArray
- * + NSString
- * + nil / NSNull to remove the data
- *
- * Note that changes made to a child FIRMutableData instance will be visible to
- * the parent.
- */
-NS_SWIFT_NAME(MutableData)
-@interface FIRMutableData : NSObject
-
-#pragma mark - Inspecting and navigating the data
-
-/**
- * Returns boolean indicating whether this mutable data has children.
- *
- * @return YES if this data contains child nodes.
- */
-- (BOOL)hasChildren;
-
-/**
- * Indicates whether this mutable data has a child at the given path.
- *
- * @param path A path string, consisting either of a single segment, like
- * 'child', or multiple segments, 'a/deeper/child'
- * @return YES if this data contains a child at the specified relative path
- */
-- (BOOL)hasChildAtPath:(NSString *)path;
-
-/**
- * Used to obtain a FIRMutableData instance that encapsulates the data at the
- * given relative path. Note that changes made to the child will be visible to
- * the parent.
- *
- * @param path A path string, consisting either of a single segment, like
- * 'child', or multiple segments, 'a/deeper/child'
- * @return A FIRMutableData instance containing the data at the given path
- */
-- (FIRMutableData *)childDataByAppendingPath:(NSString *)path;
-
-#pragma mark - Properties
-
-/**
- * To modify the data contained by this instance of FIRMutableData, set this to
- * any of the native types supported by Firebase Database:
- *
- * + NSNumber (includes BOOL)
- * + NSDictionary
- * + NSArray
- * + NSString
- * + nil / NSNull to remove the data
- *
- * Note that setting this value will override the priority at this location.
- *
- * @return The current data at this location as a native object
- */
-@property(strong, nonatomic, nullable) id value;
-
-/**
- * Set this property to update the priority of the data at this location. Can be
- * set to the following types:
- *
- * + NSNumber
- * + NSString
- * + nil / NSNull to remove the priority
- *
- * @return The priority of the data at this location
- */
-@property(strong, nonatomic, nullable) id priority;
-
-/**
- * @return The number of child nodes at this location
- */
-@property(readonly, nonatomic) NSUInteger childrenCount;
-
-/**
- * Used to iterate over the children at this location. You can use the native
- * for .. in syntax:
- *
- * for (FIRMutableData* child in data.children) {
- *     ...
- * }
- *
- * Note that this enumerator operates on an immutable copy of the child list.
- * So, you can modify the instance during iteration, but the new additions will
- * not be visible until you get a new enumerator.
- */
-@property(readonly, nonatomic, strong) NSEnumerator<FIRMutableData *> *children;
-
-/**
- * @return The key name of this node, or nil if it is the top-most location
- */
-@property(readonly, nonatomic, strong, nullable) NSString *key;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRServerValue.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRServerValue.h
deleted file mode 100644
index 8a169c7..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRServerValue.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-/**
- * Placeholder values you may write into Firebase Database as a value or
- * priority that will automatically be populated by the Firebase Database
- * server.
- */
-NS_SWIFT_NAME(ServerValue)
-@interface FIRServerValue : NSObject
-
-/**
- * Placeholder value for the number of milliseconds since the Unix epoch
- */
-+ (NSDictionary *)timestamp;
-
-/**
- * Returns a placeholder value that can be used to atomically increment the
- * current database value by the provided delta.
- *
- * The delta must be an long or a double value. If the current value is not an
- * integer or double, or if the data does not yet exist, the transformation will
- * set the data to the delta value. If either of the delta value or the existing
- * data are doubles, both values will be interpreted as doubles. Double
- * arithmetic and representation of double values follow IEEE 754 semantics. If
- * there is positive/negative integer overflow, the sum is calculated as a  a
- * double.
- *
- * @param delta the amount to modify the current value atomically.
- * @return a placeholder value for modifying data atomically server-side.
- */
-+ (NSDictionary *)increment:(NSNumber *)delta NS_SWIFT_NAME(increment(_:));
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRTransactionResult.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRTransactionResult.h
deleted file mode 100644
index 7f5ccc1..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRTransactionResult.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FIRMutableData.h"
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-/**
- * Used for runTransactionBlock:. An FIRTransactionResult instance is a
- * container for the results of the transaction.
- */
-NS_SWIFT_NAME(TransactionResult)
-@interface FIRTransactionResult : NSObject
-
-/**
- * Used for runTransactionBlock:. Indicates that the new value should be saved
- * at this location
- *
- * @param value A FIRMutableData instance containing the new value to be set
- * @return An FIRTransactionResult instance that can be used as a return value
- * from the block given to runTransactionBlock:
- */
-+ (FIRTransactionResult *)successWithValue:(FIRMutableData *)value;
-
-/**
- * Used for runTransactionBlock:. Indicates that the current transaction should
- * no longer proceed.
- *
- * @return An FIRTransactionResult instance that can be used as a return value
- * from the block given to runTransactionBlock:
- */
-+ (FIRTransactionResult *)abort;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FirebaseDatabase.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FirebaseDatabase.h
deleted file mode 100644
index ae6b933..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FirebaseDatabase.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef FirebaseDatabase_h
-#define FirebaseDatabase_h
-
-#import "FIRDataEventType.h"
-#import "FIRDataSnapshot.h"
-#import "FIRDatabase.h"
-#import "FIRDatabaseQuery.h"
-#import "FIRDatabaseReference.h"
-#import "FIRMutableData.h"
-#import "FIRServerValue.h"
-#import "FIRTransactionResult.h"
-
-#endif /* FirebaseDatabase_h */
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Realtime/FConnection.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Realtime/FConnection.h
deleted file mode 100644
index 7198615..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Realtime/FConnection.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FTypedefs.h"
-#import "FWebSocketConnection.h"
-#import <Foundation/Foundation.h>
-
-@protocol FConnectionDelegate;
-
-@interface FConnection : NSObject <FWebSocketDelegate>
-
-@property(nonatomic, weak) id<FConnectionDelegate> delegate;
-
-- (id)initWith:(FRepoInfo *)aRepoInfo
-    andDispatchQueue:(dispatch_queue_t)queue
-       lastSessionID:(NSString *)lastSessionID;
-
-- (void)open;
-- (void)close;
-- (void)sendRequest:(NSDictionary *)dataMsg sensitive:(BOOL)sensitive;
-
-// FWebSocketDelegate delegate methods
-- (void)onMessage:(FWebSocketConnection *)fwebSocket
-      withMessage:(NSDictionary *)message;
-- (void)onDisconnect:(FWebSocketConnection *)fwebSocket
-    wasEverConnected:(BOOL)everConnected;
-
-@end
-
-typedef enum {
-    DISCONNECT_REASON_SERVER_RESET = 0,
-    DISCONNECT_REASON_OTHER = 1
-} FDisconnectReason;
-
-@protocol FConnectionDelegate <NSObject>
-
-- (void)onReady:(FConnection *)fconnection
-         atTime:(NSNumber *)timestamp
-      sessionID:(NSString *)sessionID;
-- (void)onDataMessage:(FConnection *)fconnection
-          withMessage:(NSDictionary *)message;
-- (void)onDisconnect:(FConnection *)fconnection
-          withReason:(FDisconnectReason)reason;
-- (void)onKill:(FConnection *)fconnection withReason:(NSString *)reason;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Realtime/FConnection.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Realtime/FConnection.m
deleted file mode 100644
index a33ebd7..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Realtime/FConnection.m
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FConnection.h"
-#import "FConstants.h"
-#import <FirebaseCore/FIRLogger.h>
-
-typedef enum {
-    REALTIME_STATE_CONNECTING = 0,
-    REALTIME_STATE_CONNECTED = 1,
-    REALTIME_STATE_DISCONNECTED = 2,
-} FConnectionState;
-
-@interface FConnection () {
-    FConnectionState state;
-}
-
-@property(nonatomic, strong) FWebSocketConnection *conn;
-@property(nonatomic, strong) FRepoInfo *repoInfo;
-
-@end
-
-#pragma mark -
-#pragma mark FConnection implementation
-
-@implementation FConnection
-
-@synthesize delegate;
-@synthesize conn;
-@synthesize repoInfo;
-
-#pragma mark -
-#pragma mark Initializers
-
-- (id)initWith:(FRepoInfo *)aRepoInfo
-    andDispatchQueue:(dispatch_queue_t)queue
-       lastSessionID:(NSString *)lastSessionID {
-    self = [super init];
-    if (self) {
-        state = REALTIME_STATE_CONNECTING;
-        self.repoInfo = aRepoInfo;
-        self.conn = [[FWebSocketConnection alloc] initWith:self.repoInfo
-                                                  andQueue:queue
-                                             lastSessionID:lastSessionID];
-        self.conn.delegate = self;
-    }
-    return self;
-}
-
-#pragma mark -
-#pragma mark Public method implementation
-
-- (void)open {
-    FFLog(@"I-RDB082001", @"Calling open in FConnection");
-    [self.conn open];
-}
-
-- (void)closeWithReason:(FDisconnectReason)reason {
-    if (state != REALTIME_STATE_DISCONNECTED) {
-        FFLog(@"I-RDB082002", @"Closing realtime connection.");
-        state = REALTIME_STATE_DISCONNECTED;
-
-        if (self.conn) {
-            FFLog(@"I-RDB082003", @"Calling close again.");
-            [self.conn close];
-            self.conn = nil;
-        }
-
-        [self.delegate onDisconnect:self withReason:reason];
-    }
-}
-
-- (void)close {
-    [self closeWithReason:DISCONNECT_REASON_OTHER];
-}
-
-- (void)sendRequest:(NSDictionary *)dataMsg sensitive:(BOOL)sensitive {
-    // since this came from the persistent connection, wrap it in a data message
-    // envelope
-    NSDictionary *msg = @{
-        kFWPRequestType : kFWPRequestTypeData,
-        kFWPRequestDataPayload : dataMsg
-    };
-    [self sendData:msg sensitive:sensitive];
-}
-
-#pragma mark -
-#pragma mark Helpers
-
-- (void)sendData:(NSDictionary *)data sensitive:(BOOL)sensitive {
-    if (state != REALTIME_STATE_CONNECTED) {
-        @throw [[NSException alloc]
-            initWithName:@"InvalidConnectionState"
-                  reason:@"Tried to send data on an unconnected FConnection"
-                userInfo:nil];
-    } else {
-        if (sensitive) {
-            FFLog(@"I-RDB082004", @"Sending data (contents hidden)");
-        } else {
-            FFLog(@"I-RDB082005", @"Sending: %@", data);
-        }
-        [self.conn send:data];
-    }
-}
-
-#pragma mark -
-#pragma mark FWebSocketConnectinDelegate implementation
-
-// Corresponds to onConnectionLost in JS
-- (void)onDisconnect:(FWebSocketConnection *)fwebSocket
-    wasEverConnected:(BOOL)everConnected {
-
-    self.conn = nil;
-    if (!everConnected && state == REALTIME_STATE_CONNECTING) {
-        FFLog(@"I-RDB082006", @"Realtime connection failed.");
-
-        // Since we failed to connect at all, clear any cached entry for this
-        // namespace in case the machine went away
-        [self.repoInfo clearInternalHostCache];
-    } else if (state == REALTIME_STATE_CONNECTED) {
-        FFLog(@"I-RDB082007", @"Realtime connection lost.");
-    }
-
-    [self close];
-}
-
-// Corresponds to onMessageReceived in JS
-- (void)onMessage:(FWebSocketConnection *)fwebSocket
-      withMessage:(NSDictionary *)message {
-    NSString *rawMessageType =
-        [message objectForKey:kFWPAsyncServerEnvelopeType];
-    if (rawMessageType != nil) {
-        if ([rawMessageType isEqualToString:kFWPAsyncServerDataMessage]) {
-            [self onDataMessage:[message
-                                    objectForKey:kFWPAsyncServerEnvelopeData]];
-        } else if ([rawMessageType
-                       isEqualToString:kFWPAsyncServerControlMessage]) {
-            [self onControl:[message objectForKey:kFWPAsyncServerEnvelopeData]];
-        } else {
-            FFLog(@"I-RDB082008", @"Unrecognized server packet type: %@",
-                  rawMessageType);
-        }
-    } else {
-        FFLog(@"I-RDB082009", @"Unrecognized raw server packet received: %@",
-              message);
-    }
-}
-
-- (void)onDataMessage:(NSDictionary *)message {
-    // we don't do anything with data messages, just kick them up a level
-    FFLog(@"I-RDB082010", @"Got data message: %@", message);
-    [self.delegate onDataMessage:self withMessage:message];
-}
-
-- (void)onControl:(NSDictionary *)message {
-    FFLog(@"I-RDB082011", @"Got control message: %@", message);
-    NSString *type = [message objectForKey:kFWPAsyncServerControlMessageType];
-    if ([type isEqualToString:kFWPAsyncServerControlMessageShutdown]) {
-        NSString *reason =
-            [message objectForKey:kFWPAsyncServerControlMessageData];
-        [self onConnectionShutdownWithReason:reason];
-    } else if ([type isEqualToString:kFWPAsyncServerControlMessageReset]) {
-        NSString *host =
-            [message objectForKey:kFWPAsyncServerControlMessageData];
-        [self onReset:host];
-    } else if ([type isEqualToString:kFWPAsyncServerHello]) {
-        NSDictionary *handshakeData =
-            [message objectForKey:kFWPAsyncServerControlMessageData];
-        [self onHandshake:handshakeData];
-    } else {
-        FFLog(@"I-RDB082012",
-              @"Unknown control message returned from server: %@", message);
-    }
-}
-
-- (void)onConnectionShutdownWithReason:(NSString *)reason {
-    FFLog(@"I-RDB082013",
-          @"Connection shutdown command received. Shutting down...");
-
-    [self.delegate onKill:self withReason:reason];
-    [self close];
-}
-
-- (void)onHandshake:(NSDictionary *)handshake {
-    NSNumber *timestamp =
-        [handshake objectForKey:kFWPAsyncServerHelloTimestamp];
-    //    NSString* version = [handshake
-    //    objectForKey:kFWPAsyncServerHelloVersion];
-    NSString *host = [handshake objectForKey:kFWPAsyncServerHelloConnectedHost];
-    NSString *sessionID = [handshake objectForKey:kFWPAsyncServerHelloSession];
-
-    self.repoInfo.internalHost = host;
-
-    if (state == REALTIME_STATE_CONNECTING) {
-        [self.conn start];
-        [self onConnection:self.conn readyAtTime:timestamp sessionID:sessionID];
-    }
-}
-
-- (void)onConnection:(FWebSocketConnection *)conn
-         readyAtTime:(NSNumber *)timestamp
-           sessionID:(NSString *)sessionID {
-    FFLog(@"I-RDB082014", @"Realtime connection established");
-    state = REALTIME_STATE_CONNECTED;
-
-    [self.delegate onReady:self atTime:timestamp sessionID:sessionID];
-}
-
-- (void)onReset:(NSString *)host {
-    FFLog(
-        @"I-RDB082015",
-        @"Got a reset; killing connection to: %@; Updating internalHost to: %@",
-        repoInfo.internalHost, host);
-    self.repoInfo.internalHost = host;
-
-    // Explicitly close the connection with SERVER_RESET so calling code knows
-    // to reconnect immediately.
-    [self closeWithReason:DISCONNECT_REASON_SERVER_RESET];
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Realtime/FWebSocketConnection.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Realtime/FWebSocketConnection.h
deleted file mode 100644
index abb7474..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Realtime/FWebSocketConnection.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FSRWebSocket.h"
-#import "FUtilities.h"
-#import <Foundation/Foundation.h>
-
-@protocol FWebSocketDelegate;
-
-@interface FWebSocketConnection : NSObject <FSRWebSocketDelegate>
-
-@property(nonatomic, weak) id<FWebSocketDelegate> delegate;
-
-- (id)initWith:(FRepoInfo *)repoInfo
-         andQueue:(dispatch_queue_t)queue
-    lastSessionID:(NSString *)lastSessionID;
-
-- (void)open;
-- (void)close;
-- (void)start;
-- (void)send:(NSDictionary *)dictionary;
-
-- (void)webSocket:(FSRWebSocket *)webSocket didReceiveMessage:(id)message;
-- (void)webSocketDidOpen:(FSRWebSocket *)webSocket;
-- (void)webSocket:(FSRWebSocket *)webSocket didFailWithError:(NSError *)error;
-- (void)webSocket:(FSRWebSocket *)webSocket
-    didCloseWithCode:(NSInteger)code
-              reason:(NSString *)reason
-            wasClean:(BOOL)wasClean;
-
-@end
-
-@protocol FWebSocketDelegate <NSObject>
-
-- (void)onMessage:(FWebSocketConnection *)fwebSocket
-      withMessage:(NSDictionary *)message;
-- (void)onDisconnect:(FWebSocketConnection *)fwebSocket
-    wasEverConnected:(BOOL)everConnected;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Realtime/FWebSocketConnection.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Realtime/FWebSocketConnection.m
deleted file mode 100644
index edcae09..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Realtime/FWebSocketConnection.m
+++ /dev/null
@@ -1,346 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// Targetted compilation is ONLY for testing. UIKit is weak-linked in actual
-// release build.
-
-#import <Foundation/Foundation.h>
-
-#import "FConstants.h"
-#import "FIRDatabaseReference.h"
-#import "FIRDatabase_Private.h"
-#import "FStringUtilities.h"
-#import "FWebSocketConnection.h"
-#import <FirebaseCore/FIRLogger.h>
-
-#if TARGET_OS_IOS || TARGET_OS_TV
-#import <UIKit/UIKit.h>
-#endif
-
-@interface FWebSocketConnection () {
-    NSMutableString *frame;
-    BOOL everConnected;
-    BOOL isClosed;
-    NSTimer *keepAlive;
-}
-
-- (void)shutdown;
-- (void)onClosed;
-- (void)closeIfNeverConnected;
-
-@property(nonatomic, strong) FSRWebSocket *webSocket;
-@property(nonatomic, strong) NSNumber *connectionId;
-@property(nonatomic, readwrite) int totalFrames;
-@property(nonatomic, readonly) BOOL buffering;
-@property(nonatomic, readonly) NSString *userAgent;
-@property(nonatomic) dispatch_queue_t dispatchQueue;
-
-- (void)nop:(NSTimer *)timer;
-
-@end
-
-@implementation FWebSocketConnection
-
-@synthesize delegate;
-@synthesize webSocket;
-@synthesize connectionId;
-
-- (id)initWith:(FRepoInfo *)repoInfo
-         andQueue:(dispatch_queue_t)queue
-    lastSessionID:(NSString *)lastSessionID {
-    self = [super init];
-    if (self) {
-        everConnected = NO;
-        isClosed = NO;
-        self.connectionId = [FUtilities LUIDGenerator];
-        self.totalFrames = 0;
-        self.dispatchQueue = queue;
-        frame = nil;
-
-        NSString *connectionUrl =
-            [repoInfo connectionURLWithLastSessionID:lastSessionID];
-        NSString *ua = [self userAgent];
-        FFLog(@"I-RDB083001", @"(wsc:%@) Connecting to: %@ as %@",
-              self.connectionId, connectionUrl, ua);
-
-        NSURLRequest *req = [[NSURLRequest alloc]
-            initWithURL:[[NSURL alloc] initWithString:connectionUrl]];
-        self.webSocket = [[FSRWebSocket alloc] initWithURLRequest:req
-                                                            queue:queue
-                                                     andUserAgent:ua];
-        [self.webSocket setDelegateDispatchQueue:queue];
-        self.webSocket.delegate = self;
-    }
-    return self;
-}
-
-- (NSString *)userAgent {
-    NSString *systemVersion;
-    NSString *deviceName;
-    BOOL hasUiDeviceClass = NO;
-
-// Targetted compilation is ONLY for testing. UIKit is weak-linked in actual
-// release build.
-#if TARGET_OS_IOS || TARGET_OS_TV
-    Class uiDeviceClass = NSClassFromString(@"UIDevice");
-    if (uiDeviceClass) {
-        systemVersion = [uiDeviceClass currentDevice].systemVersion;
-        deviceName = [uiDeviceClass currentDevice].model;
-        hasUiDeviceClass = YES;
-    }
-#endif
-
-    if (!hasUiDeviceClass) {
-        NSDictionary *systemVersionDictionary = [NSDictionary
-            dictionaryWithContentsOfFile:
-                @"/System/Library/CoreServices/SystemVersion.plist"];
-        systemVersion =
-            [systemVersionDictionary objectForKey:@"ProductVersion"];
-        deviceName = [systemVersionDictionary objectForKey:@"ProductName"];
-    }
-
-    NSString *bundleIdentifier = [[NSBundle mainBundle] bundleIdentifier];
-
-    // Sanitize '/'s in deviceName and bundleIdentifier for stats
-    deviceName = [FStringUtilities sanitizedForUserAgent:deviceName];
-    bundleIdentifier =
-        [FStringUtilities sanitizedForUserAgent:bundleIdentifier];
-
-    // Firebase/5/<semver>_<build date>_<git hash>/<os version>/{device model /
-    // os (Mac OS X, iPhone, etc.}_<bundle id>
-    NSString *ua = [NSString
-        stringWithFormat:@"Firebase/%@/%@/%@/%@_%@", kWebsocketProtocolVersion,
-                         [FIRDatabase buildVersion], systemVersion, deviceName,
-                         bundleIdentifier];
-    return ua;
-}
-
-- (BOOL)buffering {
-    return frame != nil;
-}
-
-#pragma mark -
-#pragma mark Public FWebSocketConnection methods
-
-- (void)open {
-    FFLog(@"I-RDB083002", @"(wsc:%@) FWebSocketConnection open.",
-          self.connectionId);
-    assert(delegate);
-    everConnected = NO;
-    // TODO Assert url
-    [self.webSocket open];
-    dispatch_time_t when = dispatch_time(
-        DISPATCH_TIME_NOW, kWebsocketConnectTimeout * NSEC_PER_SEC);
-    dispatch_after(when, self.dispatchQueue, ^{
-      [self closeIfNeverConnected];
-    });
-}
-
-- (void)close {
-    FFLog(@"I-RDB083003", @"(wsc:%@) FWebSocketConnection is being closed.",
-          self.connectionId);
-    isClosed = YES;
-    [self.webSocket close];
-}
-
-- (void)start {
-    // Start is a no-op for websockets.
-}
-
-- (void)send:(NSDictionary *)dictionary {
-
-    [self resetKeepAlive];
-
-    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictionary
-                                                       options:kNilOptions
-                                                         error:nil];
-
-    NSString *data = [[NSString alloc] initWithData:jsonData
-                                           encoding:NSUTF8StringEncoding];
-
-    NSArray *dataSegs = [FUtilities splitString:data
-                                    intoMaxSize:kWebsocketMaxFrameSize];
-
-    // First send the header so the server knows how many segments are
-    // forthcoming
-    if (dataSegs.count > 1) {
-        [self.webSocket
-            send:[NSString
-                     stringWithFormat:@"%u", (unsigned int)dataSegs.count]];
-    }
-
-    // Then, actually send the segments.
-    for (NSString *segment in dataSegs) {
-        [self.webSocket send:segment];
-    }
-}
-
-- (void)nop:(NSTimer *)timer {
-    if (!isClosed) {
-        FFLog(@"I-RDB083004", @"(wsc:%@) nop", self.connectionId);
-        [self.webSocket send:@"0"];
-    } else {
-        FFLog(@"I-RDB083005",
-              @"(wsc:%@) No more websocket; invalidating nop timer.",
-              self.connectionId);
-        [timer invalidate];
-    }
-}
-
-- (void)handleNewFrameCount:(int)numFrames {
-    self.totalFrames = numFrames;
-    frame = [[NSMutableString alloc] initWithString:@""];
-    FFLog(@"I-RDB083006", @"(wsc:%@) handleNewFrameCount: %d",
-          self.connectionId, self.totalFrames);
-}
-
-- (NSString *)extractFrameCount:(NSString *)message {
-    if ([message length] <= 4) {
-        int frameCount = [message intValue];
-        if (frameCount > 0) {
-            [self handleNewFrameCount:frameCount];
-            return nil;
-        }
-    }
-    [self handleNewFrameCount:1];
-    return message;
-}
-
-- (void)appendFrame:(NSString *)message {
-    [frame appendString:message];
-    self.totalFrames = self.totalFrames - 1;
-
-    if (self.totalFrames == 0) {
-        // Call delegate and pass an immutable version of the frame
-        NSDictionary *json = [NSJSONSerialization
-            JSONObjectWithData:[frame dataUsingEncoding:NSUTF8StringEncoding]
-                       options:kNilOptions
-                         error:nil];
-        frame = nil;
-        FFLog(@"I-RDB083007",
-              @"(wsc:%@) handleIncomingFrame sending complete frame: %d",
-              self.connectionId, self.totalFrames);
-
-        @autoreleasepool {
-            [self.delegate onMessage:self withMessage:json];
-        }
-    }
-}
-
-- (void)handleIncomingFrame:(NSString *)message {
-    [self resetKeepAlive];
-    if (self.buffering) {
-        [self appendFrame:message];
-    } else {
-        NSString *remaining = [self extractFrameCount:message];
-        if (remaining) {
-            [self appendFrame:remaining];
-        }
-    }
-}
-
-#pragma mark -
-#pragma mark SRWebSocketDelegate implementation
-- (void)webSocket:(FSRWebSocket *)webSocket didReceiveMessage:(id)message {
-    [self handleIncomingFrame:message];
-}
-
-- (void)webSocketDidOpen:(FSRWebSocket *)webSocket {
-    FFLog(@"I-RDB083008", @"(wsc:%@) webSocketDidOpen", self.connectionId);
-
-    everConnected = YES;
-
-    dispatch_async(dispatch_get_main_queue(), ^{
-      self->keepAlive =
-          [NSTimer scheduledTimerWithTimeInterval:kWebsocketKeepaliveInterval
-                                           target:self
-                                         selector:@selector(nop:)
-                                         userInfo:nil
-                                          repeats:YES];
-      FFLog(@"I-RDB083009", @"(wsc:%@) nop timer kicked off",
-            self.connectionId);
-    });
-}
-
-- (void)webSocket:(FSRWebSocket *)webSocket didFailWithError:(NSError *)error {
-    FFLog(@"I-RDB083010", @"(wsc:%@) didFailWithError didFailWithError: %@",
-          self.connectionId, [error description]);
-    [self onClosed];
-}
-
-- (void)webSocket:(FSRWebSocket *)webSocket
-    didCloseWithCode:(NSInteger)code
-              reason:(NSString *)reason
-            wasClean:(BOOL)wasClean {
-    FFLog(@"I-RDB083011", @"(wsc:%@) didCloseWithCode: %ld %@",
-          self.connectionId, (long)code, reason);
-    [self onClosed];
-}
-
-#pragma mark -
-#pragma mark Private methods
-
-/**
- * Note that the close / onClosed / shutdown cycle here is a little different
- * from the javascript client. In order to properly handle deallocation, no
- * close-related action is taken at a higher level until we have received
- * notification from the websocket itself that it is closed. Otherwise, we end
- * up deallocating this class and the FConnection class before the websocket has
- * a change to call some of its delegate methods. So, since close is the
- * external close handler, we just set a flag saying not to call our own
- * delegate method and close the websocket. That will trigger a callback into
- * this class that can then do things like clean up the keepalive timer.
- */
-
-- (void)closeIfNeverConnected {
-    if (!everConnected) {
-        FFLog(@"I-RDB083012", @"(wsc:%@) Websocket timed out on connect",
-              self.connectionId);
-        [self.webSocket close];
-    }
-}
-
-- (void)shutdown {
-    isClosed = YES;
-
-    // Call delegate methods
-    [self.delegate onDisconnect:self wasEverConnected:everConnected];
-}
-
-- (void)onClosed {
-    if (!isClosed) {
-        FFLog(@"I-RDB083013", @"Websocket is closing itself");
-        [self shutdown];
-    }
-    self.webSocket = nil;
-    if (keepAlive.isValid) {
-        [keepAlive invalidate];
-    }
-}
-
-- (void)resetKeepAlive {
-    NSDate *newTime =
-        [NSDate dateWithTimeIntervalSinceNow:kWebsocketKeepaliveInterval];
-    // Calling setFireDate is actually kinda' expensive, so wait at least 5
-    // seconds before updating it.
-    if ([newTime timeIntervalSinceDate:keepAlive.fireDate] > 5) {
-        FFLog(@"I-RDB083014", @"(wsc:%@) resetting keepalive, to %@ ; old: %@",
-              self.connectionId, newTime, [keepAlive fireDate]);
-        [keepAlive setFireDate:newTime];
-    }
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FChildrenNode.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FChildrenNode.h
deleted file mode 100644
index cc3239e..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FChildrenNode.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FImmutableSortedDictionary.h"
-#import "FNode.h"
-#import "FTypedefs.h"
-#import "FTypedefs_Private.h"
-#import <Foundation/Foundation.h>
-
-@class FNamedNode;
-
-@interface FChildrenNode : NSObject <FNode>
-
-- (id)initWithChildren:(FImmutableSortedDictionary *)someChildren;
-- (id)initWithPriority:(id<FNode>)aPriority
-              children:(FImmutableSortedDictionary *)someChildren;
-
-// FChildrenNode specific methods
-
-- (void)enumerateChildrenAndPriorityUsingBlock:(void (^)(NSString *, id<FNode>,
-                                                         BOOL *))block;
-
-- (FNamedNode *)firstChild;
-- (FNamedNode *)lastChild;
-
-@property(nonatomic, strong) FImmutableSortedDictionary *children;
-@property(nonatomic, strong) id<FNode> priorityNode;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FChildrenNode.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FChildrenNode.m
deleted file mode 100644
index bd02bf8..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FChildrenNode.m
+++ /dev/null
@@ -1,418 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FChildrenNode.h"
-#import "FConstants.h"
-#import "FEmptyNode.h"
-#import "FMaxNode.h"
-#import "FNamedNode.h"
-#import "FPriorityIndex.h"
-#import "FSnapshotUtilities.h"
-#import "FStringUtilities.h"
-#import "FTransformedEnumerator.h"
-#import "FUtilities.h"
-
-@interface FChildrenNode ()
-@property(nonatomic, strong) NSString *lazyHash;
-@end
-
-@implementation FChildrenNode
-
-// Note: The only reason we allow nil priority is to for EmptyNode, since we
-// can't use EmptyNode as the priority of EmptyNode.  We might want to consider
-// making EmptyNode its own class instead of an empty ChildrenNode.
-
-- (id)init {
-    return [self
-        initWithPriority:nil
-                children:[FImmutableSortedDictionary
-                             dictionaryWithComparator:[FUtilities
-                                                          keyComparator]]];
-}
-
-- (id)initWithChildren:(FImmutableSortedDictionary *)someChildren {
-    return [self initWithPriority:nil children:someChildren];
-}
-
-- (id)initWithPriority:(id<FNode>)aPriority
-              children:(FImmutableSortedDictionary *)someChildren {
-    if (someChildren.isEmpty && aPriority != nil && ![aPriority isEmpty]) {
-        [NSException raise:NSInvalidArgumentException
-                    format:@"Can't create empty node with priority!"];
-    }
-    self = [super init];
-    if (self) {
-        self.children = someChildren;
-        self.priorityNode = aPriority;
-    }
-    return self;
-}
-
-- (NSString *)description {
-    return [[self valForExport:YES] description];
-}
-
-#pragma mark -
-#pragma mark FNode methods
-
-- (BOOL)isLeafNode {
-    return NO;
-}
-
-- (id<FNode>)getPriority {
-    if (self.priorityNode) {
-        return self.priorityNode;
-    } else {
-        return [FEmptyNode emptyNode];
-    }
-}
-
-- (id<FNode>)updatePriority:(id<FNode>)aPriority {
-    if ([self.children isEmpty]) {
-        return [FEmptyNode emptyNode];
-    } else {
-        return [[FChildrenNode alloc] initWithPriority:aPriority
-                                              children:self.children];
-    }
-}
-
-- (id<FNode>)getImmediateChild:(NSString *)childName {
-    if ([childName isEqualToString:@".priority"]) {
-        return [self getPriority];
-    } else {
-        id<FNode> child = [self.children objectForKey:childName];
-        return (child == nil) ? [FEmptyNode emptyNode] : child;
-    }
-}
-
-- (id<FNode>)getChild:(FPath *)path {
-    NSString *front = [path getFront];
-    if (front == nil) {
-        return self;
-    } else {
-        return [[self getImmediateChild:front] getChild:[path popFront]];
-    }
-}
-
-- (BOOL)hasChild:(NSString *)childName {
-    return ![self getImmediateChild:childName].isEmpty;
-}
-
-- (id<FNode>)updateImmediateChild:(NSString *)childName
-                     withNewChild:(id<FNode>)newChildNode {
-    NSAssert(newChildNode != nil, @"Should always be passing nodes.");
-
-    if ([childName isEqualToString:@".priority"]) {
-        return [self updatePriority:newChildNode];
-    } else {
-        FImmutableSortedDictionary *newChildren;
-        if (newChildNode.isEmpty) {
-            newChildren = [self.children removeObjectForKey:childName];
-        } else {
-            newChildren = [self.children setObject:newChildNode
-                                            forKey:childName];
-        }
-        if (newChildren.isEmpty) {
-            return [FEmptyNode emptyNode];
-        } else {
-            return [[FChildrenNode alloc] initWithPriority:self.getPriority
-                                                  children:newChildren];
-        }
-    }
-}
-
-- (id<FNode>)updateChild:(FPath *)path withNewChild:(id<FNode>)newChildNode {
-    NSString *front = [path getFront];
-    if (front == nil) {
-        return newChildNode;
-    } else {
-        NSAssert(![front isEqualToString:@".priority"] || path.length == 1,
-                 @".priority must be the last token in a path.");
-        id<FNode> newImmediateChild =
-            [[self getImmediateChild:front] updateChild:[path popFront]
-                                           withNewChild:newChildNode];
-        return [self updateImmediateChild:front withNewChild:newImmediateChild];
-    }
-}
-
-- (BOOL)isEmpty {
-    return [self.children isEmpty];
-}
-
-- (int)numChildren {
-    return [self.children count];
-}
-
-- (id)val {
-    return [self valForExport:NO];
-}
-
-- (id)valForExport:(BOOL)exp {
-    if ([self isEmpty]) {
-        return [NSNull null];
-    }
-
-    __block int numKeys = 0;
-    __block NSInteger maxKey = 0;
-    __block BOOL allIntegerKeys = YES;
-
-    NSMutableDictionary *obj =
-        [[NSMutableDictionary alloc] initWithCapacity:[self.children count]];
-    [self enumerateChildrenUsingBlock:^(NSString *key, id<FNode> childNode,
-                                        BOOL *stop) {
-      [obj setObject:[childNode valForExport:exp] forKey:key];
-
-      numKeys++;
-
-      // If we already found a string key, don't bother with any of this
-      if (!allIntegerKeys) {
-          return;
-      }
-
-      // Treat leading zeroes that are not exactly "0" as strings
-      NSString *firstChar = [key substringWithRange:NSMakeRange(0, 1)];
-      if ([firstChar isEqualToString:@"0"] && [key length] > 1) {
-          allIntegerKeys = NO;
-      } else {
-          NSNumber *keyAsNum = [FUtilities intForString:key];
-          if (keyAsNum != nil) {
-              NSInteger keyAsInt = [keyAsNum integerValue];
-              if (keyAsInt > maxKey) {
-                  maxKey = keyAsInt;
-              }
-          } else {
-              allIntegerKeys = NO;
-          }
-      }
-    }];
-
-    if (!exp && allIntegerKeys && maxKey < 2 * numKeys) {
-        // convert to an array
-        NSMutableArray *array =
-            [[NSMutableArray alloc] initWithCapacity:maxKey + 1];
-        for (int i = 0; i <= maxKey; ++i) {
-            NSString *keyString = [NSString stringWithFormat:@"%i", i];
-            id child = obj[keyString];
-            if (child != nil) {
-                [array addObject:child];
-            } else {
-                [array addObject:[NSNull null]];
-            }
-        }
-        return array;
-    } else {
-
-        if (exp && [self getPriority] != nil && !self.getPriority.isEmpty) {
-            obj[kPayloadPriority] = [self.getPriority val];
-        }
-
-        return obj;
-    }
-}
-
-- (NSString *)dataHash {
-    if (self.lazyHash == nil) {
-        NSMutableString *toHash = [[NSMutableString alloc] init];
-
-        if (!self.getPriority.isEmpty) {
-            [toHash appendString:@"priority:"];
-            [FSnapshotUtilities
-                appendHashRepresentationForLeafNode:(FLeafNode *)
-                                                        self.getPriority
-                                           toString:toHash
-                                        hashVersion:FDataHashVersionV1];
-            [toHash appendString:@":"];
-        }
-
-        __block BOOL sawPriority = NO;
-        [self enumerateChildrenUsingBlock:^(NSString *key, id<FNode> node,
-                                            BOOL *stop) {
-          sawPriority = sawPriority || [[node getPriority] isEmpty];
-          *stop = sawPriority;
-        }];
-        if (sawPriority) {
-            NSMutableArray *array = [NSMutableArray array];
-            [self enumerateChildrenUsingBlock:^(NSString *key, id<FNode> node,
-                                                BOOL *stop) {
-              FNamedNode *namedNode = [[FNamedNode alloc] initWithName:key
-                                                               andNode:node];
-              [array addObject:namedNode];
-            }];
-            [array sortUsingComparator:^NSComparisonResult(
-                       FNamedNode *namedNode1, FNamedNode *namedNode2) {
-              return
-                  [[FPriorityIndex priorityIndex] compareNamedNode:namedNode1
-                                                       toNamedNode:namedNode2];
-            }];
-            [array enumerateObjectsUsingBlock:^(FNamedNode *namedNode,
-                                                NSUInteger idx, BOOL *stop) {
-              NSString *childHash = [namedNode.node dataHash];
-              if (![childHash isEqualToString:@""]) {
-                  [toHash appendFormat:@":%@:%@", namedNode.name, childHash];
-              }
-            }];
-        } else {
-            [self enumerateChildrenUsingBlock:^(NSString *key, id<FNode> node,
-                                                BOOL *stop) {
-              NSString *childHash = [node dataHash];
-              if (![childHash isEqualToString:@""]) {
-                  [toHash appendFormat:@":%@:%@", key, childHash];
-              }
-            }];
-        }
-        self.lazyHash = [toHash isEqualToString:@""]
-                            ? @""
-                            : [FStringUtilities base64EncodedSha1:toHash];
-    }
-    return self.lazyHash;
-}
-
-- (NSComparisonResult)compare:(id<FNode>)other {
-    // children nodes come last, unless this is actually an empty node, then we
-    // come first.
-    if (self.isEmpty) {
-        if (other.isEmpty) {
-            return NSOrderedSame;
-        } else {
-            return NSOrderedAscending;
-        }
-    } else if (other.isLeafNode || other.isEmpty) {
-        return NSOrderedDescending;
-    } else if (other == [FMaxNode maxNode]) {
-        return NSOrderedAscending;
-    } else {
-        // Must be another node with children.
-        return NSOrderedSame;
-    }
-}
-
-- (BOOL)isEqual:(id<FNode>)other {
-    if (other == self) {
-        return YES;
-    } else if (other == nil) {
-        return NO;
-    } else if (other.isLeafNode) {
-        return NO;
-    } else if (self.isEmpty && [other isEmpty]) {
-        // Empty nodes do not have priority
-        return YES;
-    } else {
-        FChildrenNode *otherChildrenNode = other;
-        if (![self.getPriority isEqual:other.getPriority]) {
-            return NO;
-        } else if (self.children.count == otherChildrenNode.children.count) {
-            __block BOOL equal = YES;
-            [self enumerateChildrenUsingBlock:^(NSString *key, id<FNode> node,
-                                                BOOL *stop) {
-              id<FNode> child = [otherChildrenNode getImmediateChild:key];
-              if (![child isEqual:node]) {
-                  equal = NO;
-                  *stop = YES;
-              }
-            }];
-            return equal;
-        } else {
-            return NO;
-        }
-    }
-}
-
-- (NSUInteger)hash {
-    __block NSUInteger hashCode = 0;
-    [self enumerateChildrenUsingBlock:^(NSString *key, id<FNode> node,
-                                        BOOL *stop) {
-      hashCode = 31 * hashCode + key.hash;
-      hashCode = 17 * hashCode + node.hash;
-    }];
-    return 17 * hashCode + self.priorityNode.hash;
-}
-
-- (void)enumerateChildrenAndPriorityUsingBlock:(void (^)(NSString *, id<FNode>,
-                                                         BOOL *))block {
-    if ([self.getPriority isEmpty]) {
-        [self enumerateChildrenUsingBlock:block];
-    } else {
-        __block BOOL passedPriorityKey = NO;
-        [self enumerateChildrenUsingBlock:^(NSString *key, id<FNode> node,
-                                            BOOL *stop) {
-          if (!passedPriorityKey &&
-              [FUtilities compareKey:key
-                               toKey:@".priority"] == NSOrderedDescending) {
-              passedPriorityKey = YES;
-              BOOL stopAfterPriority = NO;
-              block(@".priority", [self getPriority], &stopAfterPriority);
-              if (stopAfterPriority)
-                  return;
-          }
-          block(key, node, stop);
-        }];
-    }
-}
-
-- (void)enumerateChildrenUsingBlock:(void (^)(NSString *, id<FNode>,
-                                              BOOL *))block {
-    [self.children enumerateKeysAndObjectsUsingBlock:block];
-}
-
-- (void)enumerateChildrenReverse:(BOOL)reverse
-                      usingBlock:
-                          (void (^)(NSString *, id<FNode>, BOOL *))block {
-    [self.children enumerateKeysAndObjectsReverse:reverse usingBlock:block];
-}
-
-- (NSEnumerator *)childEnumerator {
-    return [[FTransformedEnumerator alloc]
-        initWithEnumerator:self.children.keyEnumerator
-              andTransform:^id(NSString *key) {
-                return [FNamedNode nodeWithName:key
-                                           node:[self getImmediateChild:key]];
-              }];
-}
-
-- (NSString *)predecessorChildKey:(NSString *)childKey {
-    return [self.children getPredecessorKey:childKey];
-}
-
-#pragma mark -
-#pragma mark FChildrenNode specific methods
-
-- (id)childrenGetter:(id)key {
-    return [self.children objectForKey:key];
-}
-
-- (FNamedNode *)firstChild {
-    NSString *childKey = self.children.minKey;
-    if (childKey) {
-        return
-            [[FNamedNode alloc] initWithName:childKey
-                                     andNode:[self getImmediateChild:childKey]];
-    } else {
-        return nil;
-    }
-}
-
-- (FNamedNode *)lastChild {
-    NSString *childKey = self.children.maxKey;
-    if (childKey) {
-        return
-            [[FNamedNode alloc] initWithName:childKey
-                                     andNode:[self getImmediateChild:childKey]];
-    } else {
-        return nil;
-    }
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FCompoundWrite.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FCompoundWrite.h
deleted file mode 100644
index 47de66f..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FCompoundWrite.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@class FImmutableTree;
-@protocol FNode;
-@class FPath;
-
-/**
- * This class holds a collection of writes that can be applied to nodes in
- * unison. It abstracts away the logic with dealing with priority writes and
- * multiple nested writes. At any given path, there is only allowed to be one
- * write modifying that path. Any write to an existing path or shadowing an
- * existing path will modify that existing write to reflect the write added.
- */
-@interface FCompoundWrite : NSObject
-
-- (id)initWithWriteTree:(FImmutableTree *)tree;
-
-/**
- * Creates a compound write with NSDictionary from path string to object
- */
-+ (FCompoundWrite *)compoundWriteWithValueDictionary:(NSDictionary *)dictionary;
-/**
- * Creates a compound write with NSDictionary from path string to node
- */
-+ (FCompoundWrite *)compoundWriteWithNodeDictionary:(NSDictionary *)dictionary;
-
-+ (FCompoundWrite *)emptyWrite;
-
-- (FCompoundWrite *)addWrite:(id<FNode>)node atPath:(FPath *)path;
-- (FCompoundWrite *)addWrite:(id<FNode>)node atKey:(NSString *)key;
-- (FCompoundWrite *)addCompoundWrite:(FCompoundWrite *)node
-                              atPath:(FPath *)path;
-- (FCompoundWrite *)removeWriteAtPath:(FPath *)path;
-- (id<FNode>)rootWrite;
-- (BOOL)hasCompleteWriteAtPath:(FPath *)path;
-- (id<FNode>)completeNodeAtPath:(FPath *)path;
-- (NSArray *)completeChildren;
-- (NSDictionary *)childCompoundWrites;
-- (FCompoundWrite *)childCompoundWriteAtPath:(FPath *)path;
-- (id<FNode>)applyToNode:(id<FNode>)node;
-- (void)enumerateWrites:(void (^)(FPath *path, id<FNode> node,
-                                  BOOL *stop))block;
-
-- (NSDictionary *)valForExport:(BOOL)exportFormat;
-
-- (BOOL)isEmpty;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FCompoundWrite.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FCompoundWrite.m
deleted file mode 100644
index bc40b2b..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FCompoundWrite.m
+++ /dev/null
@@ -1,304 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FCompoundWrite.h"
-#import "FImmutableTree.h"
-#import "FNamedNode.h"
-#import "FNode.h"
-#import "FPath.h"
-#import "FSnapshotUtilities.h"
-
-@interface FCompoundWrite ()
-@property(nonatomic, strong) FImmutableTree *writeTree;
-@end
-
-@implementation FCompoundWrite
-
-- (id)initWithWriteTree:(FImmutableTree *)tree {
-    self = [super init];
-    if (self) {
-        self.writeTree = tree;
-    }
-    return self;
-}
-
-+ (FCompoundWrite *)compoundWriteWithValueDictionary:
-    (NSDictionary *)dictionary {
-    __block FImmutableTree *writeTree = [FImmutableTree empty];
-    [dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *pathString,
-                                                    id value, BOOL *stop) {
-      id<FNode> node = [FSnapshotUtilities nodeFrom:value];
-      FImmutableTree *tree = [[FImmutableTree alloc] initWithValue:node];
-      writeTree = [writeTree setTree:tree
-                              atPath:[[FPath alloc] initWith:pathString]];
-    }];
-    return [[FCompoundWrite alloc] initWithWriteTree:writeTree];
-}
-
-+ (FCompoundWrite *)compoundWriteWithNodeDictionary:(NSDictionary *)dictionary {
-    __block FImmutableTree *writeTree = [FImmutableTree empty];
-    [dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *pathString,
-                                                    id node, BOOL *stop) {
-      FImmutableTree *tree = [[FImmutableTree alloc] initWithValue:node];
-      writeTree = [writeTree setTree:tree
-                              atPath:[[FPath alloc] initWith:pathString]];
-    }];
-    return [[FCompoundWrite alloc] initWithWriteTree:writeTree];
-}
-
-+ (FCompoundWrite *)emptyWrite {
-    static dispatch_once_t pred = 0;
-    static FCompoundWrite *empty = nil;
-    dispatch_once(&pred, ^{
-      empty = [[FCompoundWrite alloc]
-          initWithWriteTree:[[FImmutableTree alloc] initWithValue:nil]];
-    });
-    return empty;
-}
-
-- (FCompoundWrite *)addWrite:(id<FNode>)node atPath:(FPath *)path {
-    if (path.isEmpty) {
-        return [[FCompoundWrite alloc]
-            initWithWriteTree:[[FImmutableTree alloc] initWithValue:node]];
-    } else {
-        FTuplePathValue *rootMost =
-            [self.writeTree findRootMostValueAndPath:path];
-        if (rootMost != nil) {
-            FPath *relativePath = [FPath relativePathFrom:rootMost.path
-                                                       to:path];
-            id<FNode> value = [rootMost.value updateChild:relativePath
-                                             withNewChild:node];
-            return [[FCompoundWrite alloc]
-                initWithWriteTree:[self.writeTree setValue:value
-                                                    atPath:rootMost.path]];
-        } else {
-            FImmutableTree *subtree =
-                [[FImmutableTree alloc] initWithValue:node];
-            FImmutableTree *newWriteTree = [self.writeTree setTree:subtree
-                                                            atPath:path];
-            return [[FCompoundWrite alloc] initWithWriteTree:newWriteTree];
-        }
-    }
-}
-
-- (FCompoundWrite *)addWrite:(id<FNode>)node atKey:(NSString *)key {
-    return [self addWrite:node atPath:[[FPath alloc] initWith:key]];
-}
-
-- (FCompoundWrite *)addCompoundWrite:(FCompoundWrite *)compoundWrite
-                              atPath:(FPath *)path {
-    __block FCompoundWrite *newWrite = self;
-    [compoundWrite.writeTree forEach:^(FPath *childPath, id<FNode> value) {
-      newWrite = [newWrite addWrite:value atPath:[path child:childPath]];
-    }];
-    return newWrite;
-}
-
-/**
- * Will remove a write at the given path and deeper paths. This will
- * <em>not</em> modify a write at a higher location, which must be removed by
- * calling this method with that path.
- * @param path The path at which a write and all deeper writes should be
- * removed.
- * @return The new FWriteCompound with the removed path.
- */
-- (FCompoundWrite *)removeWriteAtPath:(FPath *)path {
-    if (path.isEmpty) {
-        return [FCompoundWrite emptyWrite];
-    } else {
-        FImmutableTree *newWriteTree =
-            [self.writeTree setTree:[FImmutableTree empty] atPath:path];
-        return [[FCompoundWrite alloc] initWithWriteTree:newWriteTree];
-    }
-}
-
-/**
- * Returns whether this FCompoundWrite will fully overwrite a node at a given
- * location and can therefore be considered "complete".
- * @param path The path to check for
- * @return Whether there is a complete write at that path.
- */
-- (BOOL)hasCompleteWriteAtPath:(FPath *)path {
-    return [self completeNodeAtPath:path] != nil;
-}
-
-/**
- * Returns a node for a path if and only if the node is a "complete" overwrite
- * at that path. This will not aggregate writes from depeer paths, but will
- * return child nodes from a more shallow path.
- * @param path The path to get a complete write
- * @return The node if complete at that path, or nil otherwise.
- */
-- (id<FNode>)completeNodeAtPath:(FPath *)path {
-    FTuplePathValue *rootMost = [self.writeTree findRootMostValueAndPath:path];
-    if (rootMost != nil) {
-        FPath *relativePath = [FPath relativePathFrom:rootMost.path to:path];
-        return [rootMost.value getChild:relativePath];
-    } else {
-        return nil;
-    }
-}
-
-// TODO: change into traversal method...
-- (NSArray *)completeChildren {
-    NSMutableArray *children = [[NSMutableArray alloc] init];
-    if (self.writeTree.value != nil) {
-        id<FNode> node = self.writeTree.value;
-        [node enumerateChildrenUsingBlock:^(NSString *key, id<FNode> node,
-                                            BOOL *stop) {
-          [children addObject:[[FNamedNode alloc] initWithName:key
-                                                       andNode:node]];
-        }];
-    } else {
-        [self.writeTree.children
-            enumerateKeysAndObjectsUsingBlock:^(
-                NSString *childKey, FImmutableTree *childTree, BOOL *stop) {
-              if (childTree.value != nil) {
-                  [children addObject:[[FNamedNode alloc]
-                                          initWithName:childKey
-                                               andNode:childTree.value]];
-              }
-            }];
-    }
-    return children;
-}
-
-// TODO: change into enumarate method
-- (NSDictionary *)childCompoundWrites {
-    NSMutableDictionary *dict = [NSMutableDictionary dictionary];
-    [self.writeTree.children
-        enumerateKeysAndObjectsUsingBlock:^(
-            NSString *key, FImmutableTree *childWrite, BOOL *stop) {
-          dict[key] = [[FCompoundWrite alloc] initWithWriteTree:childWrite];
-        }];
-    return dict;
-}
-
-- (FCompoundWrite *)childCompoundWriteAtPath:(FPath *)path {
-    if (path.isEmpty) {
-        return self;
-    } else {
-        id<FNode> shadowingNode = [self completeNodeAtPath:path];
-        if (shadowingNode != nil) {
-            return [[FCompoundWrite alloc]
-                initWithWriteTree:[[FImmutableTree alloc]
-                                      initWithValue:shadowingNode]];
-        } else {
-            return [[FCompoundWrite alloc]
-                initWithWriteTree:[self.writeTree subtreeAtPath:path]];
-        }
-    }
-}
-
-- (id<FNode>)applySubtreeWrite:(FImmutableTree *)subtreeWrite
-                        atPath:(FPath *)relativePath
-                        toNode:(id<FNode>)node {
-    if (subtreeWrite.value != nil) {
-        // Since a write there is always a leaf, we're done here.
-        return [node updateChild:relativePath withNewChild:subtreeWrite.value];
-    } else {
-        __block id<FNode> priorityWrite = nil;
-        __block id<FNode> blockNode = node;
-        [subtreeWrite.children
-            enumerateKeysAndObjectsUsingBlock:^(
-                NSString *childKey, FImmutableTree *childTree, BOOL *stop) {
-              if ([childKey isEqualToString:@".priority"]) {
-                  // Apply priorities at the end so we don't update priorities
-                  // for either empty nodes or forget to apply priorities to
-                  // empty nodes that are later filled.
-                  NSAssert(childTree.value != nil,
-                           @"Priority writes must always be leaf nodes");
-                  priorityWrite = childTree.value;
-              } else {
-                  blockNode = [self
-                      applySubtreeWrite:childTree
-                                 atPath:[relativePath childFromString:childKey]
-                                 toNode:blockNode];
-              }
-            }];
-        // If there was a priority write, we only apply it if the node is not
-        // empty
-        if (![blockNode getChild:relativePath].isEmpty &&
-            priorityWrite != nil) {
-            blockNode = [blockNode
-                 updateChild:[relativePath childFromString:@".priority"]
-                withNewChild:priorityWrite];
-        }
-        return blockNode;
-    }
-}
-
-- (void)enumerateWrites:(void (^)(FPath *, id<FNode>, BOOL *))block {
-    __block BOOL stop = NO;
-    // TODO: add stop to tree iterator...
-    [self.writeTree forEach:^(FPath *path, id value) {
-      if (!stop) {
-          block(path, value, &stop);
-      }
-    }];
-}
-
-/**
- * Applies this FCompoundWrite to a node. The node is returned with all writes
- * from this FCompoundWrite applied to the node.
- * @param node The node to apply this FCompoundWrite to
- * @return The node with all writes applied
- */
-- (id<FNode>)applyToNode:(id<FNode>)node {
-    return [self applySubtreeWrite:self.writeTree
-                            atPath:[FPath empty]
-                            toNode:node];
-}
-
-/**
- * Return true if this CompoundWrite is empty and therefore does not modify any
- * nodes.
- * @return Whether this CompoundWrite is empty
- */
-- (BOOL)isEmpty {
-    return self.writeTree.isEmpty;
-}
-
-- (id<FNode>)rootWrite {
-    return self.writeTree.value;
-}
-
-- (BOOL)isEqual:(id)object {
-    if (![object isKindOfClass:[FCompoundWrite class]]) {
-        return NO;
-    }
-    FCompoundWrite *other = (FCompoundWrite *)object;
-    return
-        [[self valForExport:YES] isEqualToDictionary:[other valForExport:YES]];
-}
-
-- (NSUInteger)hash {
-    return [[self valForExport:YES] hash];
-}
-
-- (NSDictionary *)valForExport:(BOOL)exportFormat {
-    NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
-    [self.writeTree forEach:^(FPath *path, id<FNode> value) {
-      dictionary[path.wireFormat] = [value valForExport:exportFormat];
-    }];
-    return dictionary;
-}
-
-- (NSString *)description {
-    return [[self valForExport:YES] description];
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FEmptyNode.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FEmptyNode.h
deleted file mode 100644
index d002df0..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FEmptyNode.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FNode.h"
-#import <Foundation/Foundation.h>
-
-@interface FEmptyNode : NSObject
-
-+ (id<FNode>)emptyNode;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FEmptyNode.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FEmptyNode.m
deleted file mode 100644
index bde3a8a..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FEmptyNode.m
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FEmptyNode.h"
-#import "FChildrenNode.h"
-
-@implementation FEmptyNode
-
-+ (id<FNode>)emptyNode {
-    static FChildrenNode *empty = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-      empty = [[FChildrenNode alloc] init];
-    });
-    return empty;
-}
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FIndexedNode.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FIndexedNode.h
deleted file mode 100644
index b161dea..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FIndexedNode.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#import "FIndex.h"
-#import "FNamedNode.h"
-#import "FNode.h"
-
-/**
- * Represents a node together with an index. The index and node are updated in
- * unison. In the case where the index does not affect the ordering (i.e. the
- * ordering is identical to the key ordering) this class uses a fallback index
- * to save memory. Everything operating on the index must special case the
- * fallback index.
- */
-@interface FIndexedNode : NSObject
-
-@property(nonatomic, strong, readonly) id<FNode> node;
-
-+ (FIndexedNode *)indexedNodeWithNode:(id<FNode>)node;
-+ (FIndexedNode *)indexedNodeWithNode:(id<FNode>)node index:(id<FIndex>)index;
-
-- (BOOL)hasIndex:(id<FIndex>)index;
-- (FIndexedNode *)updateChild:(NSString *)key
-                 withNewChild:(id<FNode>)newChildNode;
-- (FIndexedNode *)updatePriority:(id<FNode>)priority;
-
-- (FNamedNode *)firstChild;
-- (FNamedNode *)lastChild;
-
-- (NSString *)predecessorForChildKey:(NSString *)childKey
-                           childNode:(id<FNode>)childNode
-                               index:(id<FIndex>)index;
-
-- (void)enumerateChildrenReverse:(BOOL)reverse
-                      usingBlock:(void (^)(NSString *key, id<FNode> node,
-                                           BOOL *stop))block;
-
-- (NSEnumerator *)childEnumerator;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FIndexedNode.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FIndexedNode.m
deleted file mode 100644
index dafe9c3..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FIndexedNode.m
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FIndexedNode.h"
-
-#import "FChildrenNode.h"
-#import "FImmutableSortedSet.h"
-#import "FIndex.h"
-#import "FKeyIndex.h"
-#import "FPriorityIndex.h"
-
-static FImmutableSortedSet *FALLBACK_INDEX;
-
-@interface FIndexedNode ()
-
-@property(nonatomic, strong) id<FNode> node;
-/**
- * The indexed set is initialized lazily to prevent creation when it is not
- * needed
- */
-@property(nonatomic, strong) FImmutableSortedSet *indexed;
-@property(nonatomic, strong) id<FIndex> index;
-
-@end
-
-@implementation FIndexedNode
-
-+ (FImmutableSortedSet *)fallbackIndex {
-    static FImmutableSortedSet *fallbackIndex;
-    static dispatch_once_t once;
-    dispatch_once(&once, ^{
-      fallbackIndex = [[FImmutableSortedSet alloc] init];
-    });
-    return fallbackIndex;
-}
-
-+ (FIndexedNode *)indexedNodeWithNode:(id<FNode>)node {
-    return [[FIndexedNode alloc] initWithNode:node
-                                        index:[FPriorityIndex priorityIndex]];
-}
-
-+ (FIndexedNode *)indexedNodeWithNode:(id<FNode>)node index:(id<FIndex>)index {
-    return [[FIndexedNode alloc] initWithNode:node index:index];
-}
-
-- (id)initWithNode:(id<FNode>)node index:(id<FIndex>)index {
-    // Initialize indexed lazily
-    return [self initWithNode:node index:index indexed:nil];
-}
-
-- (id)initWithNode:(id<FNode>)node
-             index:(id<FIndex>)index
-           indexed:(FImmutableSortedSet *)indexed {
-    self = [super init];
-    if (self != nil) {
-        self->_node = node;
-        self->_index = index;
-        self->_indexed = indexed;
-    }
-    return self;
-}
-
-- (void)ensureIndexed {
-    if (!self.indexed) {
-        if ([self.index isEqual:[FKeyIndex keyIndex]]) {
-            self.indexed = [FIndexedNode fallbackIndex];
-        } else {
-            __block BOOL sawChild = NO;
-            [self.node enumerateChildrenUsingBlock:^(
-                           NSString *key, id<FNode> node, BOOL *stop) {
-              sawChild = sawChild || [self.index isDefinedOn:node];
-              *stop = sawChild;
-            }];
-            if (sawChild) {
-                NSMutableDictionary *dict = [NSMutableDictionary dictionary];
-                [self.node enumerateChildrenUsingBlock:^(
-                               NSString *key, id<FNode> node, BOOL *stop) {
-                  FNamedNode *namedNode =
-                      [[FNamedNode alloc] initWithName:key andNode:node];
-                  dict[namedNode] = [NSNull null];
-                }];
-                // Make sure to assign index here, because the comparator will
-                // be retained and using self will cause a cycle
-                id<FIndex> index = self.index;
-                self.indexed = [FImmutableSortedSet
-                    setWithKeysFromDictionary:dict
-                                   comparator:^NSComparisonResult(
-                                       FNamedNode *namedNode1,
-                                       FNamedNode *namedNode2) {
-                                     return [index compareNamedNode:namedNode1
-                                                        toNamedNode:namedNode2];
-                                   }];
-            } else {
-                self.indexed = [FIndexedNode fallbackIndex];
-            }
-        }
-    }
-}
-
-- (BOOL)hasIndex:(id<FIndex>)index {
-    return [self.index isEqual:index];
-}
-
-- (FIndexedNode *)updateChild:(NSString *)key
-                 withNewChild:(id<FNode>)newChildNode {
-    id<FNode> newNode = [self.node updateImmediateChild:key
-                                           withNewChild:newChildNode];
-    if (self.indexed == [FIndexedNode fallbackIndex] &&
-        ![self.index isDefinedOn:newChildNode]) {
-        // doesn't affect the index, no need to create an index
-        return [[FIndexedNode alloc] initWithNode:newNode
-                                            index:self.index
-                                          indexed:[FIndexedNode fallbackIndex]];
-    } else if (!self.indexed || self.indexed == [FIndexedNode fallbackIndex]) {
-        // No need to index yet, index lazily
-        return [[FIndexedNode alloc] initWithNode:newNode index:self.index];
-    } else {
-        id<FNode> oldChild = [self.node getImmediateChild:key];
-        FImmutableSortedSet *newIndexed = [self.indexed
-            removeObject:[FNamedNode nodeWithName:key node:oldChild]];
-        if (![newChildNode isEmpty]) {
-            newIndexed = [newIndexed
-                addObject:[FNamedNode nodeWithName:key node:newChildNode]];
-        }
-        return [[FIndexedNode alloc] initWithNode:newNode
-                                            index:self.index
-                                          indexed:newIndexed];
-    }
-}
-
-- (FIndexedNode *)updatePriority:(id<FNode>)priority {
-    return
-        [[FIndexedNode alloc] initWithNode:[self.node updatePriority:priority]
-                                     index:self.index
-                                   indexed:self.indexed];
-}
-
-- (FNamedNode *)firstChild {
-    if (![self.node isKindOfClass:[FChildrenNode class]]) {
-        return nil;
-    } else {
-        [self ensureIndexed];
-        if (self.indexed == [FIndexedNode fallbackIndex]) {
-            return [((FChildrenNode *)self.node) firstChild];
-        } else {
-            return self.indexed.firstObject;
-        }
-    }
-}
-
-- (FNamedNode *)lastChild {
-    if (![self.node isKindOfClass:[FChildrenNode class]]) {
-        return nil;
-    } else {
-        [self ensureIndexed];
-        if (self.indexed == [FIndexedNode fallbackIndex]) {
-            return [((FChildrenNode *)self.node) lastChild];
-        } else {
-            return self.indexed.lastObject;
-        }
-    }
-}
-
-- (NSString *)predecessorForChildKey:(NSString *)childKey
-                           childNode:(id<FNode>)childNode
-                               index:(id<FIndex>)index {
-    if (![self.index isEqual:index]) {
-        [NSException raise:NSInvalidArgumentException
-                    format:@"Index not available in IndexedNode!"];
-    }
-    [self ensureIndexed];
-    if (self.indexed == [FIndexedNode fallbackIndex]) {
-        return [self.node predecessorChildKey:childKey];
-    } else {
-        FNamedNode *node = [self.indexed
-            predecessorEntry:[FNamedNode nodeWithName:childKey node:childNode]];
-        return node.name;
-    }
-}
-
-- (void)enumerateChildrenReverse:(BOOL)reverse
-                      usingBlock:
-                          (void (^)(NSString *, id<FNode>, BOOL *))block {
-    [self ensureIndexed];
-    if (self.indexed == [FIndexedNode fallbackIndex]) {
-        [self.node enumerateChildrenReverse:reverse usingBlock:block];
-    } else {
-        [self.indexed
-            enumerateObjectsReverse:reverse
-                         usingBlock:^(FNamedNode *namedNode, BOOL *stop) {
-                           block(namedNode.name, namedNode.node, stop);
-                         }];
-    }
-}
-
-- (NSEnumerator *)childEnumerator {
-    [self ensureIndexed];
-    if (self.indexed == [FIndexedNode fallbackIndex]) {
-        return [self.node childEnumerator];
-    } else {
-        return [self.indexed objectEnumerator];
-    }
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FLeafNode.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FLeafNode.h
deleted file mode 100644
index 6bd2862..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FLeafNode.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FNode.h"
-#import <Foundation/Foundation.h>
-
-@interface FLeafNode : NSObject <FNode>
-
-- (id)initWithValue:(id)aValue;
-- (id)initWithValue:(id)aValue withPriority:(id<FNode>)aPriority;
-
-@property(nonatomic, strong) id value;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FLeafNode.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FLeafNode.m
deleted file mode 100644
index e741fd9..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FLeafNode.m
+++ /dev/null
@@ -1,266 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FLeafNode.h"
-#import "FChildrenNode.h"
-#import "FConstants.h"
-#import "FEmptyNode.h"
-#import "FImmutableSortedDictionary.h"
-#import "FSnapshotUtilities.h"
-#import "FStringUtilities.h"
-#import "FUtilities.h"
-
-@interface FLeafNode ()
-@property(nonatomic, strong) id<FNode> priorityNode;
-@property(nonatomic, strong) NSString *lazyHash;
-
-@end
-
-@implementation FLeafNode
-
-@synthesize value;
-@synthesize priorityNode;
-
-- (id)initWithValue:(id)aValue {
-    self = [super init];
-    if (self) {
-        self.value = aValue;
-        self.priorityNode = [FEmptyNode emptyNode];
-    }
-    return self;
-}
-
-- (id)initWithValue:(id)aValue withPriority:(id<FNode>)aPriority {
-    self = [super init];
-    if (self) {
-        self.value = aValue;
-        [FSnapshotUtilities validatePriorityNode:aPriority];
-        self.priorityNode = aPriority;
-    }
-    return self;
-}
-
-#pragma mark -
-#pragma mark FNode methods
-
-- (BOOL)isLeafNode {
-    return YES;
-}
-
-- (id<FNode>)getPriority {
-    return self.priorityNode;
-}
-
-- (id<FNode>)updatePriority:(id<FNode>)aPriority {
-    return [[FLeafNode alloc] initWithValue:self.value withPriority:aPriority];
-}
-
-- (id<FNode>)getImmediateChild:(NSString *)childName {
-    if ([childName isEqualToString:@".priority"]) {
-        return self.priorityNode;
-    } else {
-        return [FEmptyNode emptyNode];
-    }
-}
-
-- (id<FNode>)getChild:(FPath *)path {
-    if (path.getFront == nil) {
-        return self;
-    } else if ([[path getFront] isEqualToString:@".priority"]) {
-        return [self getPriority];
-    } else {
-        return [FEmptyNode emptyNode];
-    }
-}
-
-- (BOOL)hasChild:(NSString *)childName {
-    return
-        [childName isEqualToString:@".priority"] && ![self getPriority].isEmpty;
-}
-
-- (NSString *)predecessorChildKey:(NSString *)childKey {
-    return nil;
-}
-
-- (id<FNode>)updateImmediateChild:(NSString *)childName
-                     withNewChild:(id<FNode>)newChildNode {
-    if ([childName isEqualToString:@".priority"]) {
-        return [self updatePriority:newChildNode];
-    } else if (newChildNode.isEmpty) {
-        return self;
-    } else {
-        FChildrenNode *childrenNode = [[FChildrenNode alloc] init];
-        childrenNode = [childrenNode updateImmediateChild:childName
-                                             withNewChild:newChildNode];
-        childrenNode = [childrenNode updatePriority:self.priorityNode];
-        return childrenNode;
-    }
-}
-
-- (id<FNode>)updateChild:(FPath *)path withNewChild:(id<FNode>)newChildNode {
-    NSString *front = [path getFront];
-    if (front == nil) {
-        return newChildNode;
-    } else if (newChildNode.isEmpty && ![front isEqualToString:@".priority"]) {
-        return self;
-    } else {
-        NSAssert(![front isEqualToString:@".priority"] || path.length == 1,
-                 @".priority must be the last token in a path.");
-        return [self updateImmediateChild:front
-                             withNewChild:[[FEmptyNode emptyNode]
-                                               updateChild:[path popFront]
-                                              withNewChild:newChildNode]];
-    }
-}
-
-- (id)val {
-    return [self valForExport:NO];
-}
-
-- (id)valForExport:(BOOL)exp {
-    if (exp && !self.getPriority.isEmpty) {
-        return @{
-            kPayloadValue : self.value,
-            kPayloadPriority : [[self getPriority] val]
-        };
-    } else {
-        return self.value;
-    }
-}
-
-- (BOOL)isEqual:(id<FNode>)other {
-    if (other == self) {
-        return YES;
-    } else if (other.isLeafNode) {
-        FLeafNode *otherLeaf = other;
-        if ([FUtilities getJavascriptType:self.value] !=
-            [FUtilities getJavascriptType:otherLeaf.value]) {
-            return NO;
-        }
-        return [otherLeaf.value isEqual:self.value] &&
-               [otherLeaf.priorityNode isEqual:self.priorityNode];
-    } else {
-        return NO;
-    }
-}
-
-- (NSUInteger)hash {
-    return [self.value hash] * 17 + self.priorityNode.hash;
-}
-
-- (id<FNode>)withIndex:(id<FIndex>)index {
-    return self;
-}
-
-- (BOOL)isIndexed:(id<FIndex>)index {
-    return YES;
-}
-
-- (BOOL)isEmpty {
-    return NO;
-}
-
-- (int)numChildren {
-    return 0;
-}
-
-- (void)enumerateChildrenUsingBlock:(void (^)(NSString *, id<FNode>,
-                                              BOOL *))block {
-    // Nothing to iterate over
-}
-
-- (void)enumerateChildrenReverse:(BOOL)reverse
-                      usingBlock:
-                          (void (^)(NSString *, id<FNode>, BOOL *))block {
-    // Nothing to iterate over
-}
-
-- (NSEnumerator *)childEnumerator {
-    // Nothing to iterate over
-    return [@[] objectEnumerator];
-}
-
-- (NSString *)dataHash {
-    if (self.lazyHash == nil) {
-        NSMutableString *toHash = [[NSMutableString alloc] init];
-        [FSnapshotUtilities
-            appendHashRepresentationForLeafNode:self
-                                       toString:toHash
-                                    hashVersion:FDataHashVersionV1];
-
-        self.lazyHash = [FStringUtilities base64EncodedSha1:toHash];
-    }
-    return self.lazyHash;
-}
-
-- (NSComparisonResult)compare:(id<FNode>)other {
-    if (other == [FEmptyNode emptyNode]) {
-        return NSOrderedDescending;
-    } else if ([other isKindOfClass:[FChildrenNode class]]) {
-        return NSOrderedAscending;
-    } else {
-        NSAssert(other.isLeafNode, @"Compared against unknown type of node.");
-        return [self compareToLeafNode:(FLeafNode *)other];
-    }
-}
-
-+ (NSArray *)valueTypeOrder {
-    static NSArray *valueOrder = nil;
-    static dispatch_once_t once;
-    dispatch_once(&once, ^{
-      valueOrder = @[
-          kJavaScriptObject, kJavaScriptBoolean, kJavaScriptNumber,
-          kJavaScriptString
-      ];
-    });
-    return valueOrder;
-}
-
-- (NSComparisonResult)compareToLeafNode:(FLeafNode *)other {
-    NSString *thisLeafType = [FUtilities getJavascriptType:self.value];
-    NSString *otherLeafType = [FUtilities getJavascriptType:other.value];
-    NSUInteger thisIndex =
-        [[FLeafNode valueTypeOrder] indexOfObject:thisLeafType];
-    NSUInteger otherIndex =
-        [[FLeafNode valueTypeOrder] indexOfObject:otherLeafType];
-    assert(thisIndex >= 0 && otherIndex >= 0);
-    if (otherIndex == thisIndex) {
-        // Same type.  Compare values.
-        if (thisLeafType == kJavaScriptObject) {
-            // Deferred value nodes are all equal, but we should also never get
-            // to this point...
-            return NSOrderedSame;
-        } else if (thisLeafType == kJavaScriptString) {
-            return [self.value compare:other.value options:NSLiteralSearch];
-        } else {
-            return [self.value compare:other.value];
-        }
-    } else {
-        return thisIndex > otherIndex ? NSOrderedDescending
-                                      : NSOrderedAscending;
-    }
-}
-
-- (NSString *)description {
-    return [[self valForExport:YES] description];
-}
-
-- (void)forEachChildDo:(fbt_bool_nsstring_node)action {
-    // There are no children, so there is nothing to do.
-    return;
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FNode.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FNode.h
deleted file mode 100644
index ea251b6..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FNode.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FPath.h"
-#import "FTypedefs_Private.h"
-#import <Foundation/Foundation.h>
-
-@protocol FIndex;
-
-@protocol FNode <NSObject>
-
-- (BOOL)isLeafNode;
-- (id<FNode>)getPriority;
-- (id<FNode>)updatePriority:(id<FNode>)priority;
-- (id<FNode>)getImmediateChild:(NSString *)childKey;
-- (id<FNode>)getChild:(FPath *)path;
-- (NSString *)predecessorChildKey:(NSString *)childKey;
-- (id<FNode>)updateImmediateChild:(NSString *)childKey
-                     withNewChild:(id<FNode>)newChildNode;
-- (id<FNode>)updateChild:(FPath *)path withNewChild:(id<FNode>)newChildNode;
-- (BOOL)hasChild:(NSString *)childKey;
-- (BOOL)isEmpty;
-- (int)numChildren;
-- (id)val;
-- (id)valForExport:(BOOL)exp;
-- (NSString *)dataHash;
-- (NSComparisonResult)compare:(id<FNode>)other;
-- (BOOL)isEqual:(id<FNode>)other;
-- (void)enumerateChildrenUsingBlock:(void (^)(NSString *key, id<FNode> node,
-                                              BOOL *stop))block;
-- (void)enumerateChildrenReverse:(BOOL)reverse
-                      usingBlock:(void (^)(NSString *key, id<FNode> node,
-                                           BOOL *stop))block;
-
-- (NSEnumerator *)childEnumerator;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FSnapshotUtilities.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FSnapshotUtilities.h
deleted file mode 100644
index bf44660..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FSnapshotUtilities.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FNode.h"
-#import <Foundation/Foundation.h>
-
-@class FImmutableSortedDictionary;
-@class FCompoundWrite;
-@class FLeafNode;
-@protocol FNode;
-
-typedef NS_ENUM(NSInteger, FDataHashVersion) {
-    FDataHashVersionV1,
-    FDataHashVersionV2,
-};
-
-@interface FSnapshotUtilities : NSObject
-
-+ (id<FNode>)nodeFrom:(id)val;
-+ (id<FNode>)nodeFrom:(id)val priority:(id)priority;
-+ (id<FNode>)nodeFrom:(id)val withValidationFrom:(NSString *)fn;
-+ (id<FNode>)nodeFrom:(id)val
-              priority:(id)priority
-    withValidationFrom:(NSString *)fn;
-+ (FCompoundWrite *)compoundWriteFromDictionary:(NSDictionary *)values
-                             withValidationFrom:(NSString *)fn;
-+ (void)validatePriorityNode:(id<FNode>)priorityNode;
-+ (void)appendHashRepresentationForLeafNode:(FLeafNode *)val
-                                   toString:(NSMutableString *)string
-                                hashVersion:(FDataHashVersion)hashVersion;
-+ (void)appendHashV2RepresentationForString:(NSString *)string
-                                   toString:(NSMutableString *)mutableString;
-
-+ (NSUInteger)estimateSerializedNodeSize:(id<FNode>)node;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FSnapshotUtilities.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FSnapshotUtilities.m
deleted file mode 100644
index f3f9ed5..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FSnapshotUtilities.m
+++ /dev/null
@@ -1,394 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FSnapshotUtilities.h"
-#import "FChildrenNode.h"
-#import "FCompoundWrite.h"
-#import "FConstants.h"
-#import "FEmptyNode.h"
-#import "FLLRBValueNode.h"
-#import "FLeafNode.h"
-#import "FMaxNode.h"
-#import "FNamedNode.h"
-#import "FUtilities.h"
-#import "FValidation.h"
-
-@implementation FSnapshotUtilities
-
-+ (id<FNode>)nodeFrom:(id)val {
-    return [FSnapshotUtilities nodeFrom:val priority:nil];
-}
-
-+ (id<FNode>)nodeFrom:(id)val priority:(id)priority {
-    return [FSnapshotUtilities nodeFrom:val
-                               priority:priority
-                     withValidationFrom:@"nodeFrom:priority:"];
-}
-
-+ (id<FNode>)nodeFrom:(id)val withValidationFrom:(NSString *)fn {
-    return [FSnapshotUtilities nodeFrom:val priority:nil withValidationFrom:fn];
-}
-
-+ (id<FNode>)nodeFrom:(id)val
-              priority:(id)priority
-    withValidationFrom:(NSString *)fn {
-    return [FSnapshotUtilities nodeFrom:val
-                               priority:priority
-                     withValidationFrom:fn
-                                atDepth:0
-                                   path:[[NSMutableArray alloc] init]];
-}
-
-+ (id<FNode>)nodeFrom:(id)val
-              priority:(id)aPriority
-    withValidationFrom:(NSString *)fn
-               atDepth:(int)depth
-                  path:(NSMutableArray *)path {
-    @autoreleasepool {
-        return [FSnapshotUtilities internalNodeFrom:val
-                                           priority:aPriority
-                                 withValidationFrom:fn
-                                            atDepth:depth
-                                               path:path];
-    }
-}
-
-+ (id<FNode>)internalNodeFrom:(id)val
-                     priority:(id)aPriority
-           withValidationFrom:(NSString *)fn
-                      atDepth:(int)depth
-                         path:(NSMutableArray *)path {
-
-    if (depth > kFirebaseMaxObjectDepth) {
-        NSRange range;
-        range.location = 0;
-        range.length = 100;
-        NSString *pathString =
-            [[path subarrayWithRange:range] componentsJoinedByString:@"."];
-        @throw [[NSException alloc]
-            initWithName:@"InvalidFirebaseData"
-                  reason:[NSString stringWithFormat:
-                                       @"(%@) Max object depth exceeded: %@...",
-                                       fn, pathString]
-                userInfo:nil];
-    }
-
-    if (val == nil || val == [NSNull null]) {
-        // Null is a valid type to store
-        return [FEmptyNode emptyNode];
-    }
-
-    [FValidation validateFrom:fn isValidPriorityValue:aPriority withPath:path];
-    id<FNode> priority = [FSnapshotUtilities nodeFrom:aPriority];
-
-    id value = val;
-    BOOL isLeafNode = NO;
-
-    if ([value isKindOfClass:[NSDictionary class]]) {
-        NSDictionary *dict = val;
-        if (dict[kPayloadPriority] != nil) {
-            id rawPriority = [dict objectForKey:kPayloadPriority];
-            [FValidation validateFrom:fn
-                 isValidPriorityValue:rawPriority
-                             withPath:path];
-            priority = [FSnapshotUtilities nodeFrom:rawPriority];
-        }
-
-        if (dict[kPayloadValue] != nil) {
-            value = [dict objectForKey:kPayloadValue];
-            if ([FValidation validateFrom:fn
-                         isValidLeafValue:value
-                                 withPath:path]) {
-                isLeafNode = YES;
-            } else {
-                @throw [[NSException alloc]
-                    initWithName:@"InvalidLeafValueType"
-                          reason:[NSString stringWithFormat:
-                                               @"(%@) Invalid data type used "
-                                               @"with .value. Can only use "
-                                                "NSString and NSNumber or be "
-                                                "null. Found %@ instead.",
-                                               fn, [[value class] description]]
-                        userInfo:nil];
-            }
-        }
-    }
-
-    if ([FValidation validateFrom:fn isValidLeafValue:value withPath:path]) {
-        isLeafNode = YES;
-    }
-
-    if (isLeafNode) {
-        return [[FLeafNode alloc] initWithValue:value withPriority:priority];
-    }
-
-    // Unlike with JS, we have to handle the dictionary and array cases
-    // separately.
-    if ([value isKindOfClass:[NSDictionary class]]) {
-        NSDictionary *dval = (NSDictionary *)value;
-        NSMutableDictionary *children =
-            [NSMutableDictionary dictionaryWithCapacity:dval.count];
-
-        // Avoid creating a million newPaths by appending to old one
-        for (id keyId in dval) {
-            [FValidation validateFrom:fn
-                   validDictionaryKey:keyId
-                             withPath:path];
-            NSString *key = (NSString *)keyId;
-
-            if (![key hasPrefix:kPayloadMetadataPrefix]) {
-                [path addObject:key];
-                id<FNode> childNode = [FSnapshotUtilities nodeFrom:dval[key]
-                                                          priority:nil
-                                                withValidationFrom:fn
-                                                           atDepth:depth + 1
-                                                              path:path];
-                [path removeLastObject];
-
-                if (![childNode isEmpty]) {
-                    children[key] = childNode;
-                }
-            }
-        }
-
-        if ([children count] == 0) {
-            return [FEmptyNode emptyNode];
-        } else {
-            FImmutableSortedDictionary *childrenDict =
-                [FImmutableSortedDictionary
-                    fromDictionary:children
-                    withComparator:[FUtilities keyComparator]];
-            return [[FChildrenNode alloc] initWithPriority:priority
-                                                  children:childrenDict];
-        }
-    } else if ([value isKindOfClass:[NSArray class]]) {
-        NSArray *aval = (NSArray *)value;
-        NSMutableDictionary *children =
-            [NSMutableDictionary dictionaryWithCapacity:aval.count];
-
-        for (int i = 0; i < [aval count]; i++) {
-            NSString *key = [NSString stringWithFormat:@"%i", i];
-            [path addObject:key];
-            id<FNode> childNode =
-                [FSnapshotUtilities nodeFrom:[aval objectAtIndex:i]
-                                    priority:nil
-                          withValidationFrom:fn
-                                     atDepth:depth + 1
-                                        path:path];
-            [path removeLastObject];
-
-            if (![childNode isEmpty]) {
-                children[key] = childNode;
-            }
-        }
-
-        if ([children count] == 0) {
-            return [FEmptyNode emptyNode];
-        } else {
-            FImmutableSortedDictionary *childrenDict =
-                [FImmutableSortedDictionary
-                    fromDictionary:children
-                    withComparator:[FUtilities keyComparator]];
-            return [[FChildrenNode alloc] initWithPriority:priority
-                                                  children:childrenDict];
-        }
-    } else {
-        NSRange range;
-        range.location = 0;
-        range.length = MIN(path.count, 50);
-        NSString *pathString =
-            [[path subarrayWithRange:range] componentsJoinedByString:@"."];
-
-        @throw [[NSException alloc]
-            initWithName:@"InvalidFirebaseData"
-                  reason:[NSString
-                             stringWithFormat:
-                                 @"(%@) Cannot store object of type %@ at %@. "
-                                  "Can only store objects of type NSNumber, "
-                                  "NSString, NSDictionary, and NSArray.",
-                                 fn, [[value class] description], pathString]
-                userInfo:nil];
-    }
-}
-
-+ (FCompoundWrite *)compoundWriteFromDictionary:(NSDictionary *)values
-                             withValidationFrom:(NSString *)fn {
-    FCompoundWrite *compoundWrite = [FCompoundWrite emptyWrite];
-
-    NSMutableArray *updatePaths =
-        [NSMutableArray arrayWithCapacity:values.count];
-    for (NSString *keyId in values) {
-        id value = values[keyId];
-        [FValidation validateFrom:fn
-            validUpdateDictionaryKey:keyId
-                           withValue:value];
-
-        FPath *path = [FPath pathWithString:keyId];
-        id<FNode> node = [FSnapshotUtilities nodeFrom:value
-                                   withValidationFrom:fn];
-
-        [updatePaths addObject:path];
-        compoundWrite = [compoundWrite addWrite:node atPath:path];
-    }
-
-    // Check that the update paths are not descendants of each other.
-    [updatePaths
-        sortUsingComparator:^NSComparisonResult(FPath *left, FPath *right) {
-          return [left compare:right];
-        }];
-    FPath *prevPath = nil;
-    for (FPath *path in updatePaths) {
-        if (prevPath != nil && [prevPath contains:path]) {
-            @throw [[NSException alloc]
-                initWithName:@"InvalidFirebaseData"
-                      reason:[NSString stringWithFormat:
-                                           @"(%@) Invalid path in object. Path "
-                                           @"(%@) is an ancestor of (%@).",
-                                           fn, prevPath, path]
-                    userInfo:nil];
-        }
-        prevPath = path;
-    }
-
-    return compoundWrite;
-}
-
-+ (void)validatePriorityNode:(id<FNode>)priorityNode {
-    assert(priorityNode != nil);
-    if (priorityNode.isLeafNode) {
-        id val = priorityNode.val;
-        if ([val isKindOfClass:[NSDictionary class]]) {
-            NSDictionary *valDict __unused = (NSDictionary *)val;
-            NSAssert(valDict[kServerValueSubKey] != nil,
-                     @"Priority can't be object unless it's a deferred value");
-        } else {
-            NSString *jsType __unused = [FUtilities getJavascriptType:val];
-            NSAssert(jsType == kJavaScriptString || jsType == kJavaScriptNumber,
-                     @"Priority of unexpected type.");
-        }
-    } else {
-        NSAssert(priorityNode == [FMaxNode maxNode] || priorityNode.isEmpty,
-                 @"Priority of unexpected type.");
-    }
-    // Don't call getPriority() on MAX_NODE to avoid hitting assertion.
-    NSAssert(priorityNode == [FMaxNode maxNode] ||
-                 priorityNode.getPriority.isEmpty,
-             @"Priority nodes can't have a priority of their own.");
-}
-
-+ (void)appendHashRepresentationForLeafNode:(FLeafNode *)leafNode
-                                   toString:(NSMutableString *)string
-                                hashVersion:(FDataHashVersion)hashVersion {
-    NSAssert(hashVersion == FDataHashVersionV1 ||
-                 hashVersion == FDataHashVersionV2,
-             @"Unknown hash version: %lu", (unsigned long)hashVersion);
-    if (!leafNode.getPriority.isEmpty) {
-        [string appendString:@"priority:"];
-        [FSnapshotUtilities
-            appendHashRepresentationForLeafNode:leafNode.getPriority
-                                       toString:string
-                                    hashVersion:hashVersion];
-        [string appendString:@":"];
-    }
-
-    NSString *jsType = [FUtilities getJavascriptType:leafNode.val];
-    [string appendString:jsType];
-    [string appendString:@":"];
-
-    if (jsType == kJavaScriptBoolean) {
-        NSString *boolString =
-            [leafNode.val boolValue] ? kJavaScriptTrue : kJavaScriptFalse;
-        [string appendString:boolString];
-    } else if (jsType == kJavaScriptNumber) {
-        NSString *numberString =
-            [FUtilities ieee754StringForNumber:leafNode.val];
-        [string appendString:numberString];
-    } else if (jsType == kJavaScriptString) {
-        if (hashVersion == FDataHashVersionV1) {
-            [string appendString:leafNode.val];
-        } else {
-            NSAssert(hashVersion == FDataHashVersionV2,
-                     @"Invalid hash version found");
-            [FSnapshotUtilities appendHashV2RepresentationForString:leafNode.val
-                                                           toString:string];
-        }
-    } else {
-        [NSException raise:NSInvalidArgumentException
-                    format:@"Unknown value for hashing: %@", leafNode];
-    }
-}
-
-+ (void)appendHashV2RepresentationForString:(NSString *)string
-                                   toString:(NSMutableString *)mutableString {
-    string = [string stringByReplacingOccurrencesOfString:@"\\"
-                                               withString:@"\\\\"];
-    string = [string stringByReplacingOccurrencesOfString:@"\""
-                                               withString:@"\\\""];
-    [mutableString appendString:@"\""];
-    [mutableString appendString:string];
-    [mutableString appendString:@"\""];
-}
-
-+ (NSUInteger)estimateLeafNodeSize:(FLeafNode *)leafNode {
-    NSString *jsType = [FUtilities getJavascriptType:leafNode.val];
-    // These values are somewhat arbitrary, but we don't need an exact value so
-    // prefer performance over exact value
-    NSUInteger valueSize;
-    if (jsType == kJavaScriptNumber) {
-        valueSize = 8; // estimate each float with 8 bytes
-    } else if (jsType == kJavaScriptBoolean) {
-        valueSize = 4; // true or false need roughly 4 bytes
-    } else if (jsType == kJavaScriptString) {
-        valueSize = 2 + [leafNode.val length]; // add 2 for quotes
-    } else {
-        [NSException raise:NSInvalidArgumentException
-                    format:@"Unknown leaf type: %@", leafNode];
-        return 0;
-    }
-
-    if (leafNode.getPriority.isEmpty) {
-        return valueSize;
-    } else {
-        // Account for extra overhead due to the extra JSON object and the
-        // ".value" and ".priority" keys, colons, comma
-        NSUInteger leafPriorityOverhead = 2 + 8 + 11 + 2 + 1;
-        return leafPriorityOverhead + valueSize +
-               [FSnapshotUtilities estimateLeafNodeSize:leafNode.getPriority];
-    }
-}
-
-+ (NSUInteger)estimateSerializedNodeSize:(id<FNode>)node {
-    if ([node isEmpty]) {
-        return 4; // null keyword
-    } else if ([node isLeafNode]) {
-        return [FSnapshotUtilities estimateLeafNodeSize:node];
-    } else {
-        NSAssert([node isKindOfClass:[FChildrenNode class]],
-                 @"Unexpected node type: %@", [node class]);
-        __block NSUInteger sum = 1; // opening brackets
-        [((FChildrenNode *)node) enumerateChildrenAndPriorityUsingBlock:^(
-                                     NSString *key, id<FNode> child,
-                                     BOOL *stop) {
-          sum += key.length;
-          sum +=
-              4; // quotes around key and colon and (comma or closing bracket)
-          sum += [FSnapshotUtilities estimateSerializedNodeSize:child];
-        }];
-        return sum;
-    }
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FAtomicNumber.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FAtomicNumber.h
deleted file mode 100644
index b8668d2..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FAtomicNumber.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@interface FAtomicNumber : NSObject
-
-- (NSNumber *)getAndIncrement;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FAtomicNumber.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FAtomicNumber.m
deleted file mode 100644
index 20cfd8d..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FAtomicNumber.m
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FAtomicNumber.h"
-
-@interface FAtomicNumber () {
-    unsigned long number;
-}
-
-@property(nonatomic, strong) NSLock *lock;
-
-@end
-
-@implementation FAtomicNumber
-
-@synthesize lock;
-
-- (id)init {
-    self = [super init];
-    if (self) {
-        number = 1;
-        self.lock = [[NSLock alloc] init];
-    }
-    return self;
-}
-
-- (NSNumber *)getAndIncrement {
-    NSNumber *result;
-
-    // See:
-    // http://developer.apple.com/library/ios/#DOCUMENTATION/Cocoa/Conceptual/Multithreading/ThreadSafety/ThreadSafety.html#//apple_ref/doc/uid/10000057i-CH8-SW14
-    // to improve, etc.
-
-    [self.lock lock];
-    result = [NSNumber numberWithUnsignedLong:number];
-    number = number + 1;
-    [self.lock unlock];
-
-    return result;
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FEventEmitter.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FEventEmitter.h
deleted file mode 100644
index fc19ca7..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FEventEmitter.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FIRDatabaseConfig.h"
-#import "FIRDatabaseQuery.h"
-#import "FTypedefs_Private.h"
-
-@interface FEventEmitter : NSObject
-
-- (id)initWithAllowedEvents:(NSArray *)theAllowedEvents
-                      queue:(dispatch_queue_t)queue;
-
-- (id)getInitialEventForType:(NSString *)eventType;
-- (void)triggerEventType:(NSString *)eventType data:(id)data;
-
-- (FIRDatabaseHandle)observeEventType:(NSString *)eventType
-                            withBlock:(fbt_void_id)block;
-- (void)removeObserverForEventType:(NSString *)eventType
-                        withHandle:(FIRDatabaseHandle)handle;
-
-- (void)validateEventType:(NSString *)eventType;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FEventEmitter.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FEventEmitter.m
deleted file mode 100644
index 7d02239..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FEventEmitter.m
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FEventEmitter.h"
-#import "FIRDatabaseQuery_Private.h"
-#import "FRepoManager.h"
-#import "FUtilities.h"
-
-@interface FEventListener : NSObject
-
-@property(nonatomic, copy) fbt_void_id userCallback;
-@property(nonatomic) FIRDatabaseHandle handle;
-
-@end
-
-@implementation FEventListener
-
-@synthesize userCallback;
-@synthesize handle;
-
-@end
-
-@interface FEventEmitter ()
-
-@property(nonatomic, strong) NSArray *allowedEvents;
-@property(nonatomic, strong) NSMutableDictionary *listeners;
-@property(nonatomic, strong) dispatch_queue_t queue;
-
-@end
-
-@implementation FEventEmitter
-
-@synthesize allowedEvents;
-@synthesize listeners;
-
-- (id)initWithAllowedEvents:(NSArray *)theAllowedEvents
-                      queue:(dispatch_queue_t)queue {
-    if (theAllowedEvents == nil || [theAllowedEvents count] == 0) {
-        @throw [NSException
-            exceptionWithName:@"AllowedEventsValidation"
-                       reason:@"FEventEmitters must be initialized with at "
-                              @"least one valid event."
-                     userInfo:nil];
-    }
-
-    self = [super init];
-
-    if (self) {
-        self.allowedEvents = [theAllowedEvents copy];
-        self.listeners = [[NSMutableDictionary alloc] init];
-        self.queue = queue;
-    }
-
-    return self;
-}
-
-- (id)getInitialEventForType:(NSString *)eventType {
-    @throw [NSException exceptionWithName:NSInternalInconsistencyException
-                                   reason:@"You must override getInitialEvent: "
-                                          @"when subclassing FEventEmitter"
-                                 userInfo:nil];
-}
-
-- (void)triggerEventType:(NSString *)eventType data:(id)data {
-    [self validateEventType:eventType];
-    NSMutableDictionary *eventTypeListeners =
-        [self.listeners objectForKey:eventType];
-    for (FEventListener *listener in eventTypeListeners) {
-        [self triggerListener:listener withData:data];
-    }
-}
-
-- (void)triggerListener:(FEventListener *)listener withData:(id)data {
-    // TODO, should probably get this from FRepo or something although it ends
-    // up being the same. (Except maybe for testing)
-    if (listener.userCallback) {
-        dispatch_async(self.queue, ^{
-          listener.userCallback(data);
-        });
-    }
-}
-
-- (FIRDatabaseHandle)observeEventType:(NSString *)eventType
-                            withBlock:(fbt_void_id)block {
-    [self validateEventType:eventType];
-
-    // Create listener
-    FEventListener *listener = [[FEventListener alloc] init];
-    listener.handle = [[FUtilities LUIDGenerator] integerValue];
-    listener.userCallback = block; // copies block automatically
-
-    dispatch_async([FIRDatabaseQuery sharedQueue], ^{
-      [self addEventListener:listener forEventType:eventType];
-    });
-
-    return listener.handle;
-}
-
-- (void)addEventListener:(FEventListener *)listener
-            forEventType:(NSString *)eventType {
-    // Get or initializer listeners map [FIRDatabaseHandle -> callback block]
-    // for eventType
-    NSMutableArray *eventTypeListeners =
-        [self.listeners objectForKey:eventType];
-    if (eventTypeListeners == nil) {
-        eventTypeListeners = [[NSMutableArray alloc] init];
-        [self.listeners setObject:eventTypeListeners forKey:eventType];
-    }
-
-    // Add listener and fire the current event for this listener
-    [eventTypeListeners addObject:listener];
-    id initialData = [self getInitialEventForType:eventType];
-    [self triggerListener:listener withData:initialData];
-}
-
-- (void)removeObserverForEventType:(NSString *)eventType
-                        withHandle:(FIRDatabaseHandle)handle {
-    [self validateEventType:eventType];
-
-    dispatch_async([FIRDatabaseQuery sharedQueue], ^{
-      [self removeEventListenerWithHandle:handle forEventType:eventType];
-    });
-}
-
-- (void)removeEventListenerWithHandle:(FIRDatabaseHandle)handle
-                         forEventType:(NSString *)eventType {
-    NSMutableArray *eventTypeListeners =
-        [self.listeners objectForKey:eventType];
-    for (FEventListener *listener in [eventTypeListeners copy]) {
-        if (handle == NSNotFound || handle == listener.handle) {
-            [eventTypeListeners removeObject:listener];
-        }
-    }
-}
-
-- (void)validateEventType:(NSString *)eventType {
-    if ([self.allowedEvents indexOfObject:eventType] == NSNotFound) {
-        @throw [NSException
-            exceptionWithName:@"InvalidEventType"
-                       reason:[NSString stringWithFormat:
-                                            @"%@ is not a valid event type. %@ "
-                                            @"is the list of valid events.",
-                                            eventType, self.allowedEvents]
-                     userInfo:nil];
-    }
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FNextPushId.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FNextPushId.h
deleted file mode 100644
index 5a66196..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FNextPushId.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@interface FNextPushId : NSObject
-
-+ (NSString *)get:(NSTimeInterval)now;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FNextPushId.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FNextPushId.m
deleted file mode 100644
index 864e147..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FNextPushId.m
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FNextPushId.h"
-#import "FUtilities.h"
-
-static NSString *const PUSH_CHARS =
-    @"-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz";
-
-@implementation FNextPushId
-
-+ (NSString *)get:(NSTimeInterval)currentTime {
-    static long long lastPushTime = 0;
-    static int lastRandChars[12];
-
-    long long now = (long long)(currentTime * 1000);
-
-    BOOL duplicateTime = now == lastPushTime;
-    lastPushTime = now;
-
-    unichar timeStampChars[8];
-    for (int i = 7; i >= 0; i--) {
-        timeStampChars[i] = [PUSH_CHARS characterAtIndex:(now % 64)];
-        now = (long long)floor(now / 64);
-    }
-
-    NSMutableString *id = [[NSMutableString alloc] init];
-    [id appendString:[NSString stringWithCharacters:timeStampChars length:8]];
-
-    if (!duplicateTime) {
-        for (int i = 0; i < 12; i++) {
-            lastRandChars[i] = (int)floor(arc4random() % 64);
-        }
-    } else {
-        int i = 0;
-        for (i = 11; i >= 0 && lastRandChars[i] == 63; i--) {
-            lastRandChars[i] = 0;
-        }
-        lastRandChars[i]++;
-    }
-
-    for (int i = 0; i < 12; i++) {
-        [id appendFormat:@"%C", [PUSH_CHARS characterAtIndex:lastRandChars[i]]];
-    }
-
-    return [NSString stringWithString:id];
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FParsedUrl.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FParsedUrl.h
deleted file mode 100644
index 1c07284..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FParsedUrl.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FPath.h"
-#import "FRepoInfo.h"
-
-@interface FParsedUrl : NSObject
-
-@property(nonatomic, strong) FRepoInfo *repoInfo;
-@property(nonatomic, strong) FPath *path;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FParsedUrl.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FParsedUrl.m
deleted file mode 100644
index eb83330..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FParsedUrl.m
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FParsedUrl.h"
-
-@implementation FParsedUrl
-
-@synthesize repoInfo;
-@synthesize path;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FStringUtilities.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FStringUtilities.h
deleted file mode 100644
index f7d19b6..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FStringUtilities.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@interface FStringUtilities : NSObject
-
-+ (NSString *)base64EncodedSha1:(NSString *)str;
-+ (NSString *)urlDecoded:(NSString *)url;
-+ (NSString *)urlEncoded:(NSString *)url;
-+ (NSString *)sanitizedForUserAgent:(NSString *)str;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FStringUtilities.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FStringUtilities.m
deleted file mode 100644
index 2515257..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FStringUtilities.m
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FStringUtilities.h"
-#import "NSData+SRB64Additions.h"
-#import <CommonCrypto/CommonDigest.h>
-
-@implementation FStringUtilities
-
-// http://stackoverflow.com/questions/3468268/objective-c-sha1
-// http://stackoverflow.com/questions/7310457/ios-objective-c-sha-1-and-base64-problem
-+ (NSString *)base64EncodedSha1:(NSString *)str {
-    const char *cstr = [str cStringUsingEncoding:NSUTF8StringEncoding];
-    // NSString reports length in characters, but we want it in bytes, which
-    // strlen will give us.
-    unsigned long dataLen = strlen(cstr);
-    NSData *data = [NSData dataWithBytes:cstr length:dataLen];
-    uint8_t digest[CC_SHA1_DIGEST_LENGTH];
-    CC_SHA1(data.bytes, (unsigned int)data.length, digest);
-    NSData *output = [[NSData alloc] initWithBytes:digest
-                                            length:CC_SHA1_DIGEST_LENGTH];
-    return [FSRUtilities base64EncodedStringFromData:output];
-}
-
-+ (NSString *)urlDecoded:(NSString *)url {
-    NSString *replaced = [url stringByReplacingOccurrencesOfString:@"+"
-                                                        withString:@" "];
-    NSString *decoded = [replaced stringByRemovingPercentEncoding];
-    // This is kind of a hack, but is generally how the js client works. We
-    // could run into trouble if some piece is a correctly escaped %-sequence,
-    // and another isn't. But, that's bad input anyways...
-    if (decoded) {
-        return decoded;
-    } else {
-        return replaced;
-    }
-}
-
-+ (NSString *)urlEncoded:(NSString *)url {
-    // Didn't seem like there was an Apple NSCharacterSet that had our version
-    // of the encoding So I made my own, following RFC 2396
-    // https://www.ietf.org/rfc/rfc2396.txt allowedCharacters = alphanum | "-" |
-    // "_" | "~"
-    NSCharacterSet *allowedCharacters = [NSCharacterSet
-        characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyzABCDEFGH"
-                                           @"IJKLMNOPQRSTUVWXYZ0123456789-_~"];
-    return [url
-        stringByAddingPercentEncodingWithAllowedCharacters:allowedCharacters];
-}
-
-+ (NSString *)sanitizedForUserAgent:(NSString *)str {
-    return
-        [str stringByReplacingOccurrencesOfString:@"/|_"
-                                       withString:@"|"
-                                          options:NSRegularExpressionSearch
-                                            range:NSMakeRange(0, [str length])];
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FTypedefs.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FTypedefs.h
deleted file mode 100644
index 56d97ff..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FTypedefs.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#ifndef Firebase_FTypedefs_h
-#define Firebase_FTypedefs_h
-
-/**
- * Stub...
- */
-@class FIRDataSnapshot;
-@class FIRDatabaseReference;
-@class FAuthData;
-@protocol FNode;
-
-// fbt = Firebase Block Typedef
-
-typedef void (^fbt_void_void)(void);
-typedef void (^fbt_void_datasnapshot_nsstring)(FIRDataSnapshot *snapshot,
-                                               NSString *prevName);
-typedef void (^fbt_void_datasnapshot)(FIRDataSnapshot *snapshot);
-typedef void (^fbt_void_user)(FAuthData *user);
-typedef void (^fbt_void_nsstring_id)(NSString *status, id data);
-typedef void (^fbt_void_nserror_id)(NSError *error, id data);
-typedef void (^fbt_void_nserror)(NSError *error);
-typedef void (^fbt_void_nserror_ref)(NSError *error, FIRDatabaseReference *ref);
-typedef void (^fbt_void_nserror_user)(NSError *error, FAuthData *user);
-typedef void (^fbt_void_nserror_json)(NSError *error, NSDictionary *json);
-typedef void (^fbt_void_nsdictionary)(NSDictionary *data);
-typedef id (^fbt_id_node_nsstring)(id<FNode> node, NSString *childName);
-
-#endif
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FUtilities.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FUtilities.h
deleted file mode 100644
index 9458f24..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FUtilities.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <FirebaseCore/FIRLogger.h>
-#import <Foundation/Foundation.h>
-
-#import "FParsedUrl.h"
-
-@interface FUtilities : NSObject
-
-+ (NSArray *)splitString:(NSString *)str intoMaxSize:(const unsigned int)size;
-+ (NSNumber *)LUIDGenerator;
-+ (FParsedUrl *)parseUrl:(NSString *)url;
-+ (NSString *)getJavascriptType:(id)obj;
-+ (NSError *)errorForStatus:(NSString *)status andReason:(NSString *)reason;
-+ (NSNumber *)intForString:(NSString *)string;
-+ (NSString *)ieee754StringForNumber:(NSNumber *)val;
-+ (void)setLoggingEnabled:(BOOL)enabled;
-+ (BOOL)getLoggingEnabled;
-
-+ (NSString *)minName;
-+ (NSString *)maxName;
-+ (NSComparisonResult)compareKey:(NSString *)a toKey:(NSString *)b;
-+ (NSComparator)stringComparator;
-+ (NSComparator)keyComparator;
-
-+ (double)randomDouble;
-
-@end
-
-typedef enum {
-    FLogLevelDebug = 1,
-    FLogLevelInfo = 2,
-    FLogLevelWarn = 3,
-    FLogLevelError = 4,
-    FLogLevelNone = 5
-} FLogLevel;
-
-// Log tags
-FOUNDATION_EXPORT NSString *const kFPersistenceLogTag;
-
-#define FFLog(code, format, ...) FFDebug((code), (format), ##__VA_ARGS__)
-
-#define FFDebug(code, format, ...)                                             \
-    do {                                                                       \
-        if (FFIsLoggingEnabled(FLogLevelDebug)) {                              \
-            FIRLogDebug(kFIRLoggerDatabase, (code), (format), ##__VA_ARGS__);  \
-        }                                                                      \
-    } while (0)
-
-#define FFInfo(code, format, ...)                                              \
-    do {                                                                       \
-        if (FFIsLoggingEnabled(FLogLevelInfo)) {                               \
-            FIRLogError(kFIRLoggerDatabase, (code), (format), ##__VA_ARGS__);  \
-        }                                                                      \
-    } while (0)
-
-#define FFWarn(code, format, ...)                                              \
-    do {                                                                       \
-        if (FFIsLoggingEnabled(FLogLevelWarn)) {                               \
-            FIRLogWarning(kFIRLoggerDatabase, (code), (format),                \
-                          ##__VA_ARGS__);                                      \
-        }                                                                      \
-    } while (0)
-
-extern FIRLoggerService kFIRLoggerDatabase;
-BOOL FFIsLoggingEnabled(FLogLevel logLevel);
-void firebaseUncaughtExceptionHandler(NSException *exception);
-void firebaseJobsTroll(void);
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FUtilities.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FUtilities.m
deleted file mode 100644
index a24c134..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FUtilities.m
+++ /dev/null
@@ -1,433 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FUtilities.h"
-#import "FAtomicNumber.h"
-#import "FConstants.h"
-#import "FStringUtilities.h"
-#import <FirebaseCore/FIRLogger.h>
-
-#define ARC4RANDOM_MAX 0x100000000
-#define INTEGER_32_MIN (-2147483648)
-#define INTEGER_32_MAX 2147483647
-
-#pragma mark -
-#pragma mark C functions
-
-FIRLoggerService kFIRLoggerDatabase = @"[Firebase/Database]";
-static FLogLevel logLevel = FLogLevelInfo; // Default log level is info
-static NSMutableDictionary *options = nil;
-
-BOOL FFIsLoggingEnabled(FLogLevel level) { return level >= logLevel; }
-
-void firebaseJobsTroll(void) {
-    FFLog(@"I-RDB095001",
-          @"password super secret; JFK conspiracy; Hello there! Having fun "
-          @"digging through Firebase? We're always hiring! jobs@firebase.com");
-}
-
-#pragma mark -
-#pragma mark Private property and singleton specification
-
-@interface FUtilities () {
-}
-
-@property(nonatomic, strong) FAtomicNumber *localUid;
-
-+ (FUtilities *)singleton;
-
-@end
-
-@implementation FUtilities
-
-@synthesize localUid;
-
-- (id)init {
-    self = [super init];
-    if (self) {
-        self.localUid = [[FAtomicNumber alloc] init];
-    }
-    return self;
-}
-
-// TODO: We really want to be able to set the log level
-+ (void)setLoggingEnabled:(BOOL)enabled {
-    logLevel = enabled ? FLogLevelDebug : FLogLevelInfo;
-}
-
-+ (BOOL)getLoggingEnabled {
-    return logLevel == FLogLevelDebug;
-}
-
-+ (FUtilities *)singleton {
-    static dispatch_once_t pred = 0;
-    __strong static id _sharedObject = nil;
-    dispatch_once(&pred, ^{
-      _sharedObject = [[self alloc] init]; // or some other init method
-    });
-    return _sharedObject;
-}
-
-// Refactor as a category of NSString
-+ (NSArray *)splitString:(NSString *)str intoMaxSize:(const unsigned int)size {
-    if (str.length <= size) {
-        return [NSArray arrayWithObject:str];
-    }
-
-    NSMutableArray *dataSegs = [[NSMutableArray alloc] init];
-    for (int c = 0; c < str.length; c += size) {
-        if (c + size > str.length) {
-            int rangeStart = c;
-            unsigned long rangeLength = size - ((c + size) - str.length);
-            [dataSegs
-                addObject:[str substringWithRange:NSMakeRange(rangeStart,
-                                                              rangeLength)]];
-        } else {
-            int rangeStart = c;
-            int rangeLength = size;
-            [dataSegs
-                addObject:[str substringWithRange:NSMakeRange(rangeStart,
-                                                              rangeLength)]];
-        }
-    }
-    return dataSegs;
-}
-
-+ (NSNumber *)LUIDGenerator {
-    FUtilities *f = [FUtilities singleton];
-    return [f.localUid getAndIncrement];
-}
-
-+ (NSString *)decodePath:(NSString *)pathString {
-    NSMutableArray *decodedPieces = [[NSMutableArray alloc] init];
-    NSArray *pieces = [pathString componentsSeparatedByString:@"/"];
-    for (NSString *piece in pieces) {
-        if (piece.length > 0) {
-            [decodedPieces addObject:[FStringUtilities urlDecoded:piece]];
-        }
-    }
-    return [NSString
-        stringWithFormat:@"/%@", [decodedPieces componentsJoinedByString:@"/"]];
-}
-
-+ (NSString *)extractPathFromUrlString:(NSString *)url {
-    NSString *path = url;
-
-    NSRange schemeIndex = [path rangeOfString:@"//"];
-    if (schemeIndex.location != NSNotFound) {
-        path = [path substringFromIndex:schemeIndex.location + 2];
-    }
-
-    NSUInteger pathIndex = [path rangeOfString:@"/"].location;
-    if (pathIndex != NSNotFound) {
-        path = [path substringFromIndex:pathIndex + 1];
-    } else {
-        path = @"";
-    }
-
-    NSUInteger queryParamIndex = [path rangeOfString:@"?"].location;
-    if (queryParamIndex != NSNotFound) {
-        path = [path substringToIndex:queryParamIndex];
-    }
-
-    return path;
-}
-
-+ (FParsedUrl *)parseUrl:(NSString *)url {
-    // For backwards compatibility, support URLs without schemes on iOS.
-    if (![url containsString:@"://"]) {
-        url = [@"http://" stringByAppendingString:url];
-    }
-
-    NSString *originalPathString = [self extractPathFromUrlString:url];
-
-    // Sanitize the database URL by removing the path component, which may
-    // contain invalid URL characters.
-    NSString *sanitizedUrlWithoutPath =
-        [url stringByReplacingOccurrencesOfString:originalPathString
-                                       withString:@""];
-    NSURLComponents *urlComponents =
-        [NSURLComponents componentsWithString:sanitizedUrlWithoutPath];
-    if (!urlComponents) {
-        [NSException raise:@"Failed to parse database URL"
-                    format:@"Failed to parse database URL: %@", url];
-    }
-
-    NSString *host = [urlComponents.host lowercaseString];
-    NSString *namespace;
-    bool secure;
-
-    if (urlComponents.port != nil) {
-        secure = [urlComponents.scheme isEqualToString:@"https"] ||
-                 [urlComponents.scheme isEqualToString:@"wss"];
-        host = [host stringByAppendingFormat:@":%@", urlComponents.port];
-    } else {
-        secure = YES;
-    };
-
-    NSArray *parts = [urlComponents.host componentsSeparatedByString:@"."];
-    if ([parts count] == 3) {
-        namespace = [parts[0] lowercaseString];
-    } else {
-        // Attempt to extract namespace from "ns" query param.
-        NSArray *queryItems = urlComponents.queryItems;
-        for (NSURLQueryItem *item in queryItems) {
-            if ([item.name isEqualToString:@"ns"]) {
-                namespace = item.value;
-                break;
-            }
-        }
-
-        if (!namespace) {
-            namespace = [parts[0] lowercaseString];
-        }
-    }
-
-    NSString *pathString = [self
-        decodePath:[NSString stringWithFormat:@"/%@", originalPathString]];
-    FPath *path = [[FPath alloc] initWith:pathString];
-    FRepoInfo *repoInfo = [[FRepoInfo alloc] initWithHost:host
-                                                 isSecure:secure
-                                            withNamespace:namespace];
-
-    FFLog(@"I-RDB095002", @"---> Parsed (%@) to: (%@,%@); ns=(%@); path=(%@)",
-          url, [repoInfo description], [repoInfo connectionURL],
-          repoInfo.namespace, [path description]);
-
-    FParsedUrl *parsedUrl = [[FParsedUrl alloc] init];
-    parsedUrl.repoInfo = repoInfo;
-    parsedUrl.path = path;
-
-    return parsedUrl;
-}
-
-/*
- case str: JString => priString + "string:" + str.s;
- case bool: JBool => priString + "boolean:" + bool.value;
- case double: JDouble => priString + "number:" + double.num;
- case int: JInt => priString + "number:" + int.num;
- case _ => {
- error("Leaf node has value '" + data.value + "' of invalid type '" +
- data.value.getClass.toString + "'");
- "";
- }
- */
-
-+ (NSString *)getJavascriptType:(id)obj {
-    if ([obj isKindOfClass:[NSDictionary class]]) {
-        return kJavaScriptObject;
-    } else if ([obj isKindOfClass:[NSString class]]) {
-        return kJavaScriptString;
-    } else if ([obj isKindOfClass:[NSNumber class]]) {
-        // We used to just compare to @encode(BOOL) as suggested at
-        // http://stackoverflow.com/questions/2518761/get-type-of-nsnumber, but
-        // on arm64, @encode(BOOL) returns "B" instead of "c" even though
-        // objCType still returns 'c' (signed char).  So check both.
-        if (strcmp([obj objCType], @encode(BOOL)) == 0 ||
-            strcmp([obj objCType], @encode(signed char)) == 0) {
-            return kJavaScriptBoolean;
-        } else {
-            return kJavaScriptNumber;
-        }
-    } else {
-        return kJavaScriptNull;
-    }
-}
-
-+ (NSError *)errorForStatus:(NSString *)status andReason:(NSString *)reason {
-    static dispatch_once_t pred = 0;
-    __strong static NSDictionary *errorMap = nil;
-    __strong static NSDictionary *errorCodes = nil;
-    dispatch_once(&pred, ^{
-      errorMap = @{
-          @"permission_denied" : @"Permission Denied",
-          @"unavailable" : @"Service is unavailable",
-          kFErrorWriteCanceled : @"Write cancelled by user"
-      };
-      errorCodes = @{
-          @"permission_denied" : @1,
-          @"unavailable" : @2,
-          kFErrorWriteCanceled : @3
-      };
-    });
-
-    if ([status isEqualToString:kFWPResponseForActionStatusOk]) {
-        return nil;
-    } else {
-        NSInteger code;
-        NSString *desc = nil;
-        if (reason) {
-            desc = reason;
-        } else if ([errorMap objectForKey:status] != nil) {
-            desc = [errorMap objectForKey:status];
-        } else {
-            desc = status;
-        }
-
-        if ([errorCodes objectForKey:status] != nil) {
-            NSNumber *num = [errorCodes objectForKey:status];
-            code = [num integerValue];
-        } else {
-            // XXX what to do here?
-            code = 9999;
-        }
-
-        return [[NSError alloc]
-            initWithDomain:kFErrorDomain
-                      code:code
-                  userInfo:@{NSLocalizedDescriptionKey : desc}];
-    }
-}
-
-+ (NSNumber *)intForString:(NSString *)string {
-    static NSCharacterSet *notDigits = nil;
-    if (!notDigits) {
-        notDigits = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
-    }
-    if ([string rangeOfCharacterFromSet:notDigits].length == 0) {
-        NSInteger num;
-        NSScanner *scanner = [NSScanner scannerWithString:string];
-        if ([scanner scanInteger:&num]) {
-            return [NSNumber numberWithInteger:num];
-        }
-    }
-    return nil;
-}
-
-+ (NSString *)ieee754StringForNumber:(NSNumber *)val {
-    double d = [val doubleValue];
-    NSData *data = [NSData dataWithBytes:&d length:sizeof(double)];
-    NSMutableString *str = [[NSMutableString alloc] init];
-    const unsigned char *buffer = (const unsigned char *)[data bytes];
-    for (int i = 0; i < data.length; i++) {
-        unsigned char byte = buffer[7 - i];
-        [str appendFormat:@"%02x", byte];
-    }
-    return str;
-}
-
-static inline BOOL tryParseStringToInt(__unsafe_unretained NSString *str,
-                                       NSInteger *integer) {
-    // First do some cheap checks (NOTE: The below checks are significantly
-    // faster than an equivalent regex :-( ).
-    NSUInteger length = str.length;
-    if (length > 11 || length == 0) {
-        return NO;
-    }
-    long long value = 0;
-    BOOL negative = NO;
-    NSUInteger i = 0;
-    if ([str characterAtIndex:0] == '-') {
-        if (length == 1) {
-            return NO;
-        }
-        negative = YES;
-        i = 1;
-    }
-    for (; i < length; i++) {
-        unichar c = [str characterAtIndex:i];
-        // Must be a digit, or '-' if it's the first char.
-        if (c < '0' || c > '9') {
-            return NO;
-        } else {
-            int charValue = c - '0';
-            value = value * 10 + charValue;
-        }
-    }
-
-    value = (negative) ? -value : value;
-
-    if (value < INTEGER_32_MIN || value > INTEGER_32_MAX) {
-        return NO;
-    } else {
-        *integer = (NSInteger)value;
-        return YES;
-    }
-}
-
-+ (NSString *)maxName {
-    static dispatch_once_t once;
-    static NSString *maxName;
-    dispatch_once(&once, ^{
-      maxName = [[NSString alloc] initWithFormat:@"[MAX_NAME]"];
-    });
-    return maxName;
-}
-
-+ (NSString *)minName {
-    static dispatch_once_t once;
-    static NSString *minName;
-    dispatch_once(&once, ^{
-      minName = [[NSString alloc] initWithFormat:@"[MIN_NAME]"];
-    });
-    return minName;
-}
-
-+ (NSComparisonResult)compareKey:(NSString *)a toKey:(NSString *)b {
-    if (a == b) {
-        return NSOrderedSame;
-    } else if (a == [FUtilities minName] || b == [FUtilities maxName]) {
-        return NSOrderedAscending;
-    } else if (b == [FUtilities minName] || a == [FUtilities maxName]) {
-        return NSOrderedDescending;
-    } else {
-        NSInteger aAsInt, bAsInt;
-        if (tryParseStringToInt(a, &aAsInt)) {
-            if (tryParseStringToInt(b, &bAsInt)) {
-                if (aAsInt > bAsInt) {
-                    return NSOrderedDescending;
-                } else if (aAsInt < bAsInt) {
-                    return NSOrderedAscending;
-                } else if (a.length > b.length) {
-                    return NSOrderedDescending;
-                } else if (a.length < b.length) {
-                    return NSOrderedAscending;
-                } else {
-                    return NSOrderedSame;
-                }
-            } else {
-                return (NSComparisonResult)NSOrderedAscending;
-            }
-        } else if (tryParseStringToInt(b, &bAsInt)) {
-            return (NSComparisonResult)NSOrderedDescending;
-        } else {
-            // Perform literal character by character search to prevent a > b &&
-            // b > a issues. Note that calling -(NSString
-            // *)decomposedStringWithCanonicalMapping also works.
-            return [a compare:b options:NSLiteralSearch];
-        }
-    }
-}
-
-+ (NSComparator)keyComparator {
-    return ^NSComparisonResult(__unsafe_unretained NSString *a,
-                               __unsafe_unretained NSString *b) {
-      return [FUtilities compareKey:a toKey:b];
-    };
-}
-
-+ (NSComparator)stringComparator {
-    return ^NSComparisonResult(__unsafe_unretained NSString *a,
-                               __unsafe_unretained NSString *b) {
-      return [a compare:b];
-    };
-}
-
-+ (double)randomDouble {
-    return ((double)arc4random() / ARC4RANDOM_MAX);
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FValidation.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FValidation.h
deleted file mode 100644
index 276eb26..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FValidation.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FIRDataEventType.h"
-#import "FParsedUrl.h"
-#import "FPath.h"
-#import "FTypedefs.h"
-#import <Foundation/Foundation.h>
-
-@interface FValidation : NSObject
-
-+ (void)validateFrom:(NSString *)fn writablePath:(FPath *)path;
-+ (void)validateFrom:(NSString *)fn knownEventType:(FIRDataEventType)event;
-+ (void)validateFrom:(NSString *)fn validPathString:(NSString *)pathString;
-+ (void)validateFrom:(NSString *)fn validRootPathString:(NSString *)pathString;
-+ (void)validateFrom:(NSString *)fn validKey:(NSString *)key;
-+ (void)validateFrom:(NSString *)fn validURL:(FParsedUrl *)parsedUrl;
-
-+ (void)validateToken:(NSString *)token;
-
-// Functions for handling passing errors back
-+ (void)handleError:(NSError *)error
-    withUserCallback:(fbt_void_nserror_id)userCallback;
-+ (void)handleError:(NSError *)error
-    withSuccessCallback:(fbt_void_nserror)userCallback;
-
-// Functions used for validating while creating snapshots in FSnapshotUtilities
-+ (BOOL)validateFrom:(NSString *)fn
-    isValidLeafValue:(id)value
-            withPath:(NSArray *)path;
-+ (void)validateFrom:(NSString *)fn
-    validDictionaryKey:(id)keyId
-              withPath:(NSArray *)path;
-+ (void)validateFrom:(NSString *)fn
-    validUpdateDictionaryKey:(id)keyId
-                   withValue:(id)value;
-+ (void)validateFrom:(NSString *)fn
-    isValidPriorityValue:(id)value
-                withPath:(NSArray *)path;
-+ (BOOL)validatePriorityValue:value;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FValidation.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FValidation.m
deleted file mode 100644
index c700b9c..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FValidation.m
+++ /dev/null
@@ -1,461 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FValidation.h"
-#import "FConstants.h"
-#import "FParsedUrl.h"
-#import "FTypedefs.h"
-
-// Have to escape:  * ? + [ ( ) { } ^ $ | \ . /
-// See:
-// https://developer.apple.com/library/mac/#documentation/Foundation/Reference/NSRegularExpression_Class/Reference/Reference.html
-
-NSString *const kInvalidPathCharacters = @"[].#$";
-NSString *const kInvalidKeyCharacters = @"[].#$/";
-
-@implementation FValidation
-
-+ (void)validateFrom:(NSString *)fn writablePath:(FPath *)path {
-    if ([[path getFront] isEqualToString:kDotInfoPrefix]) {
-        @throw [[NSException alloc]
-            initWithName:@"WritablePathValidation"
-                  reason:[NSString
-                             stringWithFormat:@"(%@) failed to path %@: Can't "
-                                              @"modify data under %@",
-                                              fn, [path description],
-                                              kDotInfoPrefix]
-                userInfo:nil];
-    }
-}
-
-+ (void)validateFrom:(NSString *)fn knownEventType:(FIRDataEventType)event {
-    switch (event) {
-    case FIRDataEventTypeValue:
-    case FIRDataEventTypeChildAdded:
-    case FIRDataEventTypeChildChanged:
-    case FIRDataEventTypeChildMoved:
-    case FIRDataEventTypeChildRemoved:
-        return;
-        break;
-    default:
-        @throw [[NSException alloc]
-            initWithName:@"KnownEventTypeValidation"
-                  reason:[NSString
-                             stringWithFormat:@"(%@) Unknown event type: %d",
-                                              fn, (int)event]
-                userInfo:nil];
-        break;
-    }
-}
-
-+ (BOOL)isValidPathString:(NSString *)pathString {
-    static dispatch_once_t token;
-    static NSCharacterSet *badPathChars = nil;
-    dispatch_once(&token, ^{
-      badPathChars = [NSCharacterSet
-          characterSetWithCharactersInString:kInvalidPathCharacters];
-    });
-    return pathString != nil && [pathString length] != 0 &&
-           [pathString rangeOfCharacterFromSet:badPathChars].location ==
-               NSNotFound;
-}
-
-+ (void)validateFrom:(NSString *)fn validPathString:(NSString *)pathString {
-    if (![self isValidPathString:pathString]) {
-        @throw [[NSException alloc]
-            initWithName:@"InvalidPathValidation"
-                  reason:[NSString stringWithFormat:
-                                       @"(%@) Must be a non-empty string and "
-                                       @"not contain '.' '#' '$' '[' or ']'",
-                                       fn]
-                userInfo:nil];
-    }
-}
-
-+ (void)validateFrom:(NSString *)fn validRootPathString:(NSString *)pathString {
-    static dispatch_once_t token;
-    static NSRegularExpression *dotInfoRegex = nil;
-    dispatch_once(&token, ^{
-      dotInfoRegex = [NSRegularExpression
-          regularExpressionWithPattern:@"^\\/*\\.info(\\/|$)"
-                               options:0
-                                 error:nil];
-    });
-
-    NSString *tempPath = pathString;
-    // HACK: Obj-C regex are kinda' slow.  Do a plain string search first before
-    // bothering with the regex.
-    if ([pathString rangeOfString:@".info"].location != NSNotFound) {
-        tempPath = [dotInfoRegex
-            stringByReplacingMatchesInString:pathString
-                                     options:0
-                                       range:NSMakeRange(0, pathString.length)
-                                withTemplate:@"/"];
-    }
-    [self validateFrom:fn validPathString:tempPath];
-}
-
-+ (BOOL)isValidKey:(NSString *)key {
-    static dispatch_once_t token;
-    static NSCharacterSet *badKeyChars = nil;
-    dispatch_once(&token, ^{
-      badKeyChars = [NSCharacterSet
-          characterSetWithCharactersInString:kInvalidKeyCharacters];
-    });
-    return key != nil && key.length > 0 &&
-           [key rangeOfCharacterFromSet:badKeyChars].location == NSNotFound;
-}
-
-+ (void)validateFrom:(NSString *)fn validKey:(NSString *)key {
-    if (![self isValidKey:key]) {
-        @throw [[NSException alloc]
-            initWithName:@"InvalidKeyValidation"
-                  reason:[NSString
-                             stringWithFormat:
-                                 @"(%@) Must be a non-empty string and not "
-                                 @"contain '/' '.' '#' '$' '[' or ']'",
-                                 fn]
-                userInfo:nil];
-    }
-}
-
-+ (void)validateFrom:(NSString *)fn validURL:(FParsedUrl *)parsedUrl {
-    NSString *pathString = [parsedUrl.path description];
-    [self validateFrom:fn validRootPathString:pathString];
-}
-
-#pragma mark -
-#pragma mark Authentication validation
-
-+ (BOOL)stringNonempty:(NSString *)str {
-    return str != nil && ![str isKindOfClass:[NSNull class]] && str.length > 0;
-}
-
-+ (void)validateToken:(NSString *)token {
-    if (![FValidation stringNonempty:token]) {
-        [NSException raise:NSInvalidArgumentException
-                    format:@"Can't have empty string or nil for custom token"];
-    }
-}
-
-#pragma mark -
-#pragma mark Handling authentication errors
-
-/**
- * This function immediately calls the callback.
- * It assumes that it is not on FirebaseWorker thread.
- * It assumes it's on a user-controlled thread.
- */
-+ (void)handleError:(NSError *)error
-    withUserCallback:(fbt_void_nserror_id)userCallback {
-    if (userCallback) {
-        userCallback(error, nil);
-    }
-}
-
-/**
- * This function immediately calls the callback.
- * It assumes that it is not on FirebaseWorker thread.
- * It assumes it's on a user-controlled thread.
- */
-+ (void)handleError:(NSError *)error
-    withSuccessCallback:(fbt_void_nserror)userCallback {
-    if (userCallback) {
-        userCallback(error);
-    }
-}
-
-#pragma mark -
-#pragma mark Snapshot validation
-
-+ (BOOL)validateFrom:(NSString *)fn
-    isValidLeafValue:(id)value
-            withPath:(NSArray *)path {
-    if ([value isKindOfClass:[NSString class]]) {
-        // Try to avoid conversion to bytes if possible
-        NSString *theString = value;
-        if ([theString maximumLengthOfBytesUsingEncoding:NSUTF8StringEncoding] >
-                kFirebaseMaxLeafSize &&
-            [theString lengthOfBytesUsingEncoding:NSUTF8StringEncoding] >
-                kFirebaseMaxLeafSize) {
-            NSRange range;
-            range.location = 0;
-            range.length = MIN(path.count, 50);
-            NSString *pathString =
-                [[path subarrayWithRange:range] componentsJoinedByString:@"."];
-            @throw [[NSException alloc]
-                initWithName:@"InvalidFirebaseData"
-                      reason:[NSString
-                                 stringWithFormat:@"(%@) String exceeds max "
-                                                  @"size of %u utf8 bytes: %@",
-                                                  fn, (int)kFirebaseMaxLeafSize,
-                                                  pathString]
-                    userInfo:nil];
-        }
-        return YES;
-    }
-
-    else if ([value isKindOfClass:[NSNumber class]]) {
-        // Cannot store NaN, but otherwise can store NSNumbers.
-        if ([[NSDecimalNumber notANumber] isEqualToNumber:value]) {
-            NSRange range;
-            range.location = 0;
-            range.length = MIN(path.count, 50);
-            NSString *pathString =
-                [[path subarrayWithRange:range] componentsJoinedByString:@"."];
-            @throw [[NSException alloc]
-                initWithName:@"InvalidFirebaseData"
-                      reason:[NSString
-                                 stringWithFormat:
-                                     @"(%@) Cannot store NaN at path: %@.", fn,
-                                     pathString]
-                    userInfo:nil];
-        }
-        return YES;
-    }
-
-    else if ([value isKindOfClass:[NSDictionary class]]) {
-        NSDictionary *dval = value;
-        if (dval[kServerValueSubKey] != nil) {
-            if ([dval count] > 1) {
-                NSRange range;
-                range.location = 0;
-                range.length = MIN(path.count, 50);
-                NSString *pathString = [[path subarrayWithRange:range]
-                    componentsJoinedByString:@"."];
-                @throw [[NSException alloc]
-                    initWithName:@"InvalidFirebaseData"
-                          reason:[NSString stringWithFormat:
-                                               @"(%@) Cannot store other keys "
-                                               @"with server value keys.%@.",
-                                               fn, pathString]
-                        userInfo:nil];
-            }
-            return YES;
-        }
-        return NO;
-    }
-
-    else if (value == [NSNull null] || value == nil) {
-        // Null is valid type to store at leaf
-        return YES;
-    }
-
-    return NO;
-}
-
-+ (NSString *)parseAndValidateKey:(id)keyId
-                     fromFunction:(NSString *)fn
-                             path:(NSArray *)path {
-    if (![keyId isKindOfClass:[NSString class]]) {
-        NSRange range;
-        range.location = 0;
-        range.length = MIN(path.count, 50);
-        NSString *pathString =
-            [[path subarrayWithRange:range] componentsJoinedByString:@"."];
-        @throw [[NSException alloc]
-            initWithName:@"InvalidFirebaseData"
-                  reason:[NSString
-                             stringWithFormat:@"(%@) Non-string keys are not "
-                                              @"allowed in object at path: %@",
-                                              fn, pathString]
-                userInfo:nil];
-    }
-    return (NSString *)keyId;
-}
-
-+ (void)validateFrom:(NSString *)fn
-    validDictionaryKey:(id)keyId
-              withPath:(NSArray *)path {
-    NSString *key = [self parseAndValidateKey:keyId fromFunction:fn path:path];
-    if (![key isEqualToString:kPayloadPriority] &&
-        ![key isEqualToString:kPayloadValue] &&
-        ![key isEqualToString:kServerValueSubKey] &&
-        ![FValidation isValidKey:key]) {
-        NSRange range;
-        range.location = 0;
-        range.length = MIN(path.count, 50);
-        NSString *pathString =
-            [[path subarrayWithRange:range] componentsJoinedByString:@"."];
-        @throw [[NSException alloc]
-            initWithName:@"InvalidFirebaseData"
-                  reason:[NSString stringWithFormat:
-                                       @"(%@) Invalid key in object at path: "
-                                       @"%@. Keys must be non-empty and cannot "
-                                       @"contain '/' '.' '#' '$' '[' or ']'",
-                                       fn, pathString]
-                userInfo:nil];
-    }
-}
-
-+ (void)validateFrom:(NSString *)fn
-    validUpdateDictionaryKey:(id)keyId
-                   withValue:(id)value {
-    FPath *path = [FPath pathWithString:[self parseAndValidateKey:keyId
-                                                     fromFunction:fn
-                                                             path:@[]]];
-    __block NSInteger keyNum = 0;
-    [path enumerateComponentsUsingBlock:^void(NSString *key, BOOL *stop) {
-      if ([key isEqualToString:kPayloadPriority] &&
-          keyNum == [path length] - 1) {
-          [self validateFrom:fn isValidPriorityValue:value withPath:@[]];
-      } else {
-          keyNum++;
-
-          if (![FValidation isValidKey:key]) {
-              @throw [[NSException alloc]
-                  initWithName:@"InvalidFirebaseData"
-                        reason:[NSString
-                                   stringWithFormat:
-                                       @"(%@) Invalid key in object. Keys must "
-                                       @"be non-empty and cannot contain '.' "
-                                       @"'#' '$' '[' or ']'",
-                                       fn]
-                      userInfo:nil];
-          }
-      }
-    }];
-}
-
-+ (void)validateFrom:(NSString *)fn
-    isValidPriorityValue:(id)value
-                withPath:(NSArray *)path {
-    [self validateFrom:fn
-        isValidPriorityValue:value
-                    withPath:path
-                  throwError:YES];
-}
-
-/**
- * Returns YES if priority is valid.
- */
-+ (BOOL)validatePriorityValue:value {
-    return [self validateFrom:nil
-         isValidPriorityValue:value
-                     withPath:nil
-                   throwError:NO];
-}
-
-/**
- * Helper for validating priorities.  If passed YES for throwError, it'll throw
- * descriptive errors on validation problems.  Else, it'll just return YES/NO.
- */
-+ (BOOL)validateFrom:(NSString *)fn
-    isValidPriorityValue:(id)value
-                withPath:(NSArray *)path
-              throwError:(BOOL)throwError {
-    if ([value isKindOfClass:[NSNumber class]]) {
-        if ([[NSDecimalNumber notANumber] isEqualToNumber:value]) {
-            if (throwError) {
-                NSRange range;
-                range.location = 0;
-                range.length = MIN(path.count, 50);
-                NSString *pathString = [[path subarrayWithRange:range]
-                    componentsJoinedByString:@"."];
-                @throw [[NSException alloc]
-                    initWithName:@"InvalidFirebaseData"
-                          reason:[NSString stringWithFormat:
-                                               @"(%@) Cannot store NaN as "
-                                               @"priority at path: %@.",
-                                               fn, pathString]
-                        userInfo:nil];
-            } else {
-                return NO;
-            }
-        } else if (value == (id)kCFBooleanFalse ||
-                   value == (id)kCFBooleanTrue) {
-            if (throwError) {
-                NSRange range;
-                range.location = 0;
-                range.length = MIN(path.count, 50);
-                NSString *pathString = [[path subarrayWithRange:range]
-                    componentsJoinedByString:@"."];
-                @throw [[NSException alloc]
-                    initWithName:@"InvalidFirebaseData"
-                          reason:[NSString stringWithFormat:
-                                               @"(%@) Cannot store true/false "
-                                               @"as priority at path: %@.",
-                                               fn, pathString]
-                        userInfo:nil];
-            } else {
-                return NO;
-            }
-        }
-    } else if ([value isKindOfClass:[NSDictionary class]]) {
-        NSDictionary *dval = value;
-        if (dval[kServerValueSubKey] != nil) {
-            if ([dval count] > 1) {
-                if (throwError) {
-                    NSRange range;
-                    range.location = 0;
-                    range.length = MIN(path.count, 50);
-                    NSString *pathString = [[path subarrayWithRange:range]
-                        componentsJoinedByString:@"."];
-                    @throw [[NSException alloc]
-                        initWithName:@"InvalidFirebaseData"
-                              reason:[NSString
-                                         stringWithFormat:
-                                             @"(%@) Cannot store other keys "
-                                             @"with server value keys as "
-                                             @"priority at path: %@.",
-                                             fn, pathString]
-                            userInfo:nil];
-                } else {
-                    return NO;
-                }
-            }
-        } else {
-            if (throwError) {
-                NSRange range;
-                range.location = 0;
-                range.length = MIN(path.count, 50);
-                NSString *pathString = [[path subarrayWithRange:range]
-                    componentsJoinedByString:@"."];
-                @throw [[NSException alloc]
-                    initWithName:@"InvalidFirebaseData"
-                          reason:[NSString
-                                     stringWithFormat:
-                                         @"(%@) Cannot store an NSDictionary "
-                                         @"as priority at path: %@.",
-                                         fn, pathString]
-                        userInfo:nil];
-            } else {
-                return NO;
-            }
-        }
-    } else if ([value isKindOfClass:[NSArray class]]) {
-        if (throwError) {
-            NSRange range;
-            range.location = 0;
-            range.length = MIN(path.count, 50);
-            NSString *pathString =
-                [[path subarrayWithRange:range] componentsJoinedByString:@"."];
-            @throw [[NSException alloc]
-                initWithName:@"InvalidFirebaseData"
-                      reason:[NSString stringWithFormat:
-                                           @"(%@) Cannot store an NSArray as "
-                                           @"priority at path: %@.",
-                                           fn, pathString]
-                    userInfo:nil];
-        } else {
-            return NO;
-        }
-    }
-
-    // It's valid!
-    return YES;
-}
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleBoolBlock.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleBoolBlock.h
deleted file mode 100644
index f5c0859..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleBoolBlock.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FTypedefs.h"
-#import <Foundation/Foundation.h>
-
-@interface FTupleBoolBlock : NSObject
-
-@property(nonatomic, readwrite) BOOL boolean;
-@property(nonatomic, copy) fbt_void_void block;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleBoolBlock.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleBoolBlock.m
deleted file mode 100644
index c4cd8bf..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleBoolBlock.m
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FTupleBoolBlock.h"
-
-@implementation FTupleBoolBlock
-
-@synthesize boolean;
-@synthesize block;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleCallbackStatus.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleCallbackStatus.h
deleted file mode 100644
index bd8c4a9..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleCallbackStatus.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FTypedefs_Private.h"
-#import <Foundation/Foundation.h>
-
-@interface FTupleCallbackStatus : NSObject
-@property(nonatomic, copy) fbt_void_nsstring_nsstring block;
-@property(nonatomic) NSString *status;
-@property(nonatomic) NSString *errorReason;
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleCallbackStatus.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleCallbackStatus.m
deleted file mode 100644
index 05914bf..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleCallbackStatus.m
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FTupleCallbackStatus.h"
-
-@implementation FTupleCallbackStatus
-@synthesize block;
-@synthesize status;
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleFirebase.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleFirebase.h
deleted file mode 100644
index 5e41f9e..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleFirebase.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FIRDatabaseReference.h"
-#import <Foundation/Foundation.h>
-
-@interface FTupleFirebase : NSObject
-
-@property(nonatomic, strong) FIRDatabaseReference *one;
-@property(nonatomic, strong) FIRDatabaseReference *two;
-@property(nonatomic, strong) FIRDatabaseReference *three;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleFirebase.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleFirebase.m
deleted file mode 100644
index 3956f8b..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleFirebase.m
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FTupleFirebase.h"
-
-@implementation FTupleFirebase
-
-@synthesize one;
-@synthesize two;
-@synthesize three;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleNodePath.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleNodePath.h
deleted file mode 100644
index 19b5217..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleNodePath.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FNode.h"
-#import "FPath.h"
-#import <Foundation/Foundation.h>
-
-@interface FTupleNodePath : NSObject
-
-@property(nonatomic, strong) FPath *path;
-@property(nonatomic, strong) id<FNode> node;
-
-- (id)initWithNode:(id<FNode>)aNode andPath:(FPath *)aPath;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleNodePath.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleNodePath.m
deleted file mode 100644
index 620ae76..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleNodePath.m
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FTupleNodePath.h"
-
-@implementation FTupleNodePath
-
-@synthesize path;
-@synthesize node;
-
-- (id)initWithNode:(id<FNode>)aNode andPath:(FPath *)aPath {
-    self = [super init];
-    if (self) {
-        self.path = aPath;
-        self.node = aNode;
-    }
-    return self;
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleObjectNode.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleObjectNode.h
deleted file mode 100644
index 1717a22..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleObjectNode.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FNode.h"
-#import <Foundation/Foundation.h>
-
-@interface FTupleObjectNode : NSObject
-
-- (id)initWithObject:(id)aObj andNode:(id<FNode>)aNode;
-
-@property(nonatomic, strong) id<FNode> node;
-@property(nonatomic, strong) id obj;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleObjectNode.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleObjectNode.m
deleted file mode 100644
index 4c533b0..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleObjectNode.m
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#import "FTupleObjectNode.h"
-
-@implementation FTupleObjectNode
-
-@synthesize obj;
-@synthesize node;
-
-- (id)initWithObject:(id)aObj andNode:(id<FNode>)aNode {
-    self = [super init];
-    if (self) {
-        self.obj = aObj;
-        self.node = aNode;
-    }
-    return self;
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleObjects.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleObjects.h
deleted file mode 100644
index 05b3141..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleObjects.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@interface FTupleObjects : NSObject
-
-@property(nonatomic, strong) id objA;
-@property(nonatomic, strong) id objB;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleObjects.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleObjects.m
deleted file mode 100644
index a9e4c88..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleObjects.m
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FTupleObjects.h"
-
-@implementation FTupleObjects
-
-@synthesize objA;
-@synthesize objB;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleOnDisconnect.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleOnDisconnect.h
deleted file mode 100644
index e68ab71..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleOnDisconnect.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FTypedefs_Private.h"
-#import <Foundation/Foundation.h>
-
-@interface FTupleOnDisconnect : NSObject
-
-@property(strong, nonatomic) NSString *pathString;
-@property(strong, nonatomic) NSString *action;
-@property(strong, nonatomic) id data;
-@property(strong, nonatomic) fbt_void_nsstring_nsstring onComplete;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleOnDisconnect.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleOnDisconnect.m
deleted file mode 100644
index bd45822..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleOnDisconnect.m
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FTupleOnDisconnect.h"
-
-@implementation FTupleOnDisconnect
-
-@synthesize pathString;
-@synthesize action;
-@synthesize data;
-@synthesize onComplete;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTuplePathValue.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTuplePathValue.h
deleted file mode 100644
index b0a515c..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTuplePathValue.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@class FPath;
-
-@interface FTuplePathValue : NSObject
-@property(nonatomic, strong, readonly) FPath *path;
-@property(nonatomic, strong, readonly) id value;
-- (id)initWithPath:(FPath *)aPath value:(id)aValue;
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTuplePathValue.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTuplePathValue.m
deleted file mode 100644
index 91de883..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTuplePathValue.m
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FTuplePathValue.h"
-#import "FPath.h"
-
-@interface FTuplePathValue ()
-@property(nonatomic, strong, readwrite) id value;
-@property(nonatomic, strong, readwrite) FPath *path;
-@end
-
-@implementation FTuplePathValue
-@synthesize path;
-@synthesize value;
-
-- (id)initWithPath:(FPath *)aPath value:(id)aValue {
-    self = [super init];
-    if (self) {
-        self.value = aValue;
-        self.path = aPath;
-    }
-    return self;
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleRemovedQueriesEvents.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleRemovedQueriesEvents.h
deleted file mode 100644
index 7269c2f..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleRemovedQueriesEvents.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@interface FTupleRemovedQueriesEvents : NSObject
-/**
- * `FIRDatabaseQuery`s removed with [SyncPoint removeEventRegistration:]
- */
-@property(nonatomic, strong, readonly) NSArray *removedQueries;
-/**
- * cancel events as FEvent
- */
-@property(nonatomic, strong, readonly) NSArray *cancelEvents;
-
-- (id)initWithRemovedQueries:(NSArray *)removed cancelEvents:(NSArray *)events;
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleRemovedQueriesEvents.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleRemovedQueriesEvents.m
deleted file mode 100644
index 324cfcb..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleRemovedQueriesEvents.m
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FTupleRemovedQueriesEvents.h"
-
-@interface FTupleRemovedQueriesEvents ()
-@property(nonatomic, strong, readwrite) NSArray *removedQueries;
-@property(nonatomic, strong, readwrite) NSArray *cancelEvents;
-@end
-
-@implementation FTupleRemovedQueriesEvents
-@synthesize removedQueries;
-@synthesize cancelEvents;
-
-- (id)initWithRemovedQueries:(NSArray *)removed cancelEvents:(NSArray *)events {
-    self = [super init];
-    if (self) {
-        self.removedQueries = removed;
-        self.cancelEvents = events;
-    }
-    return self;
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleSetIdPath.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleSetIdPath.h
deleted file mode 100644
index 337f8d6..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleSetIdPath.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FPath.h"
-#import <Foundation/Foundation.h>
-
-@interface FTupleSetIdPath : NSObject
-
-- (id)initWithSetId:(NSNumber *)aSetId andPath:(FPath *)aPath;
-
-@property(strong, nonatomic) NSNumber *setId;
-@property(strong, nonatomic) FPath *path;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleSetIdPath.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleSetIdPath.m
deleted file mode 100644
index 2763c83..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleSetIdPath.m
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FTupleSetIdPath.h"
-
-@implementation FTupleSetIdPath
-
-@synthesize path;
-@synthesize setId;
-
-- (id)initWithSetId:(NSNumber *)aSetId andPath:(FPath *)aPath {
-    self = [super init];
-    if (self) {
-        self.setId = aSetId;
-        self.path = aPath;
-    }
-    return self;
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleStringNode.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleStringNode.h
deleted file mode 100644
index 0e3d7fa..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleStringNode.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FNode.h"
-#import <Foundation/Foundation.h>
-
-@interface FTupleStringNode : NSObject
-
-- (id)initWithString:(NSString *)aString andNode:(id<FNode>)aNode;
-
-@property(nonatomic, strong) id<FNode> node;
-@property(nonatomic, strong) NSString *string;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleStringNode.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleStringNode.m
deleted file mode 100644
index d820ef8..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleStringNode.m
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FTupleStringNode.h"
-
-@implementation FTupleStringNode
-
-@synthesize string;
-@synthesize node;
-
-- (id)initWithString:(NSString *)aString andNode:(id<FNode>)aNode {
-    self = [super init];
-    if (self) {
-        self.string = aString;
-        self.node = aNode;
-    }
-    return self;
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleTSN.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleTSN.h
deleted file mode 100644
index b1052da..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleTSN.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FTupleStringNode.h"
-#import <Foundation/Foundation.h>
-
-@interface FTupleTSN : NSObject
-
-@property(nonatomic, strong) FTupleStringNode *from;
-@property(nonatomic, strong) FTupleStringNode *to;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleTSN.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleTSN.m
deleted file mode 100644
index 348c319..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleTSN.m
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FTupleTSN.h"
-
-@implementation FTupleTSN
-
-@synthesize from;
-@synthesize to;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleTransaction.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleTransaction.h
deleted file mode 100644
index 82f4495..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleTransaction.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FPath.h"
-#import "FTypedefs.h"
-#import "FTypedefs_Private.h"
-#import <Foundation/Foundation.h>
-
-@interface FTupleTransaction : NSObject
-
-@property(nonatomic, strong) FPath *path;
-@property(nonatomic, copy) fbt_transactionresult_mutabledata update;
-@property(nonatomic, copy) fbt_void_nserror_bool_datasnapshot onComplete;
-@property(nonatomic) FTransactionStatus status;
-
-/**
- * Used when combining transaction at different locations to figure out which
- * one goes first.
- */
-@property(nonatomic, strong) NSNumber *order;
-/**
- * Whether to raise local events for this transaction
- */
-@property(nonatomic) BOOL applyLocally;
-
-/**
- * Count how many times we've retried the transaction
- */
-@property(nonatomic) int retryCount;
-
-/**
- * Function to call to clean up our listener
- */
-@property(nonatomic, copy) fbt_void_void unwatcher;
-
-/**
- * Stores why a transaction was aborted
- */
-@property(nonatomic, strong, readonly) NSString *abortStatus;
-@property(nonatomic, strong, readonly) NSString *abortReason;
-
-- (void)setAbortStatus:(NSString *)abortStatus reason:(NSString *)reason;
-- (NSError *)abortError;
-
-@property(nonatomic, strong) NSNumber *currentWriteId;
-
-/**
- * Stores the input snapshot, before the update
- */
-@property(nonatomic, strong) id<FNode> currentInputSnapshot;
-
-/**
- * Stores the unresolved (for server values) output snapshot, after the update
- */
-@property(nonatomic, strong) id<FNode> currentOutputSnapshotRaw;
-
-/**
- * Stores the resolved (for server values) output snapshot, after the update
- */
-@property(nonatomic, strong) id<FNode> currentOutputSnapshotResolved;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleTransaction.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleTransaction.m
deleted file mode 100644
index 68977ef..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleTransaction.m
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FTupleTransaction.h"
-#import "FUtilities.h"
-
-@interface FTupleTransaction ()
-
-@property(nonatomic, strong) NSString *abortStatus;
-@property(nonatomic, strong) NSString *abortReason;
-
-@end
-
-@implementation FTupleTransaction
-
-- (void)setAbortStatus:(NSString *)abortStatus reason:(NSString *)reason {
-    self.abortStatus = abortStatus;
-    self.abortReason = reason;
-}
-
-- (NSError *)abortError {
-    return (self.abortStatus != nil)
-               ? [FUtilities errorForStatus:self.abortStatus
-                                  andReason:self.abortReason]
-               : nil;
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleUserCallback.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleUserCallback.h
deleted file mode 100644
index b94eef6..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleUserCallback.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FQueryParams.h"
-#import "FTypedefs.h"
-#import <Foundation/Foundation.h>
-
-@interface FTupleUserCallback : NSObject
-
-- (id)initWithHandle:(NSUInteger)handle;
-
-@property(nonatomic, copy)
-    fbt_void_datasnapshot_nsstring datasnapshotPrevnameCallback;
-@property(nonatomic, copy) fbt_void_datasnapshot datasnapshotCallback;
-@property(nonatomic, copy) fbt_void_nserror cancelCallback;
-@property(nonatomic, copy) FQueryParams *queryParams;
-@property(nonatomic) NSUInteger handle;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleUserCallback.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleUserCallback.m
deleted file mode 100644
index ba5861f..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleUserCallback.m
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "FTupleUserCallback.h"
-
-@implementation FTupleUserCallback
-
-@synthesize datasnapshotCallback;
-@synthesize datasnapshotPrevnameCallback;
-@synthesize cancelCallback;
-@synthesize queryParams;
-@synthesize handle;
-
-- (id)initWithHandle:(NSUInteger)theHandle {
-    self = [super init];
-    if (self) {
-        self.handle = theHandle;
-    }
-    return self;
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FArraySortedDictionary.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FArraySortedDictionary.h
deleted file mode 100644
index 3ab7476..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FArraySortedDictionary.h
+++ /dev/null
@@ -1,21 +0,0 @@
-#import <Foundation/Foundation.h>
-#import "FImmutableSortedDictionary.h"
-
-/**
- * This is an array backed implementation of FImmutableSortedDictionary. It uses arrays and linear lookups to achieve
- * good memory efficiency while maintaining good performance for small collections. It also uses less allocations than
- * a comparable red black tree. To avoid degrading performance with increasing collection size it will automatically
- * convert to a FTreeSortedDictionary after an insert call above a certain threshold.
- */
-@interface FArraySortedDictionary : FImmutableSortedDictionary
-
-+ (FArraySortedDictionary *)fromDictionary:(NSDictionary *)dictionary withComparator:(NSComparator)comparator;
-
-- (id)initWithComparator:(NSComparator)comparator;
-
-#pragma mark -
-#pragma mark Properties
-
-@property (nonatomic, copy, readonly) NSComparator comparator;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FArraySortedDictionary.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FArraySortedDictionary.m
deleted file mode 100644
index 15d2d8b..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FArraySortedDictionary.m
+++ /dev/null
@@ -1,266 +0,0 @@
-#import "FArraySortedDictionary.h"
-#import "FTreeSortedDictionary.h"
-
-@interface FArraySortedDictionaryEnumerator : NSEnumerator
-
-- (id)initWithKeys:(NSArray *)keys startPos:(NSInteger)pos isReverse:(BOOL)reverse;
-- (id)nextObject;
-
-@property (nonatomic) NSInteger pos;
-@property (nonatomic) BOOL reverse;
-@property (nonatomic, strong) NSArray *keys;
-
-@end
-
-@implementation FArraySortedDictionaryEnumerator
-
-- (id)initWithKeys:(NSArray *)keys startPos:(NSInteger)pos isReverse:(BOOL)reverse
-{
-    self = [super init];
-    if (self != nil) {
-        self->_pos = pos;
-        self->_reverse = reverse;
-        self->_keys = keys;
-    }
-    return self;
-}
-
-- (id)nextObject
-{
-    NSInteger pos = self->_pos;
-    if (pos >= 0 && pos < self.keys.count) {
-        if (self.reverse) {
-            self->_pos--;
-        } else {
-            self->_pos++;
-        }
-        return self.keys[pos];
-    } else {
-        return nil;
-    }
-}
-
-@end
-
-@interface FArraySortedDictionary ()
-
-- (id)initWithComparator:(NSComparator)comparator;
-
-@property (nonatomic, copy, readwrite) NSComparator comparator;
-@property (nonatomic, strong) NSArray *keys;
-@property (nonatomic, strong) NSArray *values;
-
-@end
-
-@implementation FArraySortedDictionary
-
-+ (FArraySortedDictionary *)fromDictionary:(NSDictionary *)dictionary withComparator:(NSComparator)comparator
-{
-    NSMutableArray *keys = [NSMutableArray arrayWithCapacity:dictionary.count];
-    [dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
-        [keys addObject:key];
-    }];
-    [keys sortUsingComparator:comparator];
-
-    [keys enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
-        if (idx > 0) {
-            if (comparator(keys[idx - 1], obj) != NSOrderedAscending) {
-                [NSException raise:NSInvalidArgumentException format:@"Can't create FImmutableSortedDictionary with keys with same ordering!"];
-            }
-        }
-    }];
-
-    NSMutableArray *values = [NSMutableArray arrayWithCapacity:keys.count];
-    NSInteger pos = 0;
-    for (id key in keys) {
-        values[pos++] = dictionary[key];
-    }
-    NSAssert(values.count == keys.count, @"We added as many keys as values");
-    return [[FArraySortedDictionary alloc] initWithComparator:comparator keys:keys values:values];
-}
-
-- (id)initWithComparator:(NSComparator)comparator
-{
-    self = [super init];
-    if (self != nil) {
-        self->_comparator = comparator;
-        self->_keys = [NSArray array];
-        self->_values = [NSArray array];
-    }
-    return self;
-}
-
-- (id)initWithComparator:(NSComparator)comparator keys:(NSArray *)keys values:(NSArray *)values
-{
-    self = [super init];
-    if (self != nil) {
-        self->_comparator = comparator;
-        self->_keys = keys;
-        self->_values = values;
-    }
-    return self;
-}
-
-- (NSInteger) findInsertPositionForKey:(id)key
-{
-    NSInteger newPos = 0;
-    while (newPos < self.keys.count && self.comparator(self.keys[newPos], key) < NSOrderedSame) {
-        newPos++;
-    }
-    return newPos;
-}
-
-- (NSInteger) findKey:(id)key
-{
-    if (key == nil) {
-        return NSNotFound;
-    }
-    for (NSInteger pos = 0; pos < self.keys.count; pos++) {
-        NSComparisonResult result = self.comparator(key, self.keys[pos]);
-        if (result == NSOrderedSame) {
-            return pos;
-        } else if (result == NSOrderedAscending) {
-            return NSNotFound;
-        }
-    }
-    return NSNotFound;
-}
-
-- (FImmutableSortedDictionary *) insertKey:(id)key withValue:(id)value
-{
-    NSInteger pos = [self findKey:key];
-
-    if (pos == NSNotFound) {
-        /*
-         * If we're above the threshold we want to convert it to a tree backed implementation to not have
-         * degrading performance
-         */
-        if (self.count >= SORTED_DICTIONARY_ARRAY_TO_RB_TREE_SIZE_THRESHOLD) {
-            NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithCapacity:self.count];
-            for (NSInteger i = 0; i < self.keys.count; i++) {
-                dict[self.keys[i]] = self.values[i];
-            }
-            dict[key] = value;
-            return [FTreeSortedDictionary fromDictionary:dict withComparator:self.comparator];
-        } else {
-            NSMutableArray *newKeys = [NSMutableArray arrayWithArray:self.keys];
-            NSMutableArray *newValues = [NSMutableArray arrayWithArray:self.values];
-            NSInteger newPos = [self findInsertPositionForKey:key];
-            [newKeys insertObject:key atIndex:newPos];
-            [newValues insertObject:value atIndex:newPos];
-            return [[FArraySortedDictionary alloc] initWithComparator:self.comparator keys:newKeys values:newValues];
-        }
-    } else {
-        NSMutableArray *newKeys = [NSMutableArray arrayWithArray:self.keys];
-        NSMutableArray *newValues = [NSMutableArray arrayWithArray:self.values];
-        newKeys[pos] = key;
-        newValues[pos] = value;
-        return [[FArraySortedDictionary alloc] initWithComparator:self.comparator keys:newKeys values:newValues];
-    }
-}
-
-- (FImmutableSortedDictionary *) removeKey:(id)key
-{
-    NSInteger pos = [self findKey:key];
-    if (pos == NSNotFound) {
-        return self;
-    } else {
-        NSMutableArray *newKeys = [NSMutableArray arrayWithArray:self.keys];
-        NSMutableArray *newValues = [NSMutableArray arrayWithArray:self.values];
-        [newKeys removeObjectAtIndex:pos];
-        [newValues removeObjectAtIndex:pos];
-        return [[FArraySortedDictionary alloc] initWithComparator:self.comparator keys:newKeys values:newValues];
-    }
-}
-
-- (id) get:(id)key
-{
-    NSInteger pos = [self findKey:key];
-    if (pos == NSNotFound) {
-        return nil;
-    } else {
-        return self.values[pos];
-    }
-}
-
-- (id) getPredecessorKey:(id) key {
-    NSInteger pos = [self findKey:key];
-    if (pos == NSNotFound) {
-        [NSException raise:NSInternalInconsistencyException format:@"Can't get predecessor key for non-existent key"];
-        return nil;
-    } else if (pos == 0) {
-        return nil;
-    } else {
-        return self.keys[pos - 1];
-    }
-}
-
-- (BOOL) isEmpty {
-    return self.keys.count == 0;
-}
-
-- (int) count
-{
-    return (int)self.keys.count;
-}
-
-- (id) minKey
-{
-    return [self.keys firstObject];
-}
-
-- (id) maxKey
-{
-    return [self.keys lastObject];
-}
-
-- (void) enumerateKeysAndObjectsUsingBlock:(void (^)(id, id, BOOL *))block
-{
-    [self enumerateKeysAndObjectsReverse:NO usingBlock:block];
-}
-
-- (void) enumerateKeysAndObjectsReverse:(BOOL)reverse usingBlock:(void (^)(id, id, BOOL *))block
-{
-    if (reverse) {
-        BOOL stop = NO;
-        for (NSInteger i = self.keys.count - 1; i >= 0; i--) {
-            block(self.keys[i], self.values[i], &stop);
-            if (stop) return;
-        }
-    } else {
-        BOOL stop = NO;
-        for (NSInteger i = 0; i < self.keys.count; i++) {
-            block(self.keys[i], self.values[i], &stop);
-            if (stop) return;
-        }
-    }
-}
-
-- (BOOL) contains:(id)key {
-    return [self findKey:key] != NSNotFound;
-}
-
-- (NSEnumerator *) keyEnumerator {
-    return [self.keys objectEnumerator];
-}
-
-- (NSEnumerator *) keyEnumeratorFrom:(id)startKey {
-    NSInteger startPos = [self findInsertPositionForKey:startKey];
-    return [[FArraySortedDictionaryEnumerator alloc] initWithKeys:self.keys startPos:startPos isReverse:NO];
-}
-
-- (NSEnumerator *) reverseKeyEnumerator {
-    return [self.keys reverseObjectEnumerator];
-}
-
-- (NSEnumerator *) reverseKeyEnumeratorFrom:(id)startKey {
-    NSInteger startPos = [self findInsertPositionForKey:startKey];
-    // if there's no exact match, findKeyOrInsertPosition will return the index *after* the closest match, but
-    // since this is a reverse iterator, we want to start just *before* the closest match.
-    if (startPos >= self.keys.count || self.comparator(self.keys[startPos], startKey) != NSOrderedSame) {
-        startPos -= 1;
-    }
-    return [[FArraySortedDictionaryEnumerator alloc] initWithKeys:self.keys startPos:startPos isReverse:YES];
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedDictionary.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedDictionary.h
deleted file mode 100644
index d6687d8..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedDictionary.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * @fileoverview Implementation of an immutable SortedMap using a Left-leaning
- * Red-Black Tree, adapted from the implementation in Mugs
- * (http://mads379.github.com/mugs/) by Mads Hartmann Jensen
- * (mads379@gmail.com).
- *
- * Original paper on Left-leaning Red-Black Trees:
- *   http://www.cs.princeton.edu/~rs/talks/LLRB/LLRB.pdf
- *
- * Invariant 1: No red node has a red child
- * Invariant 2: Every leaf path has the same number of black nodes
- * Invariant 3: Only the left child can be red (left leaning)
- */
-
-#import <Foundation/Foundation.h>
-
-/**
- * The size threshold where we use a tree backed sorted map instead of an array backed sorted map.
- * This is a more or less arbitrary chosen value, that was chosen to be large enough to fit most of object kind
- * of Firebase data, but small enough to not notice degradation in performance for inserting and lookups.
- * Feel free to empirically determine this constant, but don't expect much gain in real world performance.
- */
-#define SORTED_DICTIONARY_ARRAY_TO_RB_TREE_SIZE_THRESHOLD 25
-
-@interface FImmutableSortedDictionary : NSObject
-
-+ (FImmutableSortedDictionary *)dictionaryWithComparator:(NSComparator)comparator;
-+ (FImmutableSortedDictionary *)fromDictionary:(NSDictionary *)dictionary withComparator:(NSComparator)comparator;
-
-- (FImmutableSortedDictionary *) insertKey:(id)aKey withValue:(id)aValue;
-- (FImmutableSortedDictionary *) removeKey:(id)aKey;
-- (id) get:(id) key;
-- (id) getPredecessorKey:(id) key;
-- (BOOL) isEmpty;
-- (int) count;
-- (id) minKey;
-- (id) maxKey;
-- (void) enumerateKeysAndObjectsUsingBlock:(void(^)(id key, id value, BOOL *stop))block;
-- (void) enumerateKeysAndObjectsReverse:(BOOL)reverse usingBlock:(void(^)(id key, id value, BOOL *stop))block;
-- (BOOL) contains:(id)key;
-- (NSEnumerator *) keyEnumerator;
-- (NSEnumerator *) keyEnumeratorFrom:(id)startKey;
-- (NSEnumerator *) reverseKeyEnumerator;
-- (NSEnumerator *) reverseKeyEnumeratorFrom:(id)startKey;
-
-#pragma mark -
-#pragma mark Methods similar to NSMutableDictionary
-
-- (FImmutableSortedDictionary *) setObject:(id)anObject forKey:(id)aKey;
-- (id) objectForKey:(id)key;
-- (FImmutableSortedDictionary *) removeObjectForKey:(id)aKey;
-
-@end
-
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedDictionary.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedDictionary.m
deleted file mode 100644
index 659c63b..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedDictionary.m
+++ /dev/null
@@ -1,142 +0,0 @@
-#import "FImmutableSortedDictionary.h"
-#import "FArraySortedDictionary.h"
-#import "FTreeSortedDictionary.h"
-
-#define THROW_ABSTRACT_METHOD_EXCEPTION(sel) do { \
-  @throw [NSException exceptionWithName:NSInternalInconsistencyException \
-  reason:[NSString stringWithFormat:@"You must override %@ in a subclass", NSStringFromSelector(sel)] \
-  userInfo:nil]; \
-} while(0)
-
-@implementation FImmutableSortedDictionary
-
-+ (FImmutableSortedDictionary *)dictionaryWithComparator:(NSComparator)comparator
-{
-    return [[FArraySortedDictionary alloc] initWithComparator:comparator];
-}
-
-+ (FImmutableSortedDictionary *)fromDictionary:(NSDictionary *)dictionary withComparator:(NSComparator)comparator
-{
-    if (dictionary.count <= SORTED_DICTIONARY_ARRAY_TO_RB_TREE_SIZE_THRESHOLD) {
-        return [FArraySortedDictionary fromDictionary:dictionary withComparator:comparator];
-    } else {
-        return [FTreeSortedDictionary fromDictionary:dictionary withComparator:comparator];
-    }
-}
-
-- (FImmutableSortedDictionary *) insertKey:(id)aKey withValue:(id)aValue {
-    THROW_ABSTRACT_METHOD_EXCEPTION(@selector(insertKey:withValue:));
-}
-
-- (FImmutableSortedDictionary *) removeKey:(id)aKey {
-    THROW_ABSTRACT_METHOD_EXCEPTION(@selector(removeKey:));
-}
-
-- (id) get:(id) key {
-    THROW_ABSTRACT_METHOD_EXCEPTION(@selector(get:));
-}
-
-- (id) getPredecessorKey:(id) key {
-    THROW_ABSTRACT_METHOD_EXCEPTION(@selector(getPredecessorKey:));
-}
-
-- (BOOL) isEmpty {
-    THROW_ABSTRACT_METHOD_EXCEPTION(@selector(isEmpty));
-}
-
-- (int) count {
-    THROW_ABSTRACT_METHOD_EXCEPTION(@selector((count)));
-}
-
-- (id) minKey {
-    THROW_ABSTRACT_METHOD_EXCEPTION(@selector(minKey));
-}
-
-- (id) maxKey {
-    THROW_ABSTRACT_METHOD_EXCEPTION(@selector(maxKey));
-}
-
-- (void) enumerateKeysAndObjectsUsingBlock:(void (^)(id, id, BOOL *))block {
-    THROW_ABSTRACT_METHOD_EXCEPTION(@selector(enumerateKeysAndObjectsUsingBlock:));
-}
-
-- (void) enumerateKeysAndObjectsReverse:(BOOL)reverse usingBlock:(void (^)(id, id, BOOL *))block {
-    THROW_ABSTRACT_METHOD_EXCEPTION(@selector(enumerateKeysAndObjectsReverse:usingBlock:));
-}
-
-- (BOOL) contains:(id)key {
-    THROW_ABSTRACT_METHOD_EXCEPTION(@selector(contains:));
-}
-
-- (NSEnumerator *) keyEnumerator {
-    THROW_ABSTRACT_METHOD_EXCEPTION(@selector(keyEnumerator));
-}
-
-- (NSEnumerator *) keyEnumeratorFrom:(id)startKey {
-    THROW_ABSTRACT_METHOD_EXCEPTION(@selector(keyEnumeratorFrom:));
-}
-
-- (NSEnumerator *) reverseKeyEnumerator {
-    THROW_ABSTRACT_METHOD_EXCEPTION(@selector(reverseKeyEnumerator));
-}
-
-- (NSEnumerator *) reverseKeyEnumeratorFrom:(id)startKey {
-    THROW_ABSTRACT_METHOD_EXCEPTION(@selector(reverseKeyEnumeratorFrom:));
-}
-
-- (BOOL)isEqual:(id)object {
-    if (![object isKindOfClass:[FImmutableSortedDictionary class]]) {
-        return NO;
-    }
-    FImmutableSortedDictionary *other = (FImmutableSortedDictionary *)object;
-    if (self.count != other.count) {
-        return NO;
-    }
-    __block BOOL isEqual = YES;
-    [self enumerateKeysAndObjectsUsingBlock:^(id key, id value, BOOL *stop) {
-        id otherValue = [other objectForKey:key];
-        isEqual = isEqual && (value == otherValue || [value isEqual:otherValue]);
-        *stop = !isEqual;
-    }];
-    return isEqual;
-}
-
-- (NSUInteger)hash {
-    __block NSUInteger hash = 0;
-    [self enumerateKeysAndObjectsUsingBlock:^(id key, id value, BOOL *stop) {
-        hash = (hash * 31 + [key hash]) * 17 + [value hash];
-    }];
-    return hash;
-}
-
-- (NSString *)description {
-    NSMutableString *str = [[NSMutableString alloc] init];
-    __block BOOL first = YES;
-    [str appendString:@"{ "];
-    [self enumerateKeysAndObjectsUsingBlock:^(id key, id value, BOOL *stop) {
-        if (!first) {
-            [str appendString:@", "];
-        }
-        first = NO;
-        [str appendString:[NSString stringWithFormat:@"%@: %@", key, value]];
-    }];
-    [str appendString:@" }"];
-    return str;
-}
-
-#pragma mark -
-#pragma mark Methods similar to NSMutableDictionary
-
-- (FImmutableSortedDictionary *) setObject:(__unsafe_unretained id)anObject forKey:(__unsafe_unretained id)aKey {
-    return [self insertKey:aKey withValue:anObject];
-}
-
-- (FImmutableSortedDictionary *) removeObjectForKey:(__unsafe_unretained id)aKey {
-    return [self removeKey:aKey];
-}
-
-- (id) objectForKey:(__unsafe_unretained id)key {
-    return [self get:key];
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedSet.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedSet.h
deleted file mode 100644
index ac15c2f..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedSet.h
+++ /dev/null
@@ -1,22 +0,0 @@
-#import <Foundation/Foundation.h>
-
-@interface FImmutableSortedSet : NSObject
-
-+ (FImmutableSortedSet *)setWithKeysFromDictionary:(NSDictionary *)array comparator:(NSComparator)comparator;
-
-- (BOOL)containsObject:(id)object;
-- (FImmutableSortedSet *)addObject:(id)object;
-- (FImmutableSortedSet *)removeObject:(id)object;
-- (id)firstObject;
-- (id)lastObject;
-- (NSUInteger)count;
-- (BOOL)isEmpty;
-
-- (id)predecessorEntry:(id)entry;
-
-- (void)enumerateObjectsUsingBlock:(void (^)(id obj, BOOL *stop))block;
-- (void)enumerateObjectsReverse:(BOOL)reverse usingBlock:(void (^)(id obj, BOOL *stop))block;
-
-- (NSEnumerator *)objectEnumerator;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedSet.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedSet.m
deleted file mode 100644
index 1953af1..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedSet.m
+++ /dev/null
@@ -1,115 +0,0 @@
-#import "FImmutableSortedSet.h"
-#import "FImmutableSortedDictionary.h"
-
-@interface FImmutableSortedSet ()
-
-@property (nonatomic, strong) FImmutableSortedDictionary *dictionary;
-
-@end
-
-@implementation FImmutableSortedSet
-
-+ (FImmutableSortedSet *)setWithKeysFromDictionary:(NSDictionary *)dictionary comparator:(NSComparator)comparator
-{
-    FImmutableSortedDictionary *setDict = [FImmutableSortedDictionary fromDictionary:dictionary withComparator:comparator];
-    return [[FImmutableSortedSet alloc] initWithDictionary:setDict];
-}
-
-- (id)initWithDictionary:(FImmutableSortedDictionary *)dictionary
-{
-    self = [super init];
-    if (self != nil) {
-        self->_dictionary = dictionary;
-    }
-    return self;
-}
-
-- (BOOL)contains:(id)object
-{
-    return [self.dictionary contains:object];
-}
-
-- (FImmutableSortedSet *)addObject:(id)object
-{
-    FImmutableSortedDictionary *newDictionary = [self.dictionary insertKey:object withValue:[NSNull null]];
-    if (newDictionary != self.dictionary) {
-        return [[FImmutableSortedSet alloc] initWithDictionary:newDictionary];
-    } else {
-        return self;
-    }
-}
-
-- (FImmutableSortedSet *)removeObject:(id)object
-{
-    FImmutableSortedDictionary *newDictionary = [self.dictionary removeObjectForKey:object];
-    if (newDictionary != self.dictionary) {
-        return [[FImmutableSortedSet alloc] initWithDictionary:newDictionary];
-    } else {
-        return self;
-    }
-}
-
-- (BOOL)containsObject:(id)object
-{
-    return [self.dictionary contains:object];
-}
-
-- (id)firstObject
-{
-    return [self.dictionary minKey];
-}
-
-- (id)lastObject
-{
-    return [self.dictionary maxKey];
-}
-
-- (id)predecessorEntry:(id)entry
-{
-    return [self.dictionary getPredecessorKey:entry];
-}
-
-- (NSUInteger)count
-{
-    return [self.dictionary count];
-}
-
-- (BOOL)isEmpty
-{
-    return [self.dictionary isEmpty];
-}
-
-- (void)enumerateObjectsUsingBlock:(void (^)(id, BOOL *))block
-{
-    [self enumerateObjectsReverse:NO usingBlock:block];
-}
-
-- (void)enumerateObjectsReverse:(BOOL)reverse usingBlock:(void (^)(id, BOOL *))block
-{
-    [self.dictionary enumerateKeysAndObjectsReverse:reverse usingBlock:^(id key, id value, BOOL *stop) {
-        block(key, stop);
-    }];
-}
-
-- (NSEnumerator *)objectEnumerator
-{
-    return [self.dictionary keyEnumerator];
-}
-
-- (NSString *)description
-{
-    NSMutableString *str = [[NSMutableString alloc] init];
-    __block BOOL first = YES;
-    [str appendString:@"FImmutableSortedSet ( "];
-    [self enumerateObjectsUsingBlock:^(id obj, BOOL *stop) {
-        if (!first) {
-            [str appendString:@", "];
-        }
-        first = NO;
-        [str appendString:[NSString stringWithFormat:@"%@", obj]];
-    }];
-    [str appendString:@" )"];
-    return str;
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBEmptyNode.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBEmptyNode.h
deleted file mode 100644
index 833f2a5..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBEmptyNode.h
+++ /dev/null
@@ -1,27 +0,0 @@
-#import <Foundation/Foundation.h>
-#import "FLLRBNode.h"
-
-@interface FLLRBEmptyNode : NSObject <FLLRBNode>
-
-+ (id)emptyNode;
-
-- (id)copyWith:(id) aKey withValue:(id) aValue withColor:(FLLRBColor*) aColor withLeft:(id<FLLRBNode>)aLeft withRight:(id<FLLRBNode>)aRight;
-- (id<FLLRBNode>) insertKey:(id) aKey forValue:(id)aValue withComparator:(NSComparator)aComparator;
-- (id<FLLRBNode>) remove:(id) aKey withComparator:(NSComparator)aComparator;
-- (int) count;
-- (BOOL) isEmpty;
-- (BOOL) inorderTraversal:(BOOL (^)(id key, id value))action;
-- (BOOL) reverseTraversal:(BOOL (^)(id key, id value))action;
-- (id<FLLRBNode>) min;
-- (id) minKey;
-- (id) maxKey;
-- (BOOL) isRed;
-- (int) check;
-
-@property (nonatomic, strong) id key;
-@property (nonatomic, strong) id value;
-@property (nonatomic, strong) FLLRBColor* color;
-@property (nonatomic, strong) id<FLLRBNode> left;
-@property (nonatomic, strong) id<FLLRBNode> right;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBEmptyNode.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBEmptyNode.m
deleted file mode 100644
index 3ca6f06..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBEmptyNode.m
+++ /dev/null
@@ -1,72 +0,0 @@
-#import "FLLRBEmptyNode.h"
-#import "FLLRBValueNode.h"
-
-@implementation FLLRBEmptyNode
-
-@synthesize key, value, color, left, right;
-
-- (NSString *) description {
-    return [NSString stringWithFormat:@"[key=%@ val=%@ color=%@]", key, value,
-            (color != nil ? @"true" : @"false")];
-}
-
-+ (id)emptyNode
-{
-    static dispatch_once_t pred = 0;
-    __strong static id _sharedObject = nil;
-    dispatch_once(&pred, ^{
-        _sharedObject = [[self alloc] init]; // or some other init method
-    });
-    return _sharedObject;
-}
-
-- (id)copyWith:(id) aKey withValue:(id) aValue withColor:(FLLRBColor*) aColor withLeft:(id<FLLRBNode>)aLeft withRight:(id<FLLRBNode>)aRight {
-    return self;
-}
-
-- (id<FLLRBNode>) insertKey:(id) aKey forValue:(id)aValue withComparator:(NSComparator)aComparator {
-    FLLRBValueNode* result = [[FLLRBValueNode alloc] initWithKey:aKey withValue:aValue withColor:nil withLeft:nil withRight:nil];
-    return result;
-}
-
-- (id<FLLRBNode>) remove:(id) key withComparator:(NSComparator)aComparator {
-    return self;
-}
-
-- (int) count {
-    return 0;
-}
-
-- (BOOL) isEmpty {
-    return YES;
-}
-
-- (BOOL) inorderTraversal:(BOOL (^)(id key, id value))action {
-    return NO;
-}
-
-- (BOOL) reverseTraversal:(BOOL (^)(id key, id value))action {
-    return NO;
-}
-
-- (id<FLLRBNode>) min {
-    return self;
-}
-
-- (id) minKey {
-    return nil;
-}
-
-- (id) maxKey {
-    return nil;
-}
-
-- (BOOL) isRed {
-    return NO;
-}
-
-- (int) check {
-    return 0;
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBNode.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBNode.h
deleted file mode 100644
index 09b234c..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBNode.h
+++ /dev/null
@@ -1,29 +0,0 @@
-#import <Foundation/Foundation.h>
-
-#define RED @true
-#define BLACK @false
-
-typedef NSNumber FLLRBColor;
-
-@protocol FLLRBNode <NSObject>
-
-- (id)copyWith:(id) aKey withValue:(id) aValue withColor:(FLLRBColor*) aColor withLeft:(id<FLLRBNode>)aLeft withRight:(id<FLLRBNode>)aRight;
-- (id<FLLRBNode>) insertKey:(id) aKey forValue:(id)aValue withComparator:(NSComparator)aComparator;
-- (id<FLLRBNode>) remove:(id) key withComparator:(NSComparator)aComparator;
-- (int) count;
-- (BOOL) isEmpty;
-- (BOOL) inorderTraversal:(BOOL (^)(id key, id value))action;
-- (BOOL) reverseTraversal:(BOOL (^)(id key, id value))action;
-- (id<FLLRBNode>) min;
-- (id) minKey;
-- (id) maxKey;
-- (BOOL) isRed;
-- (int) check;
-
-@property (nonatomic, strong) id key;
-@property (nonatomic, strong) id value;
-@property (nonatomic, strong) FLLRBColor* color;
-@property (nonatomic, strong) id<FLLRBNode> left;
-@property (nonatomic, strong) id<FLLRBNode> right;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBValueNode.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBValueNode.h
deleted file mode 100644
index 50438bb..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBValueNode.h
+++ /dev/null
@@ -1,29 +0,0 @@
-#import <Foundation/Foundation.h>
-#import "FLLRBNode.h"
-
-@interface FLLRBValueNode : NSObject <FLLRBNode>
-
-
-- (id)initWithKey:(id) key withValue:(id) value withColor:(FLLRBColor*) color withLeft:(id<FLLRBNode>)left withRight:(id<FLLRBNode>)right;
-- (id)copyWith:(id) aKey withValue:(id) aValue withColor:(FLLRBColor*) aColor withLeft:(id<FLLRBNode>)aLeft withRight:(id<FLLRBNode>)aRight;
-- (id<FLLRBNode>) insertKey:(id) aKey forValue:(id)aValue withComparator:(NSComparator)aComparator;
-- (id<FLLRBNode>) remove:(id) aKey withComparator:(NSComparator)aComparator;
-- (int) count;
-- (BOOL) isEmpty;
-- (BOOL) inorderTraversal:(BOOL (^)(id key, id value))action;
-- (BOOL) reverseTraversal:(BOOL (^)(id key, id value))action;
-- (id<FLLRBNode>) min;
-- (id) minKey;
-- (id) maxKey;
-- (BOOL) isRed;
-- (int) check;
-
-- (BOOL) checkMaxDepth;
-
-@property (nonatomic, strong) id key;
-@property (nonatomic, strong) id value;
-@property (nonatomic, strong) FLLRBColor* color;
-@property (nonatomic, strong) id<FLLRBNode> left;
-@property (nonatomic, strong) id<FLLRBNode> right;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBValueNode.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBValueNode.m
deleted file mode 100644
index 831b97f..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBValueNode.m
+++ /dev/null
@@ -1,230 +0,0 @@
-#import "FLLRBValueNode.h"
-#import "FLLRBEmptyNode.h"
-
-@implementation FLLRBValueNode
-
-@synthesize key, value, color, left, right;
-
-- (NSString *) description {
-    return [NSString stringWithFormat:@"[key=%@ val=%@ color=%@]", key, value,
-            (color != nil ? @"true" : @"false")];
-}
-
-- (id)initWithKey:(__unsafe_unretained id) aKey withValue:(__unsafe_unretained id) aValue withColor:(__unsafe_unretained FLLRBColor*) aColor withLeft:(__unsafe_unretained id<FLLRBNode>)aLeft withRight:(__unsafe_unretained id<FLLRBNode>)aRight
-{
-    self = [super init];
-    if (self) {
-        self.key = aKey;
-        self.value = aValue;
-        self.color = aColor != nil ? aColor : RED;
-        self.left = aLeft != nil ? aLeft : [FLLRBEmptyNode emptyNode];
-        self.right = aRight != nil ? aRight : [FLLRBEmptyNode emptyNode];
-    }
-    return self;
-}
-
-- (id)copyWith:(__unsafe_unretained id) aKey withValue:(__unsafe_unretained id) aValue withColor:(__unsafe_unretained FLLRBColor*) aColor withLeft:(__unsafe_unretained id<FLLRBNode>)aLeft withRight:(__unsafe_unretained id<FLLRBNode>)aRight {
-    return [[FLLRBValueNode alloc] initWithKey:(aKey != nil) ? aKey : self.key
-                                     withValue:(aValue != nil) ? aValue : self.value
-                                     withColor:(aColor != nil) ? aColor : self.color
-                                      withLeft:(aLeft != nil) ? aLeft : self.left
-                                     withRight:(aRight != nil) ? aRight : self.right];
-}
-
-- (int) count {
-    return [self.left count] + 1 + [self.right count];
-}
-
-- (BOOL) isEmpty {
-    return NO;
-}
-
-/**
-* Early terminates if aciton returns YES.
-* @return The first truthy value returned by action, or the last falsey value returned by action.
-*/
-- (BOOL) inorderTraversal:(BOOL (^)(id key, id value))action {
-    return [self.left inorderTraversal:action] ||
-        action(self.key, self.value) ||
-    [self.right inorderTraversal:action];
-}
-
-- (BOOL) reverseTraversal:(BOOL (^)(id key, id value))action {
- return [self.right reverseTraversal:action] ||
-        action(self.key, self.value) ||
-    [self.left reverseTraversal:action];
-}
-
-- (id<FLLRBNode>) min {
-    if([self.left isEmpty]) {
-        return self;
-    }
-    else {
-        return [self.left min];
-    }
-}
-
-- (id) minKey {
-    return [[self min] key];
-}
-
-- (id) maxKey {
-    if([self.right isEmpty]) {
-        return self.key;
-    }
-    else {
-        return [self.right maxKey];
-    }
-}
-
-- (id<FLLRBNode>) insertKey:(__unsafe_unretained id) aKey forValue:(__unsafe_unretained id)aValue withComparator:(NSComparator)aComparator {
-    NSComparisonResult cmp = aComparator(aKey, self.key);
-    FLLRBValueNode* n = self;
-
-    if(cmp == NSOrderedAscending) {
-        n = [n copyWith:nil withValue:nil withColor:nil withLeft:[n.left insertKey:aKey forValue:aValue withComparator:aComparator] withRight:nil];
-    }
-    else if(cmp == NSOrderedSame) {
-        n = [n copyWith:nil withValue:aValue withColor:nil withLeft:nil withRight:nil];
-    }
-    else {
-        n = [n copyWith:nil withValue:nil withColor:nil withLeft:nil withRight:[n.right insertKey:aKey forValue:aValue withComparator:aComparator]];
-    }
-
-    return [n fixUp];
-}
-
-- (id<FLLRBNode>) removeMin {
-
-    if([self.left isEmpty]) {
-        return [FLLRBEmptyNode emptyNode];
-    }
-
-    FLLRBValueNode* n = self;
-    if(! [n.left isRed] && ! [n.left.left isRed]) {
-        n = [n moveRedLeft];
-    }
-
-    n = [n copyWith:nil withValue:nil withColor:nil withLeft:[(FLLRBValueNode*)n.left removeMin] withRight:nil];
-    return [n fixUp];
-}
-
-
-- (id<FLLRBNode>) fixUp {
-    FLLRBValueNode* n = self;
-    if([n.right isRed] && ! [n.left isRed]) n = [n rotateLeft];
-    if([n.left isRed] && [n.left.left isRed]) n = [n rotateRight];
-    if([n.left isRed] && [n.right isRed]) n = [n colorFlip];
-    return n;
-}
-
-- (FLLRBValueNode*) moveRedLeft {
-    FLLRBValueNode* n = [self colorFlip];
-    if([n.right.left isRed]) {
-        n = [n copyWith:nil withValue:nil withColor:nil withLeft:nil withRight:[(FLLRBValueNode*)n.right rotateRight]];
-        n = [n rotateLeft];
-        n = [n colorFlip];
-    }
-    return n;
-}
-
-- (FLLRBValueNode*) moveRedRight {
-    FLLRBValueNode* n = [self colorFlip];
-    if([n.left.left isRed]) {
-        n = [n rotateRight];
-        n = [n colorFlip];
-    }
-    return n;
-}
-
-- (id<FLLRBNode>) rotateLeft {
-    id<FLLRBNode> nl = [self copyWith:nil withValue:nil withColor:RED withLeft:nil withRight:self.right.left];
-    return [self.right copyWith:nil withValue:nil withColor:self.color withLeft:nl withRight:nil];;
-}
-
-- (id<FLLRBNode>) rotateRight {
-    id<FLLRBNode> nr = [self copyWith:nil withValue:nil withColor:RED withLeft:self.left.right withRight:nil];
-    return [self.left copyWith:nil withValue:nil withColor:self.color withLeft:nil withRight:nr];
-}
-
-- (id<FLLRBNode>) colorFlip {
-    id<FLLRBNode> nleft = [self.left copyWith:nil withValue:nil withColor:[NSNumber numberWithBool:![self.left.color boolValue]] withLeft:nil withRight:nil];
-    id<FLLRBNode> nright = [self.right copyWith:nil withValue:nil withColor:[NSNumber numberWithBool:![self.right.color boolValue]] withLeft:nil withRight:nil];
-
-    return [self copyWith:nil withValue:nil withColor:[NSNumber numberWithBool:![self.color boolValue]] withLeft:nleft withRight:nright];
-}
-
-- (id<FLLRBNode>) remove:(__unsafe_unretained id) aKey withComparator:(NSComparator)comparator {
-    id<FLLRBNode> smallest;
-    FLLRBValueNode* n = self;
-
-    if(comparator(aKey, n.key) == NSOrderedAscending) {
-        if(![n.left isEmpty] && ![n.left isRed] && ![n.left.left isRed]) {
-            n = [n moveRedLeft];
-        }
-        n = [n copyWith:nil withValue:nil withColor:nil withLeft:[n.left remove:aKey withComparator:comparator] withRight:nil];
-    }
-    else {
-        if([n.left isRed]) {
-            n = [n rotateRight];
-        }
-
-        if(![n.right isEmpty] && ![n.right isRed] && ![n.right.left isRed]) {
-            n = [n moveRedRight];
-        }
-
-        if(comparator(aKey, n.key) == NSOrderedSame) {
-            if([n.right isEmpty]) {
-                return [FLLRBEmptyNode emptyNode];
-            }
-            else {
-                smallest = [n.right min];
-                n = [n copyWith:smallest.key withValue:smallest.value withColor:nil withLeft:nil withRight:[(FLLRBValueNode*)n.right removeMin]];
-            }
-        }
-        n = [n copyWith:nil withValue:nil withColor:nil withLeft:nil withRight:[n.right remove:aKey withComparator:comparator]];
-    }
-    return [n fixUp];
-}
-
-- (BOOL) isRed {
-    return [self.color boolValue];
-}
-
-- (BOOL) checkMaxDepth {
-    int blackDepth = [self check];
-    if(pow(2.0, blackDepth) <= ([self count] + 1)) {
-        return YES;
-    }
-    else {
-        return NO;
-    }
-}
-
-- (int) check {
-    int blackDepth = 0;
-
-    if([self isRed] && [self.left isRed]) {
-        @throw [[NSException alloc] initWithName:@"check" reason:@"Red node has a red child" userInfo:nil];
-    }
-
-    if([self.right isRed]) {
-        @throw [[NSException alloc] initWithName:@"check" reason:@"Right child is red" userInfo:nil];
-    }
-
-    blackDepth = [self.left check];
-//    NSLog(err);
-    if(blackDepth != [self.right check]) {
-        NSString* err = [NSString stringWithFormat:@"(%@ -> %@)blackDepth: %d ; self.right check: %d", self.value, [self.color boolValue] ? @"red" : @"black", blackDepth, [self.right check]];
-//        return 10;
-        @throw [[NSException alloc] initWithName:@"check" reason:err userInfo:nil];
-    }
-    else {
-                int ret = blackDepth + ([self isRed] ? 0 : 1);
-//        NSLog(@"black depth is: %d; other is: %d, ret is: %d", blackDepth, ([self isRed] ? 0 : 1), ret);
-        return ret;
-    }
-}
-
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionary.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionary.h
deleted file mode 100644
index 934ca8b..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionary.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * @fileoverview Implementation of an immutable SortedMap using a Left-leaning
- * Red-Black Tree, adapted from the implementation in Mugs
- * (http://mads379.github.com/mugs/) by Mads Hartmann Jensen
- * (mads379@gmail.com).
- *
- * Original paper on Left-leaning Red-Black Trees:
- *   http://www.cs.princeton.edu/~rs/talks/LLRB/LLRB.pdf
- *
- * Invariant 1: No red node has a red child
- * Invariant 2: Every leaf path has the same number of black nodes
- * Invariant 3: Only the left child can be red (left leaning)
- */
-
-#import <Foundation/Foundation.h>
-#import "FImmutableSortedDictionary.h"
-#import "FLLRBNode.h"
-
-@interface FTreeSortedDictionary : FImmutableSortedDictionary
-
-@property (nonatomic, copy, readonly) NSComparator comparator;
-@property (nonatomic, strong, readonly) id<FLLRBNode> root;
-
-- (id)initWithComparator:(NSComparator)aComparator;
-
-// Override methods to return subtype
-- (FTreeSortedDictionary *) insertKey:(id)aKey withValue:(id)aValue;
-- (FTreeSortedDictionary *) removeKey:(id)aKey;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionary.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionary.m
deleted file mode 100644
index e9f0683..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionary.m
+++ /dev/null
@@ -1,326 +0,0 @@
-#import "FTreeSortedDictionary.h"
-#import "FLLRBEmptyNode.h"
-#import "FLLRBValueNode.h"
-#import "FTreeSortedDictionaryEnumerator.h"
-
-typedef void (^fbt_void_nsnumber_int)(NSNumber* color, NSUInteger chunkSize);
-
-@interface FTreeSortedDictionary ()
-
-@property (nonatomic, strong) id<FLLRBNode> root;
-@property (nonatomic, copy, readwrite) NSComparator comparator;
-
-@end
-
-@implementation FTreeSortedDictionary
-
-- (id)initWithComparator:(NSComparator)aComparator {
-    self = [super init];
-    if (self) {
-        self.root = [FLLRBEmptyNode emptyNode];
-        self.comparator = aComparator;
-    }
-    return self;
-}
-
-- (id)initWithComparator:(NSComparator)aComparator withRoot:(__unsafe_unretained id<FLLRBNode>)aRoot {
-    self = [super init];
-    if (self) {
-        self.root = aRoot;
-        self.comparator = aComparator;
-    }
-    return self;
-}
-
-/**
- * Returns a copy of the map, with the specified key/value added or replaced.
- */
-- (FTreeSortedDictionary *) insertKey:(__unsafe_unretained id)aKey withValue:(__unsafe_unretained id)aValue {
-    return [[FTreeSortedDictionary alloc] initWithComparator:self.comparator
-                                                    withRoot:[[self.root insertKey:aKey forValue:aValue withComparator:self.comparator]
-                                                              copyWith:nil
-                                                              withValue:nil
-                                                              withColor:BLACK
-                                                              withLeft:nil
-                                                              withRight:nil]];
-}
-
-
-- (FTreeSortedDictionary *) removeKey:(__unsafe_unretained id)aKey {
-    // Remove is somewhat expensive even if the key doesn't exist (the tree does rebalancing and stuff).  So avoid it.
-    if (![self contains:aKey]) {
-        return self;
-    } else {
-        return [[FTreeSortedDictionary alloc]
-                initWithComparator:self.comparator
-                withRoot:[[self.root remove:aKey withComparator:self.comparator]
-                          copyWith:nil
-                          withValue:nil
-                          withColor:BLACK
-                          withLeft:nil
-                          withRight:nil]];
-    }
-}
-
-- (id) get:(__unsafe_unretained id) key {
-    if (key == nil) {
-        return nil;
-    }
-    NSComparisonResult cmp;
-    id<FLLRBNode> node = self.root;
-    while(![node isEmpty]) {
-        cmp = self.comparator(key, node.key);
-        if(cmp == NSOrderedSame) {
-            return node.value;
-        }
-        else if (cmp == NSOrderedAscending) {
-            node = node.left;
-        }
-        else {
-            node = node.right;
-        }
-    }
-    return nil;
-}
-
-- (id) getPredecessorKey:(__unsafe_unretained id) key {
-    NSComparisonResult cmp;
-    id<FLLRBNode> node = self.root;
-    id<FLLRBNode> rightParent = nil;
-    while(![node isEmpty]) {
-        cmp = self.comparator(key, node.key);
-        if(cmp == NSOrderedSame) {
-            if(![node.left isEmpty]) {
-                node = node.left;
-                while(! [node.right isEmpty]) {
-                    node = node.right;
-                }
-                return node.key;
-            }
-            else if (rightParent != nil) {
-                return rightParent.key;
-            }
-            else {
-                return nil;
-            }
-        }
-        else if (cmp == NSOrderedAscending) {
-            node = node.left;
-        }
-        else if (cmp == NSOrderedDescending) {
-            rightParent = node;
-            node = node.right;
-        }
-    }
-    @throw [NSException exceptionWithName:@"NonexistentKey" reason:@"getPredecessorKey called with nonexistent key." userInfo:@{@"key": [key description] }];
-}
-
-- (BOOL) isEmpty {
-    return [self.root isEmpty];
-}
-
-- (int) count {
-    return [self.root count];
-}
-
-- (id) minKey {
-    return [self.root minKey];
-}
-
-- (id) maxKey {
-    return [self.root maxKey];
-}
-
-- (void) enumerateKeysAndObjectsUsingBlock:(void (^)(id, id, BOOL *))block
-{
-    [self enumerateKeysAndObjectsReverse:NO usingBlock:block];
-}
-
-- (void) enumerateKeysAndObjectsReverse:(BOOL)reverse usingBlock:(void (^)(id, id, BOOL *))block
-{
-    if (reverse) {
-        __block BOOL stop = NO;
-        [self.root reverseTraversal:^BOOL(id key, id value) {
-            block(key, value, &stop);
-            return stop;
-        }];
-    } else {
-        __block BOOL stop = NO;
-        [self.root inorderTraversal:^BOOL(id key, id value) {
-            block(key, value, &stop);
-            return stop;
-        }];
-    }
-}
-
-- (BOOL) contains:(__unsafe_unretained id)key {
-    return ([self objectForKey:key] != nil);
-}
-
-- (NSEnumerator *) keyEnumerator {
-    return [[FTreeSortedDictionaryEnumerator alloc]
-            initWithImmutableSortedDictionary:self startKey:nil isReverse:NO];
-}
-
-- (NSEnumerator *) keyEnumeratorFrom:(id)startKey {
-    return [[FTreeSortedDictionaryEnumerator alloc]
-            initWithImmutableSortedDictionary:self startKey:startKey isReverse:NO];
-}
-
-- (NSEnumerator *) reverseKeyEnumerator {
-    return [[FTreeSortedDictionaryEnumerator alloc]
-            initWithImmutableSortedDictionary:self startKey:nil isReverse:YES];
-}
-
-- (NSEnumerator *) reverseKeyEnumeratorFrom:(id)startKey {
-    return [[FTreeSortedDictionaryEnumerator alloc]
-            initWithImmutableSortedDictionary:self startKey:startKey isReverse:YES];
-}
-
-
-#pragma mark -
-#pragma mark Tree Builder
-
-// Code to efficiently build a RB Tree
-typedef struct _base1_2list {
-    unsigned int bits;
-    unsigned short count;
-    unsigned short current;
-} Base1_2List;
-
-Base1_2List *base1_2List_new(unsigned int length);
-void base1_2List_free(Base1_2List* list);
-unsigned int log_base2(unsigned int num);
-BOOL base1_2List_next(Base1_2List* list);
-
-unsigned int log_base2(unsigned int num) {
-    return (unsigned int)(log(num) / log(2));
-}
-
-/**
- * Works like an iterator, so it moves to the next bit. Do not call more than list->count times.
- * @return whether or not the next bit is a 1 in base {1,2}.
- */
-BOOL base1_2List_next(Base1_2List* list) {
-    BOOL result = !(list->bits & (0x1 << list->current));
-    list->current--;
-    return result;
-}
-
-static inline unsigned bit_mask(int x) {
-    return (x >= sizeof(unsigned) * CHAR_BIT) ? (unsigned) -1 : (1U << x) - 1;
-}
-
-/**
- * We represent the base{1,2} number as the combination of a binary number and a number of bits that we care about
- * We iterate backwards, from most significant bit to least, to build up the llrb nodes. 0 base 2 => 1 base {1,2}, 1 base 2 => 2 base {1,2}
- */
-Base1_2List *base1_2List_new(unsigned int length) {
-    size_t sz = sizeof(Base1_2List);
-    Base1_2List* list = calloc(1, sz);
-    // Calculate the number of bits that we care about
-    list->count = (unsigned short)log_base2(length + 1);
-    unsigned int mask = bit_mask(list->count);
-    list->bits = (length + 1) & mask;
-    list->current = list->count - 1;
-    return list;
-}
-
-
-void base1_2List_free(Base1_2List* list) {
-    free(list);
-}
-
-+ (id<FLLRBNode>) buildBalancedTree:(NSArray *)keys dictionary:(NSDictionary *)dictionary subArrayStartIndex:(NSUInteger)startIndex length:(NSUInteger)length {
-    length = MIN(keys.count - startIndex, length); // Bound length by the actual length of the array
-    if (length == 0) {
-        return nil;
-    } else if (length == 1) {
-        id key = keys[startIndex];
-        return [[FLLRBValueNode alloc] initWithKey:key withValue:dictionary[key] withColor:BLACK withLeft:nil withRight:nil];
-    } else {
-        NSUInteger middle = length / 2;
-        id<FLLRBNode> left = [FTreeSortedDictionary buildBalancedTree:keys dictionary:dictionary subArrayStartIndex:startIndex length:middle];
-        id<FLLRBNode> right = [FTreeSortedDictionary buildBalancedTree:keys dictionary:dictionary subArrayStartIndex:(startIndex+middle+1) length:middle];
-        id key = keys[startIndex + middle];
-        return [[FLLRBValueNode alloc] initWithKey:key withValue:dictionary[key] withColor:BLACK withLeft:left withRight:right];
-    }
-}
-
-+ (id<FLLRBNode>) rootFrom12List:(Base1_2List *)base1_2List keyList:(NSArray *)keyList dictionary:(NSDictionary *)dictionary {
-    __block id<FLLRBNode> root = nil;
-    __block id<FLLRBNode> node = nil;
-    __block NSUInteger index = keyList.count;
-
-    fbt_void_nsnumber_int buildPennant = ^(NSNumber* color, NSUInteger chunkSize) {
-        NSUInteger startIndex = index - chunkSize + 1;
-        index -= chunkSize;
-        id key = keyList[index];
-        id<FLLRBNode> childTree = [self buildBalancedTree:keyList dictionary:dictionary subArrayStartIndex:startIndex length:(chunkSize - 1)];
-        id<FLLRBNode> pennant = [[FLLRBValueNode alloc] initWithKey:key withValue:dictionary[key] withColor:color withLeft:nil withRight:childTree];
-        //attachPennant(pennant);
-        if (node) {
-            node.left = pennant;
-            node = pennant;
-        } else {
-            root = pennant;
-            node = pennant;
-        }
-    };
-
-    for (int i = 0; i < base1_2List->count; ++i) {
-        BOOL isOne = base1_2List_next(base1_2List);
-        NSUInteger chunkSize = (NSUInteger)pow(2.0, base1_2List->count - (i + 1));
-        if (isOne) {
-            buildPennant(BLACK, chunkSize);
-        } else {
-            buildPennant(BLACK, chunkSize);
-            buildPennant(RED, chunkSize);
-        }
-    }
-    return root;
-}
-
-/**
- * Uses the algorithm linked here:
- * http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.46.1458
- */
-
-+ (FImmutableSortedDictionary *)fromDictionary:(NSDictionary *)dictionary withComparator:(NSComparator)comparator
-{
-    // Steps:
-    // 0. Sort the array
-    // 1. Calculate the 1-2 number
-    // 2. Build From 1-2 number
-    //   0. for each digit in 1-2 number
-    //     0. calculate chunk size
-    //     1. build 1 or 2 pennants of that size
-    //     2. attach pennants and update node pointer
-    //   1. return root
-    NSMutableArray *sortedKeyList = [NSMutableArray arrayWithCapacity:dictionary.count];
-    [dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
-        [sortedKeyList addObject:key];
-    }];
-    [sortedKeyList sortUsingComparator:comparator];
-
-    [sortedKeyList enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
-        if (idx > 0) {
-            if (comparator(sortedKeyList[idx - 1], obj) != NSOrderedAscending) {
-                [NSException raise:NSInvalidArgumentException format:@"Can't create FImmutableSortedDictionary with keys with same ordering!"];
-            }
-        }
-    }];
-
-    Base1_2List* list = base1_2List_new((unsigned int)sortedKeyList.count);
-    id<FLLRBNode> root = [self rootFrom12List:list keyList:sortedKeyList dictionary:dictionary];
-    base1_2List_free(list);
-
-    if (root != nil) {
-        return [[FTreeSortedDictionary alloc] initWithComparator:comparator withRoot:root];
-    } else {
-        return [[FTreeSortedDictionary alloc] initWithComparator:comparator];
-    }
-}
-
-@end
-
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionaryEnumerator.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionaryEnumerator.h
deleted file mode 100644
index d79fe8e..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionaryEnumerator.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#import <Foundation/Foundation.h>
-#import "FTreeSortedDictionary.h"
-
-@interface FTreeSortedDictionaryEnumerator : NSEnumerator
-
-- (id)initWithImmutableSortedDictionary:(FTreeSortedDictionary *)aDict startKey:(id)startKey isReverse:(BOOL)reverse;
-- (id)nextObject;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionaryEnumerator.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionaryEnumerator.m
deleted file mode 100644
index 2aca86e..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionaryEnumerator.m
+++ /dev/null
@@ -1,83 +0,0 @@
-#import "FTreeSortedDictionaryEnumerator.h"
-
-@interface FTreeSortedDictionaryEnumerator()
-@property (nonatomic, strong) FTreeSortedDictionary* immutableSortedDictionary;
-@property (nonatomic, strong) NSMutableArray* stack;
-@property (nonatomic) BOOL isReverse;
-
-@end
-
-@implementation FTreeSortedDictionaryEnumerator
-
-- (id)initWithImmutableSortedDictionary:(FTreeSortedDictionary *)aDict
-                               startKey:(id)startKey isReverse:(BOOL)reverse {
-    self = [super init];
-    if (self) {
-        self.immutableSortedDictionary = aDict;
-        self.stack = [[NSMutableArray alloc] init];
-        self.isReverse = reverse;
-
-        NSComparator comparator = aDict.comparator;
-        id<FLLRBNode> node = self.immutableSortedDictionary.root;
-
-        NSInteger cmp;
-        while(![node isEmpty]) {
-            cmp = startKey ? comparator(node.key, startKey) : 1;
-            // flip the comparison if we're going in reverse
-            if (self.isReverse) cmp *= -1;
-
-            if (cmp < 0) {
-                // This node is less than our start key. Ignore it.
-                if (self.isReverse) {
-                    node = node.left;
-                } else {
-                    node = node.right;
-                }
-            } else if (cmp == 0) {
-                // This node is exactly equal to our start key. Push it on the stack, but stop iterating:
-                [self.stack addObject:node];
-                break;
-            } else {
-                // This node is greater than our start key, add it to the stack and move on to the next one.
-                [self.stack addObject:node];
-                if (self.isReverse) {
-                    node = node.right;
-                } else {
-                    node = node.left;
-                }
-            }
-        }
-    }
-    return self;
-}
-
-- (id)nextObject {
-    if([self.stack count] == 0) {
-        return nil;
-    }
-
-    id<FLLRBNode> node = nil;
-    @synchronized(self.stack) {
-        node = [self.stack lastObject];
-        [self.stack removeLastObject];
-    }
-    id result = node.key;
-
-    if (self.isReverse) {
-        node = node.left;
-        while (![node isEmpty]) {
-            [self.stack addObject:node];
-            node = node.right;
-        }
-    } else {
-        node = node.right;
-        while (![node isEmpty]) {
-            [self.stack addObject:node];
-            node = node.left;
-        }
-    }
-
-    return result;
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/FSRWebSocket.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/FSRWebSocket.h
deleted file mode 100644
index 1ca1815..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/FSRWebSocket.h
+++ /dev/null
@@ -1,107 +0,0 @@
-//
-//   Copyright 2012 Square Inc.
-//
-//   Licensed under the Apache License, Version 2.0 (the "License");
-//   you may not use this file except in compliance with the License.
-//   You may obtain a copy of the License at
-//
-//       http://www.apache.org/licenses/LICENSE-2.0
-//
-//   Unless required by applicable law or agreed to in writing, software
-//   distributed under the License is distributed on an "AS IS" BASIS,
-//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-//   See the License for the specific language governing permissions and
-//   limitations under the License.
-//
-
-#import <Foundation/Foundation.h>
-#import <Security/SecCertificate.h>
-
-typedef enum {
-    SR_CONNECTING   = 0,
-    SR_OPEN         = 1,
-    SR_CLOSING      = 2,
-    SR_CLOSED       = 3,
-
-} FSRReadyState;
-
-@class FSRWebSocket;
-
-extern NSString *const FSRWebSocketErrorDomain;
-
-@protocol FSRWebSocketDelegate;
-
-@interface FSRWebSocket : NSObject <NSStreamDelegate>
-
-@property (nonatomic, weak) id <FSRWebSocketDelegate> delegate;
-
-@property (nonatomic, readonly) FSRReadyState readyState;
-@property (nonatomic, readonly, retain) NSURL *url;
-
-// This returns the negotiated protocol.
-// It will be niluntil after the handshake completes.
-@property (nonatomic, readonly, copy) NSString *protocol;
-
-// Protocols should be an array of strings that turn into Sec-WebSocket-Protocol
-- (id)initWithURLRequest:(NSURLRequest *)request protocols:(NSArray *)protocols queue:(dispatch_queue_t)queue andUserAgent:(NSString *)userAgent;
-- (id)initWithURLRequest:(NSURLRequest *)request protocols:(NSArray *)protocols;
-- (id)initWithURLRequest:(NSURLRequest *)request queue:(dispatch_queue_t)queue andUserAgent:(NSString *)userAgent;
-- (id)initWithURLRequest:(NSURLRequest *)request;
-
-// Some helper constructors
-- (id)initWithURL:(NSURL *)url protocols:(NSArray *)protocols;
-- (id)initWithURL:(NSURL *)url;
-
-// Delegate queue will be dispatch_main_queue by default.
-// You cannot set both OperationQueue and dispatch_queue.
-- (void)setDelegateOperationQueue:(NSOperationQueue*) queue;
-- (void)setDelegateDispatchQueue:(dispatch_queue_t)queue;
-
-// By default, it will schedule itself on +[NSRunLoop SR_networkRunLoop] using defaultModes.
-- (void)scheduleInRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode;
-- (void)unscheduleFromRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode;
-
-// SRWebSockets are intended one-time-use only.  Open should be called once and only once
-- (void)open;
-
-- (void)close;
-- (void)closeWithCode:(NSInteger)code reason:(NSString *)reason;
-
-// Send a UTF8 String or Data
-- (void)send:(id)data;
-
-@end
-
-@protocol FSRWebSocketDelegate <NSObject>
-
-// message will either be an NSString if the server is using text
-// or NSData if the server is using binary
-- (void)webSocket:(FSRWebSocket *)webSocket didReceiveMessage:(id)message;
-
-@optional
-
-- (void)webSocketDidOpen:(FSRWebSocket *)webSocket;
-- (void)webSocket:(FSRWebSocket *)webSocket didFailWithError:(NSError *)error;
-- (void)webSocket:(FSRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reason:(NSString *)reason wasClean:(BOOL)wasClean;
-
-@end
-
-
-@interface NSURLRequest (FCertificateAdditions)
-
-@property (nonatomic, retain, readonly) NSArray *FSR_SSLPinnedCertificates;
-
-@end
-
-
-@interface NSMutableURLRequest (FCertificateAdditions)
-
-@property (nonatomic, retain) NSArray *FSR_SSLPinnedCertificates;
-
-@end
-
-@interface NSRunLoop (FSRWebSocket)
-
-+ (NSRunLoop *)FSR_networkRunLoop;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/FSRWebSocket.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/FSRWebSocket.m
deleted file mode 100644
index 92d9d55..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/FSRWebSocket.m
+++ /dev/null
@@ -1,1858 +0,0 @@
-//
-//   Copyright 2012 Square Inc.
-//
-//   Licensed under the Apache License, Version 2.0 (the "License");
-//   you may not use this file except in compliance with the License.
-//   You may obtain a copy of the License at
-//
-//       http://www.apache.org/licenses/LICENSE-2.0
-//
-//   Unless required by applicable law or agreed to in writing, software
-//   distributed under the License is distributed on an "AS IS" BASIS,
-//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-//   See the License for the specific language governing permissions and
-//   limitations under the License.
-//
-
-#import <Foundation/Foundation.h>
-
-#import "FSRWebSocket.h"
-
-#if __has_include(<unicode/utf8.h>)
-#define HAS_ICU
-#endif
-
-#import <sys/socket.h>
-
-#ifdef HAS_ICU
-#import <unicode/utf8.h>
-#endif
-
-#if __has_include(<Endian.h>)
-#import <Endian.h>
-#else
-#import <CoreServices/CoreServices.h>
-#endif
-
-#import <CommonCrypto/CommonDigest.h>
-#import <Security/SecRandom.h>
-#import "fbase64.h"
-#import "NSData+SRB64Additions.h"
-
-#if OS_OBJECT_USE_OBJC_RETAIN_RELEASE
-#define sr_dispatch_retain(x)
-#define sr_dispatch_release(x)
-#define maybe_bridge(x) ((__bridge void *) x)
-#else
-#define sr_dispatch_retain(x) dispatch_retain(x)
-#define sr_dispatch_release(x) dispatch_release(x)
-#define maybe_bridge(x) (x)
-#endif
-
-typedef enum  {
-    SROpCodeTextFrame = 0x1,
-    SROpCodeBinaryFrame = 0x2,
-    //3-7Reserved
-    SROpCodeConnectionClose = 0x8,
-    SROpCodePing = 0x9,
-    SROpCodePong = 0xA,
-    //B-F reserved
-} FSROpCode;
-
-typedef enum {
-    SRStatusCodeNormal = 1000,
-    SRStatusCodeGoingAway = 1001,
-    SRStatusCodeProtocolError = 1002,
-    SRStatusCodeUnhandledType = 1003,
-    // 1004 reserved
-    SRStatusNoStatusReceived = 1005,
-    // 1004-1006 reserved
-    SRStatusCodeInvalidUTF8 = 1007,
-    SRStatusCodePolicyViolated = 1008,
-    SRStatusCodeMessageTooBig = 1009,
-} FSRStatusCode;
-
-typedef struct {
-    BOOL fin;
-//  BOOL rsv1;
-//  BOOL rsv2;
-//  BOOL rsv3;
-    uint8_t opcode;
-    BOOL masked;
-    uint64_t payload_length;
-} frame_header;
-
-static NSString *const SRWebSocketAppendToSecKeyString = @"258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
-
-static inline int32_t validate_dispatch_data_partial_string(NSData *data);
-static inline void SRFastLog(NSString *format, ...);
-
-@interface NSData (FSRWebSocket)
-
-- (NSString *)stringBySHA1ThenBase64Encoding;
-
-@end
-
-
-@interface NSString (FSRWebSocket)
-
-- (NSString *)stringBySHA1ThenBase64Encoding;
-
-@end
-
-
-@interface NSURL (FSRWebSocket)
-
-// The origin isn't really applicable for a native application
-// So instead, just map ws -> http and wss -> https
-- (NSString *)SR_origin;
-
-@end
-
-@interface _FSRRunLoopThread : NSThread
-
-@property (nonatomic, readonly) NSRunLoop *runLoop;
-
-@end
-
-static NSString *newSHA1String(const char *bytes, size_t length) {
-    uint8_t md[CC_SHA1_DIGEST_LENGTH];
-
-    CC_SHA1(bytes, (int)length, md);
-
-    size_t buffer_size = ((sizeof(md) * 3 + 2) / 2);
-
-    char *buffer =  (char *)malloc(buffer_size);
-
-    int len = f_b64_ntop(md, CC_SHA1_DIGEST_LENGTH, buffer, buffer_size);
-    if (len == -1) {
-        free(buffer);
-        return nil;
-    } else{
-        return [[NSString alloc] initWithBytesNoCopy:buffer length:len encoding:NSASCIIStringEncoding freeWhenDone:YES];
-    }
-}
-
-@implementation NSData (FSRWebSocket)
-
-- (NSString *)stringBySHA1ThenBase64Encoding;
-{
-    return newSHA1String(self.bytes, self.length);
-}
-
-@end
-
-
-@implementation NSString (FSRWebSocket)
-
-- (NSString *)stringBySHA1ThenBase64Encoding;
-{
-    return newSHA1String(self.UTF8String, self.length);
-}
-
-@end
-
-NSString *const FSRWebSocketErrorDomain = @"FSRWebSocketErrorDomain";
-
-// Returns number of bytes consumed. returning 0 means you didn't match.
-// Sends bytes to callback handler;
-typedef size_t (^stream_scanner)(NSData *collected_data);
-
-typedef void (^data_callback)(FSRWebSocket *webSocket,  NSData *data);
-
-@interface FSRIOConsumer : NSObject {
-    stream_scanner _scanner;
-    data_callback _handler;
-    size_t _bytesNeeded;
-    BOOL _readToCurrentFrame;
-    BOOL _unmaskBytes;
-}
-@property (nonatomic, copy, readonly) stream_scanner consumer;
-@property (nonatomic, copy, readonly) data_callback handler;
-@property (nonatomic, assign) size_t bytesNeeded;
-@property (nonatomic, assign, readonly) BOOL readToCurrentFrame;
-@property (nonatomic, assign, readonly) BOOL unmaskBytes;
-
-@end
-
-// This class is not thread-safe, and is expected to always be run on the same queue.
-@interface FSRIOConsumerPool : NSObject
-
-- (id)initWithBufferCapacity:(NSUInteger)poolSize;
-
-- (FSRIOConsumer *)consumerWithScanner:(stream_scanner)scanner handler:(data_callback)handler bytesNeeded:(size_t)bytesNeeded readToCurrentFrame:(BOOL)readToCurrentFrame unmaskBytes:(BOOL)unmaskBytes;
-- (void)returnConsumer:(FSRIOConsumer *)consumer;
-
-@end
-
-@interface FSRWebSocket ()  <NSStreamDelegate>
-
-- (void)_writeData:(NSData *)data;
-- (void)_closeWithProtocolError:(NSString *)message;
-- (void)_failWithError:(NSError *)error;
-
-- (void)_disconnect;
-
-- (void)_readFrameNew;
-- (void)_readFrameContinue;
-
-- (void)_pumpScanner;
-
-- (void)_pumpWriting;
-
-- (void)_addConsumerWithScanner:(stream_scanner)consumer callback:(data_callback)callback;
-- (void)_addConsumerWithDataLength:(size_t)dataLength callback:(data_callback)callback readToCurrentFrame:(BOOL)readToCurrentFrame unmaskBytes:(BOOL)unmaskBytes;
-- (void)_addConsumerWithScanner:(stream_scanner)consumer callback:(data_callback)callback dataLength:(size_t)dataLength;
-- (void)_readUntilBytes:(const void *)bytes length:(size_t)length callback:(data_callback)dataHandler;
-- (void)_readUntilHeaderCompleteWithCallback:(data_callback)dataHandler;
-
-- (void)_sendFrameWithOpcode:(FSROpCode)opcode data:(id)data;
-
-- (BOOL)_checkHandshake:(CFHTTPMessageRef)httpMessage;
-- (void)_SR_commonInit;
-
-- (void)_initializeStreams;
-- (void)_connect;
-
-@property (nonatomic) FSRReadyState readyState;
-
-@property (nonatomic) NSOperationQueue *delegateOperationQueue;
-@property (nonatomic) dispatch_queue_t delegateDispatchQueue;
-
-@end
-
-
-@implementation FSRWebSocket {
-    NSInteger _webSocketVersion;
-
-    NSOperationQueue *_delegateOperationQueue;
-    dispatch_queue_t _delegateDispatchQueue;
-    dispatch_queue_t _workQueue;
-    NSMutableArray *_consumers;
-
-    NSInputStream *_inputStream;
-    NSOutputStream *_outputStream;
-
-    NSMutableData *_readBuffer;
-    NSInteger _readBufferOffset;
-
-    NSMutableData *_outputBuffer;
-    NSInteger _outputBufferOffset;
-
-    uint8_t _currentFrameOpcode;
-    size_t _currentFrameCount;
-    size_t _readOpCount;
-    uint32_t _currentStringScanPosition;
-    NSMutableData *_currentFrameData;
-
-    NSString *_closeReason;
-
-    NSString *_secKey;
-
-    BOOL _pinnedCertFound;
-
-    uint8_t _currentReadMaskKey[4];
-    size_t _currentReadMaskOffset;
-
-    BOOL _consumerStopped;
-
-    BOOL _closeWhenFinishedWriting;
-    BOOL _failed;
-
-    BOOL _secure;
-    NSURLRequest *_urlRequest;
-    NSString *_userAgent;
-
-    CFHTTPMessageRef _receivedHTTPHeaders;
-
-    BOOL _sentClose;
-    BOOL _didFail;
-    BOOL _cleanupScheduled;
-    int _closeCode;
-
-    BOOL _isPumping;
-
-    NSMutableSet *_scheduledRunloops;
-
-    // We use this to retain ourselves.
-    __strong FSRWebSocket *_selfRetain;
-
-    NSArray *_requestedProtocols;
-    FSRIOConsumerPool *_consumerPool;
-}
-
-@synthesize delegate = _delegate;
-@synthesize url = _url;
-@synthesize readyState = _readyState;
-@synthesize protocol = _protocol;
-
-static __strong NSData *CRLFCRLF;
-
-+ (void)initialize;
-{
-    CRLFCRLF = [[NSData alloc] initWithBytes:"\r\n\r\n" length:4];
-}
-
-- (id)initWithURLRequest:(NSURLRequest *)request protocols:(NSArray *)protocols queue:(dispatch_queue_t)queue andUserAgent:(NSString *)userAgent;
-{
-    self = [super init];
-    if (self) {
-        assert(request.URL);
-        _url = request.URL;
-        NSString *scheme = [_url scheme];
-
-        _requestedProtocols = [protocols copy];
-        _userAgent = userAgent;
-
-        assert([scheme isEqualToString:@"ws"] || [scheme isEqualToString:@"http"] || [scheme isEqualToString:@"wss"] || [scheme isEqualToString:@"https"]);
-        _urlRequest = request;
-
-        if ([scheme isEqualToString:@"wss"] || [scheme isEqualToString:@"https"]) {
-            _secure = YES;
-        }
-
-        if (!queue) {
-            _delegateDispatchQueue = dispatch_get_main_queue();
-        } else {
-            _delegateDispatchQueue = queue;
-        }
-
-        [self _SR_commonInit];
-    }
-
-    return self;
-}
-
-- (id)initWithURLRequest:(NSURLRequest *)request protocols:(NSArray *)protocols;
-{
-    return [self initWithURLRequest:request protocols:nil queue:nil andUserAgent:nil];
-}
-
-- (id)initWithURLRequest:(NSURLRequest *)request queue:(dispatch_queue_t)queue andUserAgent:(NSString *)userAgent;
-{
-    return [self initWithURLRequest:request protocols:nil queue:queue andUserAgent:userAgent];
-}
-
-- (id)initWithURLRequest:(NSURLRequest *)request;
-{
-    return [self initWithURLRequest:request protocols:nil];
-}
-
-- (id)initWithURL:(NSURL *)url;
-{
-    return [self initWithURL:url protocols:nil];
-}
-
-- (id)initWithURL:(NSURL *)url protocols:(NSArray *)protocols;
-{
-    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
-    return [self initWithURLRequest:request protocols:protocols];
-}
-
-- (void)_SR_commonInit;
-{
-    _readyState = SR_CONNECTING;
-
-    _consumerStopped = YES;
-
-    _webSocketVersion = 13;
-
-    _workQueue = dispatch_queue_create(NULL, DISPATCH_QUEUE_SERIAL);
-
-    // Going to set a specific on the queue so we can validate we're on the work queue
-    dispatch_queue_set_specific(_workQueue, (__bridge void *)self, maybe_bridge(_workQueue), NULL);
-
-    sr_dispatch_retain(_delegateDispatchQueue);
-
-    _readBuffer = [[NSMutableData alloc] init];
-    _outputBuffer = [[NSMutableData alloc] init];
-
-    _currentFrameData = [[NSMutableData alloc] init];
-
-    _consumers = [[NSMutableArray alloc] init];
-
-    _consumerPool = [[FSRIOConsumerPool alloc] init];
-
-    _scheduledRunloops = [[NSMutableSet alloc] init];
-
-    [self _initializeStreams];
-
-    // default handlers
-}
-
-- (void)assertOnWorkQueue;
-{
-    assert(dispatch_get_specific((__bridge void *)self) == maybe_bridge(_workQueue));
-}
-
-- (void)dealloc
-{
-    _inputStream.delegate = nil;
-    _outputStream.delegate = nil;
-
-    [_inputStream close];
-    [_outputStream close];
-
-    sr_dispatch_release(_workQueue);
-    _workQueue = NULL;
-
-    if (_receivedHTTPHeaders) {
-        CFRelease(_receivedHTTPHeaders);
-        _receivedHTTPHeaders = NULL;
-    }
-
-    if (_delegateDispatchQueue) {
-        sr_dispatch_release(_delegateDispatchQueue);
-        _delegateDispatchQueue = NULL;
-    }
-}
-
-#ifndef NDEBUG
-
-- (void)setReadyState:(FSRReadyState)aReadyState;
-{
-    [self willChangeValueForKey:@"readyState"];
-    assert(aReadyState > _readyState);
-    _readyState = aReadyState;
-    [self didChangeValueForKey:@"readyState"];
-}
-
-#endif
-
-- (void)open;
-{
-    assert(_url);
-    NSAssert(_readyState == SR_CONNECTING, @"Cannot call -(void)open on SRWebSocket more than once");
-
-    _selfRetain = self;
-
-    [self _connect];
-}
-
-// Calls block on delegate queue
-- (void)_performDelegateBlock:(dispatch_block_t)block;
-{
-    if (_delegateOperationQueue) {
-        [_delegateOperationQueue addOperationWithBlock:block];
-    } else {
-        assert(_delegateDispatchQueue);
-        dispatch_async(_delegateDispatchQueue, block);
-    }
-}
-
-- (void)setDelegateDispatchQueue:(dispatch_queue_t)queue;
-{
-    if (queue) {
-        sr_dispatch_retain(queue);
-    }
-
-    if (_delegateDispatchQueue) {
-        sr_dispatch_release(_delegateDispatchQueue);
-    }
-
-    _delegateDispatchQueue = queue;
-}
-
-- (BOOL)_checkHandshake:(CFHTTPMessageRef)httpMessage;
-{
-    NSString *acceptHeader = CFBridgingRelease(CFHTTPMessageCopyHeaderFieldValue(httpMessage, CFSTR("Sec-WebSocket-Accept")));
-
-    if (acceptHeader == nil) {
-        return NO;
-    }
-
-    NSString *concattedString = [_secKey stringByAppendingString:SRWebSocketAppendToSecKeyString];
-    NSString *expectedAccept = [concattedString stringBySHA1ThenBase64Encoding];
-
-    return [acceptHeader isEqualToString:expectedAccept];
-}
-
-- (void)_HTTPHeadersDidFinish;
-{
-    NSInteger responseCode = CFHTTPMessageGetResponseStatusCode(_receivedHTTPHeaders);
-
-    if (responseCode >= 400) {
-        SRFastLog(@"Request failed with response code %d", responseCode);
-        [self _failWithError:[NSError errorWithDomain:@"org.lolrus.SocketRocket" code:2132 userInfo:[NSDictionary dictionaryWithObject:[NSString stringWithFormat:@"received bad response code from server %u", (int)responseCode] forKey:NSLocalizedDescriptionKey]]];
-        return;
-
-    }
-
-    if(![self _checkHandshake:_receivedHTTPHeaders]) {
-        [self _failWithError:[NSError errorWithDomain:FSRWebSocketErrorDomain code:2133 userInfo:[NSDictionary dictionaryWithObject:[NSString stringWithFormat:@"Invalid Sec-WebSocket-Accept response"] forKey:NSLocalizedDescriptionKey]]];
-        return;
-    }
-
-    NSString *negotiatedProtocol = CFBridgingRelease(CFHTTPMessageCopyHeaderFieldValue(_receivedHTTPHeaders, CFSTR("Sec-WebSocket-Protocol")));
-    if (negotiatedProtocol) {
-        // Make sure we requested the protocol
-        if ([_requestedProtocols indexOfObject:negotiatedProtocol] == NSNotFound) {
-            [self _failWithError:[NSError errorWithDomain:FSRWebSocketErrorDomain code:2133 userInfo:[NSDictionary dictionaryWithObject:[NSString stringWithFormat:@"Server specified Sec-WebSocket-Protocol that wasn't requested"] forKey:NSLocalizedDescriptionKey]]];
-            return;
-        }
-
-        _protocol = negotiatedProtocol;
-    }
-
-    self.readyState = SR_OPEN;
-
-    if (!_didFail) {
-        [self _readFrameNew];
-    }
-
-    [self _performDelegateBlock:^{
-        if ([self.delegate respondsToSelector:@selector(webSocketDidOpen:)]) {
-            [self.delegate webSocketDidOpen:self];
-        };
-    }];
-}
-
-
-- (void)_readHTTPHeader;
-{
-    if (_receivedHTTPHeaders == NULL) {
-        _receivedHTTPHeaders = CFHTTPMessageCreateEmpty(NULL, NO);
-    }
-
-    [self _readUntilHeaderCompleteWithCallback:^(FSRWebSocket *self,  NSData *data) {
-        CFHTTPMessageAppendBytes(self->_receivedHTTPHeaders, (const UInt8 *)data.bytes, data.length);
-
-        if (CFHTTPMessageIsHeaderComplete(self->_receivedHTTPHeaders)) {
-            SRFastLog(@"Finished reading headers %@", CFBridgingRelease(CFHTTPMessageCopyAllHeaderFields(self->_receivedHTTPHeaders)));
-            [self _HTTPHeadersDidFinish];
-        } else {
-            [self _readHTTPHeader];
-        }
-    }];
-}
-
-- (void)didConnect
-{
-    SRFastLog(@"Connected");
-    CFHTTPMessageRef request = CFHTTPMessageCreateRequest(NULL, CFSTR("GET"), (__bridge CFURLRef)_url, kCFHTTPVersion1_1);
-
-    // Set host first so it defaults
-    CFHTTPMessageSetHeaderFieldValue(request, CFSTR("Host"), (__bridge CFStringRef)
-                                     (_url.port != nil ? [NSString stringWithFormat:@"%@:%@",
-                                                          _url.host, _url.port] : _url.host));
-
-    NSMutableData *keyBytes = [[NSMutableData alloc] initWithLength:16];
-    int result = SecRandomCopyBytes(kSecRandomDefault, keyBytes.length, keyBytes.mutableBytes);
-    assert(result == 0);
-    _secKey = [FSRUtilities base64EncodedStringFromData:keyBytes];
-    assert([_secKey length] == 24);
-
-    CFHTTPMessageSetHeaderFieldValue(request, CFSTR("Upgrade"), CFSTR("websocket"));
-    CFHTTPMessageSetHeaderFieldValue(request, CFSTR("Connection"), CFSTR("Upgrade"));
-    if (_userAgent) {
-        CFHTTPMessageSetHeaderFieldValue(request, CFSTR("User-Agent"), (__bridge CFStringRef)_userAgent);
-    }
-
-    CFHTTPMessageSetHeaderFieldValue(request, CFSTR("Sec-WebSocket-Key"), (__bridge CFStringRef)_secKey);
-    CFHTTPMessageSetHeaderFieldValue(request, CFSTR("Sec-WebSocket-Version"), (__bridge CFStringRef)[NSString stringWithFormat:@"%u", (int)_webSocketVersion]);
-
-    CFHTTPMessageSetHeaderFieldValue(request, CFSTR("Origin"), (__bridge CFStringRef)_url.SR_origin);
-
-    if (_requestedProtocols) {
-        CFHTTPMessageSetHeaderFieldValue(request, CFSTR("Sec-WebSocket-Protocol"), (__bridge CFStringRef)[_requestedProtocols componentsJoinedByString:@", "]);
-    }
-
-    [_urlRequest.allHTTPHeaderFields enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
-        CFHTTPMessageSetHeaderFieldValue(request, (__bridge CFStringRef)key, (__bridge CFStringRef)obj);
-    }];
-
-    NSData *message = CFBridgingRelease(CFHTTPMessageCopySerializedMessage(request));
-
-    CFRelease(request);
-
-    [self _writeData:message];
-    [self _readHTTPHeader];
-}
-
-//- (void)_connectToHost:(NSString *)host port:(NSInteger)port;
-- (void)_initializeStreams;
-{
-    NSInteger port = _url.port.integerValue;
-    if (port == 0) {
-        if (!_secure) {
-            port = 80;
-        } else {
-            port = 443;
-        }
-    }
-    NSString *host = _url.host;
-
-    CFReadStreamRef readStream = NULL;
-    CFWriteStreamRef writeStream = NULL;
-
-    CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)host, (int)port, &readStream, &writeStream);
-
-    // XXX
-    CFReadStreamSetProperty(readStream,  kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeBackground);
-    CFWriteStreamSetProperty(writeStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeBackground);
-
-    _outputStream = CFBridgingRelease(writeStream);
-    _inputStream = CFBridgingRelease(readStream);
-
-
-    if (_secure) {
-        NSMutableDictionary *SSLOptions = [[NSMutableDictionary alloc] init];
-
-        [_outputStream setProperty:(__bridge id)kCFStreamSocketSecurityLevelNegotiatedSSL forKey:(__bridge id)kCFStreamPropertySocketSecurityLevel];
-
-        // If we're using pinned certs, don't validate the certificate chain
-        if ([_urlRequest FSR_SSLPinnedCertificates].count) {
-            [SSLOptions setValue:[NSNumber numberWithBool:NO] forKey:(__bridge id)kCFStreamSSLValidatesCertificateChain];
-        }
-
-        [_outputStream setProperty:SSLOptions
-                            forKey:(__bridge id)kCFStreamPropertySSLSettings];
-    }
-
-    _inputStream.delegate = self;
-    _outputStream.delegate = self;
-
-    [_outputStream open];
-    [_inputStream open];
-}
-
-- (void)_connect;
-{
-    if (!_scheduledRunloops.count) {
-        [self scheduleInRunLoop:[NSRunLoop FSR_networkRunLoop] forMode:NSDefaultRunLoopMode];
-    }
-
-
-    [_outputStream open];
-    [_inputStream open];
-}
-
-- (void)scheduleInRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode;
-{
-    [_outputStream scheduleInRunLoop:aRunLoop forMode:mode];
-    [_inputStream scheduleInRunLoop:aRunLoop forMode:mode];
-
-    [_scheduledRunloops addObject:@[aRunLoop, mode]];
-}
-
-- (void)unscheduleFromRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode;
-{
-    [_outputStream removeFromRunLoop:aRunLoop forMode:mode];
-    [_inputStream removeFromRunLoop:aRunLoop forMode:mode];
-
-    [_scheduledRunloops removeObject:@[aRunLoop, mode]];
-}
-
-- (void)close;
-{
-    [self closeWithCode:-1 reason:nil];
-}
-
-- (void)closeWithCode:(NSInteger)code reason:(NSString *)reason;
-{
-    assert(code);
-    dispatch_async(_workQueue, ^{
-        if (self.readyState == SR_CLOSING || self.readyState == SR_CLOSED) {
-            return;
-        }
-
-        BOOL wasConnecting = self.readyState == SR_CONNECTING;
-
-        self.readyState = SR_CLOSING;
-
-        SRFastLog(@"Closing with code %d reason %@", code, reason);
-
-        if (wasConnecting) {
-            [self _disconnect];
-            return;
-        }
-
-        size_t maxMsgSize = [reason maximumLengthOfBytesUsingEncoding:NSUTF8StringEncoding];
-        NSMutableData *mutablePayload = [[NSMutableData alloc] initWithLength:sizeof(uint16_t) + maxMsgSize];
-        NSData *payload = mutablePayload;
-
-        ((uint16_t *)mutablePayload.mutableBytes)[0] = EndianU16_BtoN(code);
-
-        if (reason) {
-            NSRange remainingRange = {0};
-
-            NSUInteger usedLength = 0;
-
-            BOOL success = [reason getBytes:(char *)mutablePayload.mutableBytes + sizeof(uint16_t) maxLength:payload.length - sizeof(uint16_t) usedLength:&usedLength encoding:NSUTF8StringEncoding options:NSStringEncodingConversionExternalRepresentation range:NSMakeRange(0, reason.length) remainingRange:&remainingRange];
-
-            assert(success);
-            assert(remainingRange.length == 0);
-
-            if (usedLength != maxMsgSize) {
-                payload = [payload subdataWithRange:NSMakeRange(0, usedLength + sizeof(uint16_t))];
-            }
-        }
-
-
-        [self _sendFrameWithOpcode:SROpCodeConnectionClose data:payload];
-    });
-}
-
-- (void)_closeWithProtocolError:(NSString *)message;
-{
-    // Need to shunt this on the _callbackQueue first to see if they received any messages
-    [self _performDelegateBlock:^{
-        [self closeWithCode:SRStatusCodeProtocolError reason:message];
-        dispatch_async(self->_workQueue, ^{
-            [self _disconnect];
-        });
-    }];
-}
-
-- (void)_failWithError:(NSError *)error;
-{
-    dispatch_async(_workQueue, ^{
-        if (self.readyState != SR_CLOSED) {
-            self->_failed = YES;
-            [self _performDelegateBlock:^{
-                if ([self.delegate respondsToSelector:@selector(webSocket:didFailWithError:)]) {
-                    [self.delegate webSocket:self didFailWithError:error];
-                }
-            }];
-
-            self.readyState = SR_CLOSED;
-
-            SRFastLog(@"Failing with error %@", error.localizedDescription);
-
-            [self _disconnect];
-            [self _scheduleCleanup];
-        }
-    });
-}
-
-- (void)_writeData:(NSData *)data;
-{
-    [self assertOnWorkQueue];
-
-    if (_closeWhenFinishedWriting) {
-            return;
-    }
-    [_outputBuffer appendData:data];
-    [self _pumpWriting];
-}
-- (void)send:(id)data;
-{
-    SRFastLog(@"Sending data %@", data);
-    NSAssert(self.readyState != SR_CONNECTING, @"Invalid State: Cannot call send: until connection is open");
-    // TODO: maybe not copy this for performance
-    data = [data copy];
-    dispatch_async(_workQueue, ^{
-        if ([data isKindOfClass:[NSString class]]) {
-            [self _sendFrameWithOpcode:SROpCodeTextFrame data:[(NSString *)data dataUsingEncoding:NSUTF8StringEncoding]];
-        } else if ([data isKindOfClass:[NSData class]]) {
-            [self _sendFrameWithOpcode:SROpCodeBinaryFrame data:data];
-        } else if (data == nil) {
-            [self _sendFrameWithOpcode:SROpCodeTextFrame data:data];
-        } else {
-            assert(NO);
-        }
-    });
-}
-
-- (void)handlePing:(NSData *)pingData;
-{
-    // Need to pingpong this off _callbackQueue first to make sure messages happen in order
-    [self _performDelegateBlock:^{
-        dispatch_async(self->_workQueue, ^{
-            [self _sendFrameWithOpcode:SROpCodePong data:pingData];
-        });
-    }];
-}
-
-- (void)handlePong;
-{
-    // NOOP
-}
-
-- (void)_handleMessage:(id)message
-{
-    SRFastLog(@"Received message");
-    [self _performDelegateBlock:^{
-        if ([self.delegate respondsToSelector:@selector(webSocket:didReceiveMessage:)]) {
-            [self.delegate webSocket:self didReceiveMessage:message];
-        }
-    }];
-}
-
-
-static inline BOOL closeCodeIsValid(int closeCode) {
-    if (closeCode < 1000) {
-        return NO;
-    }
-
-    if (closeCode >= 1000 && closeCode <= 1011) {
-        if (closeCode == 1004 ||
-            closeCode == 1005 ||
-            closeCode == 1006) {
-            return NO;
-        }
-        return YES;
-    }
-
-    if (closeCode >= 3000 && closeCode <= 3999) {
-        return YES;
-    }
-
-    if (closeCode >= 4000 && closeCode <= 4999) {
-        return YES;
-    }
-
-    return NO;
-}
-
-//  Note from RFC:
-//
-//  If there is a body, the first two
-//  bytes of the body MUST be a 2-byte unsigned integer (in network byte
-//  order) representing a status code with value /code/ defined in
-//  Section 7.4.  Following the 2-byte integer the body MAY contain UTF-8
-//  encoded data with value /reason/, the interpretation of which is not
-//  defined by this specification.
-
-- (void)handleCloseWithData:(NSData *)data;
-{
-    size_t dataSize = data.length;
-    __block uint16_t closeCode = 0;
-
-    SRFastLog(@"Received close frame");
-
-    if (dataSize == 1) {
-        // TODO handle error
-        [self _closeWithProtocolError:@"Payload for close must be larger than 2 bytes"];
-        return;
-    } else if (dataSize >= 2) {
-        [data getBytes:&closeCode length:sizeof(closeCode)];
-        _closeCode = EndianU16_BtoN(closeCode);
-        if (!closeCodeIsValid(_closeCode)) {
-            [self _closeWithProtocolError:[NSString stringWithFormat:@"Cannot have close code of %d", _closeCode]];
-            return;
-        }
-        if (dataSize > 2) {
-            _closeReason = [[NSString alloc] initWithData:[data subdataWithRange:NSMakeRange(2, dataSize - 2)] encoding:NSUTF8StringEncoding];
-            if (!_closeReason) {
-                [self _closeWithProtocolError:@"Close reason MUST be valid UTF-8"];
-                return;
-            }
-        }
-    } else {
-        _closeCode = SRStatusNoStatusReceived;
-    }
-
-    [self assertOnWorkQueue];
-
-    if (self.readyState == SR_OPEN) {
-        [self closeWithCode:1000 reason:nil];
-    }
-    dispatch_async(_workQueue, ^{
-        [self _disconnect];
-    });
-}
-
-- (void)_disconnect;
-{
-    [self assertOnWorkQueue];
-    SRFastLog(@"Trying to disconnect");
-    _closeWhenFinishedWriting = YES;
-    [self _pumpWriting];
-}
-
-- (void)_handleFrameWithData:(NSData *)frameData opCode:(NSInteger)opcode;
-{
-    // Check that the current data is valid UTF8
-
-    BOOL isControlFrame = (opcode == SROpCodePing || opcode == SROpCodePong || opcode == SROpCodeConnectionClose);
-    if (!isControlFrame) {
-        [self _readFrameNew];
-    } else {
-        dispatch_async(_workQueue, ^{
-            [self _readFrameContinue];
-        });
-    }
-
-    switch (opcode) {
-        case SROpCodeTextFrame: {
-            NSString *str = [[NSString alloc] initWithData:frameData encoding:NSUTF8StringEncoding];
-            if (str == nil && frameData) {
-                [self closeWithCode:SRStatusCodeInvalidUTF8 reason:@"Text frames must be valid UTF-8"];
-                dispatch_async(_workQueue, ^{
-                    [self _disconnect];
-                });
-
-                return;
-            }
-            [self _handleMessage:str];
-            break;
-        }
-        case SROpCodeBinaryFrame:
-            [self _handleMessage:[frameData copy]];
-            break;
-        case SROpCodeConnectionClose:
-            [self handleCloseWithData:frameData];
-            break;
-        case SROpCodePing:
-            [self handlePing:frameData];
-            break;
-        case SROpCodePong:
-            [self handlePong];
-            break;
-        default:
-            [self _closeWithProtocolError:[NSString stringWithFormat:@"Unknown opcode %u", (int)opcode]];
-            // TODO: Handle invalid opcode
-            break;
-    }
-}
-
-- (void)_handleFrameHeader:(frame_header)frame_header curData:(NSData *)curData;
-{
-    assert(frame_header.opcode != 0);
-
-    if (self.readyState != SR_OPEN) {
-        return;
-    }
-
-
-    BOOL isControlFrame = (frame_header.opcode == SROpCodePing || frame_header.opcode == SROpCodePong || frame_header.opcode == SROpCodeConnectionClose);
-
-    if (isControlFrame && !frame_header.fin) {
-        [self _closeWithProtocolError:@"Fragmented control frames not allowed"];
-        return;
-    }
-
-    if (isControlFrame && frame_header.payload_length >= 126) {
-        [self _closeWithProtocolError:@"Control frames cannot have payloads larger than 126 bytes"];
-        return;
-    }
-
-    if (!isControlFrame) {
-        _currentFrameOpcode = frame_header.opcode;
-        _currentFrameCount += 1;
-    }
-
-    if (frame_header.payload_length == 0) {
-        if (isControlFrame) {
-            [self _handleFrameWithData:curData opCode:frame_header.opcode];
-        } else {
-            if (frame_header.fin) {
-                [self _handleFrameWithData:_currentFrameData opCode:frame_header.opcode];
-            } else {
-                // TODO add assert that opcode is not a control;
-                [self _readFrameContinue];
-            }
-        }
-    } else {
-        [self _addConsumerWithDataLength:(size_t)frame_header.payload_length callback:^(FSRWebSocket *self, NSData *newData) {
-            if (isControlFrame) {
-                [self _handleFrameWithData:newData opCode:frame_header.opcode];
-            } else {
-                if (frame_header.fin) {
-                    [self _handleFrameWithData:self->_currentFrameData opCode:frame_header.opcode];
-                } else {
-                    // TODO add assert that opcode is not a control;
-                    [self _readFrameContinue];
-                }
-
-            }
-        } readToCurrentFrame:!isControlFrame unmaskBytes:frame_header.masked];
-    }
-}
-
-/* From RFC:
-
- 0                   1                   2                   3
- 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
- +-+-+-+-+-------+-+-------------+-------------------------------+
- |F|R|R|R| opcode|M| Payload len |    Extended payload length    |
- |I|S|S|S|  (4)  |A|     (7)     |             (16/64)           |
- |N|V|V|V|       |S|             |   (if payload len==126/127)   |
- | |1|2|3|       |K|             |                               |
- +-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
- |     Extended payload length continued, if payload len == 127  |
- + - - - - - - - - - - - - - - - +-------------------------------+
- |                               |Masking-key, if MASK set to 1  |
- +-------------------------------+-------------------------------+
- | Masking-key (continued)       |          Payload Data         |
- +-------------------------------- - - - - - - - - - - - - - - - +
- :                     Payload Data continued ...                :
- + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
- |                     Payload Data continued ...                |
- +---------------------------------------------------------------+
- */
-
-static const uint8_t SRFinMask          = 0x80;
-static const uint8_t SROpCodeMask       = 0x0F;
-static const uint8_t SRRsvMask          = 0x70;
-static const uint8_t SRMaskMask         = 0x80;
-static const uint8_t SRPayloadLenMask   = 0x7F;
-
-
-- (void)_readFrameContinue;
-{
-    assert((_currentFrameCount == 0 && _currentFrameOpcode == 0) || (_currentFrameCount > 0 && _currentFrameOpcode > 0));
-
-    [self _addConsumerWithDataLength:2 callback:^(FSRWebSocket *self, NSData *data) {
-        __block frame_header header = {0};
-
-        const uint8_t *headerBuffer = data.bytes;
-        assert(data.length >= 2);
-
-        if (headerBuffer[0] & SRRsvMask) {
-            [self _closeWithProtocolError:@"Server used RSV bits"];
-            return;
-        }
-
-        uint8_t receivedOpcode = (SROpCodeMask & headerBuffer[0]);
-
-        BOOL isControlFrame = (receivedOpcode == SROpCodePing || receivedOpcode == SROpCodePong || receivedOpcode == SROpCodeConnectionClose);
-
-        if (!isControlFrame && receivedOpcode != 0 && self->_currentFrameCount > 0) {
-            [self _closeWithProtocolError:@"all data frames after the initial data frame must have opcode 0"];
-            return;
-        }
-
-        if (receivedOpcode == 0 && self->_currentFrameCount == 0) {
-            [self _closeWithProtocolError:@"cannot continue a message"];
-            return;
-        }
-
-        header.opcode = receivedOpcode == 0 ? self->_currentFrameOpcode : receivedOpcode;
-
-        header.fin = !!(SRFinMask & headerBuffer[0]);
-
-
-        header.masked = !!(SRMaskMask & headerBuffer[1]);
-        header.payload_length = SRPayloadLenMask & headerBuffer[1];
-
-        headerBuffer = NULL;
-
-        if (header.masked) {
-            [self _closeWithProtocolError:@"Client must receive unmasked data"];
-        }
-
-        size_t extra_bytes_needed = header.masked ? sizeof(self->_currentReadMaskKey) : 0;
-
-        if (header.payload_length == 126) {
-            extra_bytes_needed += sizeof(uint16_t);
-        } else if (header.payload_length == 127) {
-            extra_bytes_needed += sizeof(uint64_t);
-        }
-
-        if (extra_bytes_needed == 0) {
-            [self _handleFrameHeader:header curData:self->_currentFrameData];
-        } else {
-            [self _addConsumerWithDataLength:extra_bytes_needed callback:^(FSRWebSocket *self, NSData *data) {
-                size_t mapped_size = data.length;
-                const void *mapped_buffer = data.bytes;
-                size_t offset = 0;
-
-                if (header.payload_length == 126) {
-                    assert(mapped_size >= sizeof(uint16_t));
-                    uint16_t newLen = EndianU16_BtoN(*(uint16_t *)(mapped_buffer));
-                    header.payload_length = newLen;
-                    offset += sizeof(uint16_t);
-                } else if (header.payload_length == 127) {
-                    assert(mapped_size >= sizeof(uint64_t));
-                    header.payload_length = EndianU64_BtoN(*(uint64_t *)(mapped_buffer));
-                    offset += sizeof(uint64_t);
-                } else {
-                    assert(header.payload_length < 126 && header.payload_length >= 0);
-                }
-
-
-                if (header.masked) {
-                    assert(mapped_size >= sizeof(self->_currentReadMaskOffset) + offset);
-                    memcpy(self->_currentReadMaskKey, ((uint8_t *)mapped_buffer) + offset, sizeof(self->_currentReadMaskKey));
-                }
-
-                [self _handleFrameHeader:header curData:self->_currentFrameData];
-            } readToCurrentFrame:NO unmaskBytes:NO];
-        }
-    } readToCurrentFrame:NO unmaskBytes:NO];
-}
-
-- (void)_readFrameNew;
-{
-    dispatch_async(_workQueue, ^{
-        [self->_currentFrameData setLength:0];
-
-        self->_currentFrameOpcode = 0;
-        self->_currentFrameCount = 0;
-        self->_readOpCount = 0;
-        self->_currentStringScanPosition = 0;
-
-        [self _readFrameContinue];
-    });
-}
-
-- (void)_pumpWriting;
-{
-    [self assertOnWorkQueue];
-
-    NSUInteger dataLength = _outputBuffer.length;
-    if (dataLength - _outputBufferOffset > 0 && _outputStream.hasSpaceAvailable) {
-        NSUInteger bytesWritten = [_outputStream write:_outputBuffer.bytes + _outputBufferOffset maxLength:dataLength - _outputBufferOffset];
-        if (bytesWritten == -1) {
-            [self _failWithError:[NSError errorWithDomain:@"org.lolrus.SocketRocket" code:2145 userInfo:[NSDictionary dictionaryWithObject:@"Error writing to stream" forKey:NSLocalizedDescriptionKey]]];
-             return;
-        }
-
-        _outputBufferOffset += bytesWritten;
-
-        if (_outputBufferOffset > 4096 && _outputBufferOffset > (_outputBuffer.length >> 1)) {
-            _outputBuffer = [[NSMutableData alloc] initWithBytes:(char *)_outputBuffer.bytes + _outputBufferOffset length:_outputBuffer.length - _outputBufferOffset];
-            _outputBufferOffset = 0;
-        }
-    }
-
-    if (_closeWhenFinishedWriting &&
-        _outputBuffer.length - _outputBufferOffset == 0 &&
-        (_inputStream.streamStatus != NSStreamStatusNotOpen &&
-         _inputStream.streamStatus != NSStreamStatusClosed) &&
-        !_sentClose) {
-        _sentClose = YES;
-
-        @synchronized (self) {
-            [_outputStream close];
-            [_inputStream close];
-
-            // TODO: Why are we missing the SocketRocket code to call unscheduleFromRunLoop???
-        }
-
-        if (!_failed) {
-            [self _performDelegateBlock:^{
-                if ([self.delegate respondsToSelector:@selector(webSocket:didCloseWithCode:reason:wasClean:)]) {
-                    [self.delegate webSocket:self didCloseWithCode:self->_closeCode reason:self->_closeReason wasClean:YES];
-                }
-            }];
-        }
-        [self _scheduleCleanup];
-    }
-}
-
-- (void)_addConsumerWithScanner:(stream_scanner)consumer callback:(data_callback)callback;
-{
-    [self assertOnWorkQueue];
-    [self _addConsumerWithScanner:consumer callback:callback dataLength:0];
-}
-
-- (void)_addConsumerWithDataLength:(size_t)dataLength callback:(data_callback)callback readToCurrentFrame:(BOOL)readToCurrentFrame unmaskBytes:(BOOL)unmaskBytes;
-{
-    [self assertOnWorkQueue];
-    assert(dataLength);
-
-    [_consumers addObject:[_consumerPool consumerWithScanner:nil handler:callback bytesNeeded:dataLength readToCurrentFrame:readToCurrentFrame unmaskBytes:unmaskBytes]];
-    [self _pumpScanner];
-}
-
-- (void)_addConsumerWithScanner:(stream_scanner)consumer callback:(data_callback)callback dataLength:(size_t)dataLength;
-{
-    [self assertOnWorkQueue];
-    [_consumers addObject:[_consumerPool consumerWithScanner:consumer handler:callback bytesNeeded:dataLength readToCurrentFrame:NO unmaskBytes:NO]];
-    [self _pumpScanner];
-}
-
-
-- (void)_scheduleCleanup
-{
-    @synchronized(self) {
-        if (_cleanupScheduled) {
-            return;
-        }
-
-        _cleanupScheduled = YES;
-
-        // Cleanup NSStream delegate's in the same RunLoop used by the streams themselves:
-        // This way we'll prevent race conditions between handleEvent and SRWebsocket's dealloc
-        NSTimer *timer = [NSTimer timerWithTimeInterval:(0.0f) target:self selector:@selector(_cleanupSelfReference:) userInfo:nil repeats:NO];
-        [[NSRunLoop FSR_networkRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
-    }
-}
-
-- (void)_cleanupSelfReference:(NSTimer *)timer
-{
-    @synchronized(self) {
-        // Nuke NSStream delegate's
-        _inputStream.delegate = nil;
-        _outputStream.delegate = nil;
-
-        // Remove the streams, right now, from the networkRunLoop
-        [_inputStream close];
-        [_outputStream close];
-    }
-
-    // Cleanup selfRetain in the same GCD queue as usual
-    dispatch_async(_workQueue, ^{
-        self->_selfRetain = nil;
-    });
-}
-
-
-static const char CRLFCRLFBytes[] = {'\r', '\n', '\r', '\n'};
-
-- (void)_readUntilHeaderCompleteWithCallback:(data_callback)dataHandler;
-{
-    [self _readUntilBytes:CRLFCRLFBytes length:sizeof(CRLFCRLFBytes) callback:dataHandler];
-}
-
-- (void)_readUntilBytes:(const void *)bytes length:(size_t)length callback:(data_callback)dataHandler;
-{
-    // TODO optimize so this can continue from where we last searched
-    stream_scanner consumer = ^size_t(NSData *data) {
-        __block size_t found_size = 0;
-        __block size_t match_count = 0;
-
-        size_t size = data.length;
-        const unsigned char *buffer = data.bytes;
-        for (int i = 0; i < size; i++ ) {
-            if (((const unsigned char *)buffer)[i] == ((const unsigned char *)bytes)[match_count]) {
-                match_count += 1;
-                if (match_count == length) {
-                    found_size = i + 1;
-                    break;
-                }
-            } else {
-                match_count = 0;
-            }
-        }
-        return found_size;
-    };
-    [self _addConsumerWithScanner:consumer callback:dataHandler];
-}
-
-
-// Returns true if did work
-- (BOOL)_innerPumpScanner {
-
-    BOOL didWork = NO;
-
-    if (self.readyState >= SR_CLOSING) {
-        return didWork;
-    }
-
-    if (!_consumers.count) {
-        return didWork;
-    }
-
-    size_t curSize = _readBuffer.length - _readBufferOffset;
-    if (!curSize) {
-        return didWork;
-    }
-
-    FSRIOConsumer *consumer = [_consumers objectAtIndex:0];
-
-    size_t bytesNeeded = consumer.bytesNeeded;
-
-    size_t foundSize = 0;
-    if (consumer.consumer) {
-        NSData *tempView = [NSData dataWithBytesNoCopy:(char *)_readBuffer.bytes + _readBufferOffset length:_readBuffer.length - _readBufferOffset freeWhenDone:NO];
-        foundSize = consumer.consumer(tempView);
-    } else {
-        assert(consumer.bytesNeeded);
-        if (curSize >= bytesNeeded) {
-            foundSize = bytesNeeded;
-        } else if (consumer.readToCurrentFrame) {
-            foundSize = curSize;
-        }
-    }
-
-    NSData *slice = nil;
-    if (consumer.readToCurrentFrame || foundSize) {
-        NSRange sliceRange = NSMakeRange(_readBufferOffset, foundSize);
-        slice = [_readBuffer subdataWithRange:sliceRange];
-
-        _readBufferOffset += foundSize;
-
-        if (_readBufferOffset > 4096 && _readBufferOffset > (_readBuffer.length >> 1)) {
-            _readBuffer = [[NSMutableData alloc] initWithBytes:(char *)_readBuffer.bytes + _readBufferOffset length:_readBuffer.length - _readBufferOffset];            _readBufferOffset = 0;
-        }
-
-        if (consumer.unmaskBytes) {
-            NSMutableData *mutableSlice = [slice mutableCopy];
-
-            NSUInteger len = mutableSlice.length;
-            uint8_t *bytes = mutableSlice.mutableBytes;
-
-            for (int i = 0; i < len; i++) {
-                bytes[i] = bytes[i] ^ _currentReadMaskKey[_currentReadMaskOffset % sizeof(_currentReadMaskKey)];
-                _currentReadMaskOffset += 1;
-            }
-
-            slice = mutableSlice;
-        }
-
-        if (consumer.readToCurrentFrame) {
-            [_currentFrameData appendData:slice];
-
-            _readOpCount += 1;
-
-            if (_currentFrameOpcode == SROpCodeTextFrame) {
-                // Validate UTF8 stuff.
-                size_t currentDataSize = _currentFrameData.length;
-                if (_currentFrameOpcode == SROpCodeTextFrame && currentDataSize > 0) {
-                    // TODO: Optimize the crap out of this.  Don't really have to copy all the data each time
-
-                    size_t scanSize = currentDataSize - _currentStringScanPosition;
-
-                    NSData *scan_data = [_currentFrameData subdataWithRange:NSMakeRange(_currentStringScanPosition, scanSize)];
-                    int32_t valid_utf8_size = validate_dispatch_data_partial_string(scan_data);
-
-                    if (valid_utf8_size == -1) {
-                        [self closeWithCode:SRStatusCodeInvalidUTF8 reason:@"Text frames must be valid UTF-8"];
-                        dispatch_async(_workQueue, ^{
-                            [self _disconnect];
-                        });
-                        return didWork;
-                    } else {
-                        _currentStringScanPosition += valid_utf8_size;
-                    }
-                }
-
-            }
-
-            consumer.bytesNeeded -= foundSize;
-
-            if (consumer.bytesNeeded == 0) {
-                [_consumers removeObjectAtIndex:0];
-                consumer.handler(self, nil);
-                didWork = YES;
-            }
-        } else if (foundSize) {
-            [_consumers removeObjectAtIndex:0];
-            consumer.handler(self, slice);
-            didWork = YES;
-        }
-    }
-    return didWork;
-}
-
--(void)_pumpScanner;
-{
-    [self assertOnWorkQueue];
-
-    if (!_isPumping) {
-        _isPumping = YES;
-    } else {
-        return;
-    }
-
-    while ([self _innerPumpScanner]) {
-
-    }
-
-    _isPumping = NO;
-}
-
-//#define NOMASK
-
-static const size_t SRFrameHeaderOverhead = 32;
-
-- (void)_sendFrameWithOpcode:(FSROpCode)opcode data:(id)data;
-{
-    [self assertOnWorkQueue];
-
-    if (data == nil) {
-        return;
-    }
-
-    NSAssert([data isKindOfClass:[NSData class]] || [data isKindOfClass:[NSString class]], @"Function expects nil, NSString or NSData");
-
-    size_t payloadLength = [data isKindOfClass:[NSString class]] ? [(NSString *)data lengthOfBytesUsingEncoding:NSUTF8StringEncoding] : [data length];
-
-    NSMutableData *frame = [[NSMutableData alloc] initWithLength:payloadLength + SRFrameHeaderOverhead];
-    if (!frame) {
-        [self closeWithCode:SRStatusCodeMessageTooBig reason:@"Message too big"];
-        return;
-    }
-    uint8_t *frame_buffer = (uint8_t *)[frame mutableBytes];
-
-    // set fin
-    frame_buffer[0] = SRFinMask | opcode;
-
-    BOOL useMask = YES;
-#ifdef NOMASK
-    useMask = NO;
-#endif
-
-    if (useMask) {
-    // set the mask and header
-        frame_buffer[1] |= SRMaskMask;
-    }
-
-    size_t frame_buffer_size = 2;
-
-    const uint8_t *unmasked_payload = NULL;
-    if ([data isKindOfClass:[NSData class]]) {
-        unmasked_payload = (uint8_t *)[data bytes];
-    } else if ([data isKindOfClass:[NSString class]]) {
-        unmasked_payload =  (const uint8_t *)[data UTF8String];
-    } else {
-        assert(NO);
-    }
-
-    if (payloadLength < 126) {
-        frame_buffer[1] |= payloadLength;
-    } else if (payloadLength <= UINT16_MAX) {
-        frame_buffer[1] |= 126;
-        *((uint16_t *)(frame_buffer + frame_buffer_size)) = EndianU16_BtoN((uint16_t)payloadLength);
-        frame_buffer_size += sizeof(uint16_t);
-    } else {
-        frame_buffer[1] |= 127;
-        *((uint64_t *)(frame_buffer + frame_buffer_size)) = EndianU64_BtoN((uint64_t)payloadLength);
-        frame_buffer_size += sizeof(uint64_t);
-    }
-
-    if (!useMask) {
-        for (int i = 0; i < payloadLength; i++) {
-            frame_buffer[frame_buffer_size] = unmasked_payload[i];
-            frame_buffer_size += 1;
-        }
-    } else {
-        uint8_t *mask_key = frame_buffer + frame_buffer_size;
-        int result = SecRandomCopyBytes(kSecRandomDefault, sizeof(uint32_t), (uint8_t *)mask_key);
-        assert(result == 0);
-        frame_buffer_size += sizeof(uint32_t);
-
-        // TODO: could probably optimize this with SIMD
-        for (int i = 0; i < payloadLength; i++) {
-            frame_buffer[frame_buffer_size] = unmasked_payload[i] ^ mask_key[i % sizeof(uint32_t)];
-            frame_buffer_size += 1;
-        }
-    }
-
-    assert(frame_buffer_size <= [frame length]);
-    frame.length = frame_buffer_size;
-
-    [self _writeData:frame];
-}
-
-- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode;
-{
-    __weak __typeof__(self) weakSelf = self;
-
-    // turn on keep-alive for the output stream.
-    if (eventCode == NSStreamEventOpenCompleted && aStream == _outputStream) {
-        CFDataRef socketData = CFWriteStreamCopyProperty((CFWriteStreamRef)_outputStream, kCFStreamPropertySocketNativeHandle);
-        // In rare cases socketData might be nil (there are crash reports out there), in which case we'll have to just
-        // live without keep-alive :(
-        if (socketData != nil) {
-            CFSocketNativeHandle socket;
-            CFDataGetBytes(socketData, CFRangeMake(0, sizeof(CFSocketNativeHandle)), (UInt8 *)&socket);
-            CFRelease(socketData);
-
-            int keepAliveOn = 1;
-            if (setsockopt(socket, SOL_SOCKET, SO_KEEPALIVE, &keepAliveOn, sizeof(keepAliveOn)) == -1) {
-                SRFastLog(@"Failed to turn on TCP keepalive for websocket");
-            }
-        }
-    }
-
-    if (_secure && !_pinnedCertFound && (eventCode == NSStreamEventHasBytesAvailable || eventCode == NSStreamEventHasSpaceAvailable)) {
-
-        NSArray *sslCerts = [_urlRequest FSR_SSLPinnedCertificates];
-        if (sslCerts) {
-            SecTrustRef secTrust = (__bridge SecTrustRef)[aStream propertyForKey:(__bridge id)kCFStreamPropertySSLPeerTrust];
-            if (secTrust) {
-                NSInteger numCerts = SecTrustGetCertificateCount(secTrust);
-                for (NSInteger i = 0; i < numCerts && !_pinnedCertFound; i++) {
-                    SecCertificateRef cert = SecTrustGetCertificateAtIndex(secTrust, i);
-                    NSData *certData = CFBridgingRelease(SecCertificateCopyData(cert));
-
-                    for (id ref in sslCerts) {
-                        SecCertificateRef trustedCert = (__bridge SecCertificateRef)ref;
-                        NSData *trustedCertData = CFBridgingRelease(SecCertificateCopyData(trustedCert));
-
-                        if ([trustedCertData isEqualToData:certData]) {
-                            _pinnedCertFound = YES;
-                            break;
-                        }
-                    }
-                }
-            }
-
-            if (!_pinnedCertFound) {
-                dispatch_async(_workQueue, ^{
-                    NSDictionary *userInfo = @{ NSLocalizedDescriptionKey : @"Invalid server cert" };
-                    [weakSelf _failWithError:[NSError errorWithDomain:@"org.lolrus.SocketRocket" code:23556 userInfo:userInfo]];
-                });
-                return;
-            }
-        }
-    }
-
-    //    SRFastLog(@"%@ Got stream event %d", aStream, eventCode);
-    dispatch_async(_workQueue, ^{
-        [weakSelf safeHandleEvent:eventCode stream:aStream];
-    });
-}
-
-- (void)safeHandleEvent:(NSStreamEvent)eventCode stream:(NSStream *)aStream
-{
-    switch (eventCode) {
-        case NSStreamEventOpenCompleted: {
-            SRFastLog(@"NSStreamEventOpenCompleted %@", aStream);
-            if (self.readyState >= SR_CLOSING) {
-                return;
-            }
-
-
-            assert(_readBuffer);
-
-            if (self.readyState == SR_CONNECTING && aStream == _inputStream) {
-                [self didConnect];
-            }
-            [self _pumpWriting];
-            [self _pumpScanner];
-            break;
-        }
-
-        case NSStreamEventErrorOccurred: {
-            // Note: The upstream code for SocketRocket logs the error message, but this causes
-            // crashes on iOS 13 (https://github.com/firebase/firebase-ios-sdk/issues/3950)
-            SRFastLog(@"NSStreamEventErrorOccurred %@", aStream);
-            /// TODO specify error better!
-                    [self _failWithError:aStream.streamError];
-            _readBufferOffset = 0;
-            [_readBuffer setLength:0];
-            break;
-
-        }
-
-        case NSStreamEventEndEncountered: {
-            [self _pumpScanner];
-            SRFastLog(@"NSStreamEventEndEncountered %@", aStream);
-            if (aStream.streamError) {
-                [self _failWithError:aStream.streamError];
-            } else {
-                dispatch_async(_workQueue, ^{
-                    if (self.readyState != SR_CLOSED) {
-                        self.readyState = SR_CLOSED;
-                        [self _scheduleCleanup];
-                    }
-
-                    if (!self->_sentClose && !self->_failed) {
-                        self->_sentClose = YES;
-                        // If we get closed in this state it's probably not clean because we should be sending this when we send messages
-                        [self _performDelegateBlock:^{
-                            if ([self.delegate respondsToSelector:@selector(webSocket:didCloseWithCode:reason:wasClean:)]) {
-                                [self.delegate webSocket:self didCloseWithCode:0 reason:@"Stream end encountered" wasClean:NO];
-                            }
-                        }];
-                    }
-                });
-            }
-
-            break;
-        }
-
-        case NSStreamEventHasBytesAvailable: {
-            SRFastLog(@"NSStreamEventHasBytesAvailable %@", aStream);
-            const NSUInteger bufferSize = 2048;
-            uint8_t buffer[bufferSize];
-
-            while (_inputStream.hasBytesAvailable) {
-                NSInteger bytes_read = [_inputStream read:buffer maxLength:bufferSize];
-
-                if (bytes_read > 0) {
-                    [_readBuffer appendBytes:buffer length:bytes_read];
-                } else if (bytes_read < 0) {
-                    [self _failWithError:_inputStream.streamError];
-                }
-
-                if (bytes_read != bufferSize) {
-                    break;
-                }
-            };
-            [self _pumpScanner];
-            break;
-        }
-
-        case NSStreamEventHasSpaceAvailable: {
-            SRFastLog(@"NSStreamEventHasSpaceAvailable %@", aStream);
-            [self _pumpWriting];
-            break;
-        }
-
-        default:
-            SRFastLog(@"(default)  %@", aStream);
-            break;
-    }
-}
-
-@end
-
-
-@implementation FSRIOConsumer
-
-@synthesize bytesNeeded = _bytesNeeded;
-@synthesize consumer = _scanner;
-@synthesize handler = _handler;
-@synthesize readToCurrentFrame = _readToCurrentFrame;
-@synthesize unmaskBytes = _unmaskBytes;
-
-- (void)setupWithScanner:(stream_scanner)scanner handler:(data_callback)handler bytesNeeded:(size_t)bytesNeeded readToCurrentFrame:(BOOL)readToCurrentFrame unmaskBytes:(BOOL)unmaskBytes;
-{
-    _scanner = [scanner copy];
-    _handler = [handler copy];
-    _bytesNeeded = bytesNeeded;
-    _readToCurrentFrame = readToCurrentFrame;
-    _unmaskBytes = unmaskBytes;
-    assert(_scanner || _bytesNeeded);
-}
-
-@end
-
-@implementation FSRIOConsumerPool {
-    NSUInteger _poolSize;
-    NSMutableArray *_bufferedConsumers;
-}
-
-- (id)initWithBufferCapacity:(NSUInteger)poolSize;
-{
-    self = [super init];
-    if (self) {
-        _poolSize = poolSize;
-        _bufferedConsumers = [[NSMutableArray alloc] initWithCapacity:poolSize];
-    }
-    return self;
-}
-
-- (id)init
-{
-    return [self initWithBufferCapacity:8];
-}
-
-- (FSRIOConsumer *)consumerWithScanner:(stream_scanner)scanner handler:(data_callback)handler bytesNeeded:(size_t)bytesNeeded readToCurrentFrame:(BOOL)readToCurrentFrame unmaskBytes:(BOOL)unmaskBytes;
-{
-    FSRIOConsumer *consumer = nil;
-    if (_bufferedConsumers.count) {
-        consumer = [_bufferedConsumers lastObject];
-        [_bufferedConsumers removeLastObject];
-    } else {
-        consumer = [[FSRIOConsumer alloc] init];
-    }
-
-    [consumer setupWithScanner:scanner handler:handler bytesNeeded:bytesNeeded readToCurrentFrame:readToCurrentFrame unmaskBytes:unmaskBytes];
-
-    return consumer;
-}
-
-- (void)returnConsumer:(FSRIOConsumer *)consumer;
-{
-    if (_bufferedConsumers.count < _poolSize) {
-        [_bufferedConsumers addObject:consumer];
-    }
-}
-
-@end
-
-@implementation  NSURLRequest (FCertificateAdditions)
-
-- (NSArray *)FSR_SSLPinnedCertificates;
-{
-    return [NSURLProtocol propertyForKey:@"FSR_SSLPinnedCertificates" inRequest:self];
-}
-
-@end
-
-@implementation  NSMutableURLRequest (FCertificateAdditions)
-
-- (NSArray *)FSR_SSLPinnedCertificates;
-{
-    return [NSURLProtocol propertyForKey:@"FSR_SSLPinnedCertificates" inRequest:self];
-}
-
-- (void)setFSR_SSLPinnedCertificates:(NSArray *)FSR_SSLPinnedCertificates;
-{
-    [NSURLProtocol setProperty:FSR_SSLPinnedCertificates forKey:@"FSR_SSLPinnedCertificates" inRequest:self];
-}
-
-@end
-
-@implementation NSURL (FSRWebSocket)
-
-- (NSString *)SR_origin;
-{
-    NSString *scheme = [self.scheme lowercaseString];
-
-    if ([scheme isEqualToString:@"wss"]) {
-        scheme = @"https";
-    } else if ([scheme isEqualToString:@"ws"]) {
-        scheme = @"http";
-    }
-
-    if (self.port != nil) {
-        return [NSString stringWithFormat:@"%@://%@:%@/", scheme, self.host, self.port];
-    } else {
-        return [NSString stringWithFormat:@"%@://%@/", scheme, self.host];
-    }
-}
-
-@end
-
-// #define SR_ENABLE_LOG
-
-static inline void SRFastLog(NSString *format, ...)  {
-#ifdef SR_ENABLE_LOG
-    __block va_list arg_list;
-    va_start (arg_list, format);
-
-    NSString *formattedString = [[NSString alloc] initWithFormat:format arguments:arg_list];
-
-    va_end(arg_list);
-
-    NSLog(@"[SR] %@", formattedString);
-#endif
-}
-
-
-#ifdef HAS_ICU
-
-static inline int32_t validate_dispatch_data_partial_string(NSData *data) {
-
-    const void * contents = [data bytes];
-    long size = [data length];
-
-    const uint8_t *str = (const uint8_t *)contents;
-
-
-    UChar32 codepoint = 1;
-    int32_t offset = 0;
-    int32_t lastOffset = 0;
-    while(offset < size && codepoint > 0)  {
-        lastOffset = offset;
-        U8_NEXT(str, offset, size, codepoint);
-    }
-
-    if (codepoint == -1) {
-        // Check to see if the last byte is valid or whether it was just continuing
-        if (!U8_IS_LEAD(str[lastOffset]) || U8_COUNT_TRAIL_BYTES(str[lastOffset]) + lastOffset < (int32_t)size) {
-
-            size = -1;
-        } else {
-            uint8_t leadByte = str[lastOffset];
-            U8_MASK_LEAD_BYTE(leadByte, U8_COUNT_TRAIL_BYTES(leadByte));
-
-            for (int i = lastOffset + 1; i < offset; i++) {
-
-                if (U8_IS_SINGLE(str[i]) || U8_IS_LEAD(str[i]) || !U8_IS_TRAIL(str[i])) {
-                    size = -1;
-                }
-            }
-
-            if (size != -1) {
-                size = lastOffset;
-            }
-        }
-    }
-
-    if (size != -1 && ![[NSString alloc] initWithBytesNoCopy:(char *)[data bytes] length:size encoding:NSUTF8StringEncoding freeWhenDone:NO]) {
-        size = -1;
-    }
-
-    return (int32_t)size;
-}
-
-#else
-
-// This is a hack, and probably not optimal
-static inline int32_t validate_dispatch_data_partial_string(NSData *data) {
-    static const int maxCodepointSize = 3;
-
-    for (int i = 0; i < maxCodepointSize; i++) {
-        NSString *str = [[NSString alloc] initWithBytesNoCopy:(char *)data.bytes length:data.length - i encoding:NSUTF8StringEncoding freeWhenDone:NO];
-        if (str) {
-            return (int)(data.length - i);
-        }
-    }
-
-    return -1;
-}
-
-#endif
-
-static _FSRRunLoopThread *networkThread = nil;
-static NSRunLoop *networkRunLoop = nil;
-
-@implementation NSRunLoop (FSRWebSocket)
-
-+ (NSRunLoop *)FSR_networkRunLoop {
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        networkThread = [[_FSRRunLoopThread alloc] init];
-        networkThread.name = @"com.squareup.SocketRocket.NetworkThread";
-        [networkThread start];
-        networkRunLoop = networkThread.runLoop;
-    });
-
-    return networkRunLoop;
-}
-
-@end
-
-
-@implementation _FSRRunLoopThread {
-    dispatch_group_t _waitGroup;
-}
-
-@synthesize runLoop = _runLoop;
-
-- (void)dealloc
-{
-    sr_dispatch_release(_waitGroup);
-}
-
-- (id)init
-{
-    self = [super init];
-    if (self) {
-        _waitGroup = dispatch_group_create();
-        dispatch_group_enter(_waitGroup);
-    }
-    return self;
-}
-
-
-/**
- * This is the main method of the thread on which the socket events are scheduled in a run loop.
- */
-- (void)main;
-{
-    @autoreleasepool {
-        _runLoop = [NSRunLoop currentRunLoop];
-        dispatch_group_leave(_waitGroup);
-
-        // Add an empty run loop source to prevent runloop from spinning.
-        CFRunLoopSourceContext sourceCtx = {
-            .version = 0,
-            .info = NULL,
-            .retain = NULL,
-            .release = NULL,
-            .copyDescription = NULL,
-            .equal = NULL,
-            .hash = NULL,
-            .schedule = NULL,
-            .cancel = NULL,
-            .perform = NULL
-        };
-        CFRunLoopSourceRef source = CFRunLoopSourceCreate(NULL, 0, &sourceCtx);
-        CFRunLoopAddSource(CFRunLoopGetCurrent(), source, kCFRunLoopDefaultMode);
-        CFRelease(source);
-
-        while ([_runLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]) {
-
-        }
-        assert(NO);
-    }
-}
-
-- (NSRunLoop *)runLoop;
-{
-    dispatch_group_wait(_waitGroup, DISPATCH_TIME_FOREVER);
-    return _runLoop;
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/NSData+SRB64Additions.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/NSData+SRB64Additions.h
deleted file mode 100644
index bac393b..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/NSData+SRB64Additions.h
+++ /dev/null
@@ -1,23 +0,0 @@
-//
-//   Copyright 2012 Square Inc.
-//
-//   Licensed under the Apache License, Version 2.0 (the "License");
-//   you may not use this file except in compliance with the License.
-//   You may obtain a copy of the License at
-//
-//       http://www.apache.org/licenses/LICENSE-2.0
-//
-//   Unless required by applicable law or agreed to in writing, software
-//   distributed under the License is distributed on an "AS IS" BASIS,
-//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-//   See the License for the specific language governing permissions and
-//   limitations under the License.
-//
-
-#import <Foundation/Foundation.h>
-
-@interface FSRUtilities : NSObject
-
-+ (NSString *)base64EncodedStringFromData:(NSData *)data;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/NSData+SRB64Additions.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/NSData+SRB64Additions.m
deleted file mode 100644
index 2be1d84..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/NSData+SRB64Additions.m
+++ /dev/null
@@ -1,37 +0,0 @@
-//
-//   Copyright 2012 Square Inc.
-//
-//   Licensed under the Apache License, Version 2.0 (the "License");
-//   you may not use this file except in compliance with the License.
-//   You may obtain a copy of the License at
-//
-//       http://www.apache.org/licenses/LICENSE-2.0
-//
-//   Unless required by applicable law or agreed to in writing, software
-//   distributed under the License is distributed on an "AS IS" BASIS,
-//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-//   See the License for the specific language governing permissions and
-//   limitations under the License.
-//
-
-#import "NSData+SRB64Additions.h"
-#import "fbase64.h"
-
-@implementation FSRUtilities
-
-+ (NSString *)base64EncodedStringFromData:(NSData *)data {
-    size_t buffer_size = ((data.length * 3 + 2) / 2);
-
-    char *buffer = (char *)malloc(buffer_size);
-
-    int len = f_b64_ntop(data.bytes, data.length, buffer, buffer_size);
-
-    if (len == -1) {
-        free(buffer);
-        return nil;
-    } else{
-        return [[NSString alloc] initWithBytesNoCopy:buffer length:len encoding:NSUTF8StringEncoding freeWhenDone:YES];
-    }
-}
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/fbase64.c b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/fbase64.c
deleted file mode 100644
index 238c23c..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/fbase64.c
+++ /dev/null
@@ -1,318 +0,0 @@
-/*	$OpenBSD: base64.c,v 1.5 2006/10/21 09:55:03 otto Exp $	*/
-
-/*
- * Copyright (c) 1996 by Internet Software Consortium.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
- * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
- * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
- * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-
-/*
- * Portions Copyright (c) 1995 by International Business Machines, Inc.
- *
- * International Business Machines, Inc. (hereinafter called IBM) grants
- * permission under its copyrights to use, copy, modify, and distribute this
- * Software with or without fee, provided that the above copyright notice and
- * all paragraphs of this notice appear in all copies, and that the name of IBM
- * not be used in connection with the marketing of any product incorporating
- * the Software or modifications thereof, without specific, written prior
- * permission.
- *
- * To the extent it has a right to do so, IBM grants an immunity from suit
- * under its patents, if any, for the use, sale or manufacture of products to
- * the extent that such products are used for performing Domain Name System
- * dynamic updates in TCP/IP networks by means of the Software.  No immunity is
- * granted for any product per se or for any other function of any product.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", AND IBM DISCLAIMS ALL WARRANTIES,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE.  IN NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL,
- * DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE, EVEN
- * IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-/* OPENBSD ORIGINAL: lib/libc/net/base64.c */
-
-
-//
-//   Distributed with modifications by Firebase ( https://www.firebase.com )
-//
-
-#if (!defined(HAVE_B64_NTOP) && !defined(HAVE___B64_NTOP)) || (!defined(HAVE_B64_PTON) && !defined(HAVE___B64_PTON))
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-#include <ctype.h>
-#include <stdio.h>
-
-#include <stdlib.h>
-#include <string.h>
-
-#include "fbase64.h"
-
-static const char Base64[] =
-"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-static const char Pad64 = '=';
-
-/* (From RFC1521 and draft-ietf-dnssec-secext-03.txt)
- The following encoding technique is taken from RFC 1521 by Borenstein
- and Freed.  It is reproduced here in a slightly edited form for
- convenience.
-
- A 65-character subset of US-ASCII is used, enabling 6 bits to be
- represented per printable character. (The extra 65th character, "=",
- is used to signify a special processing function.)
-
- The encoding process represents 24-bit groups of input bits as output
- strings of 4 encoded characters. Proceeding from left to right, a
- 24-bit input group is formed by concatenating 3 8-bit input groups.
- These 24 bits are then treated as 4 concatenated 6-bit groups, each
- of which is translated into a single digit in the base64 alphabet.
-
- Each 6-bit group is used as an index into an array of 64 printable
- characters. The character referenced by the index is placed in the
- output string.
-
- Table 1: The Base64 Alphabet
-
- Value Encoding  Value Encoding  Value Encoding  Value Encoding
- 0 A            17 R            34 i            51 z
- 1 B            18 S            35 j            52 0
- 2 C            19 T            36 k            53 1
- 3 D            20 U            37 l            54 2
- 4 E            21 V            38 m            55 3
- 5 F            22 W            39 n            56 4
- 6 G            23 X            40 o            57 5
- 7 H            24 Y            41 p            58 6
- 8 I            25 Z            42 q            59 7
- 9 J            26 a            43 r            60 8
- 10 K            27 b            44 s            61 9
- 11 L            28 c            45 t            62 +
- 12 M            29 d            46 u            63 /
- 13 N            30 e            47 v
- 14 O            31 f            48 w         (pad) =
- 15 P            32 g            49 x
- 16 Q            33 h            50 y
-
- Special processing is performed if fewer than 24 bits are available
- at the end of the data being encoded.  A full encoding quantum is
- always completed at the end of a quantity.  When fewer than 24 input
- bits are available in an input group, zero bits are added (on the
- right) to form an integral number of 6-bit groups.  Padding at the
- end of the data is performed using the '=' character.
-
- Since all base64 input is an integral number of octets, only the
- -------------------------------------------------
- following cases can arise:
-
- (1) the final quantum of encoding input is an integral
- multiple of 24 bits; here, the final unit of encoded
- output will be an integral multiple of 4 characters
- with no "=" padding,
- (2) the final quantum of encoding input is exactly 8 bits;
- here, the final unit of encoded output will be two
- characters followed by two "=" padding characters, or
- (3) the final quantum of encoding input is exactly 16 bits;
- here, the final unit of encoded output will be three
- characters followed by one "=" padding character.
- */
-
-#if !defined(HAVE_B64_NTOP) && !defined(HAVE___B64_NTOP)
-int
-f_b64_ntop(u_char const *src, size_t srclength, char *target, size_t targsize)
-{
-    size_t datalength = 0;
-	u_char input[3];
-	u_char output[4];
-	u_int i;
-
-	while (2 < srclength) {
-		input[0] = *src++;
-		input[1] = *src++;
-		input[2] = *src++;
-		srclength -= 3;
-
-		output[0] = input[0] >> 2;
-		output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4);
-		output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6);
-		output[3] = input[2] & 0x3f;
-
-		if (datalength + 4 > targsize)
-			return (-1);
-		target[datalength++] = Base64[output[0]];
-		target[datalength++] = Base64[output[1]];
-		target[datalength++] = Base64[output[2]];
-		target[datalength++] = Base64[output[3]];
-	}
-
-	/* Now we worry about padding. */
-	if (0 != srclength) {
-		/* Get what's left. */
-		input[0] = input[1] = input[2] = '\0';
-		for (i = 0; i < srclength; i++)
-			input[i] = *src++;
-
-		output[0] = input[0] >> 2;
-		output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4);
-		output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6);
-
-		if (datalength + 4 > targsize)
-			return (-1);
-		target[datalength++] = Base64[output[0]];
-		target[datalength++] = Base64[output[1]];
-		if (srclength == 1)
-			target[datalength++] = Pad64;
-		else
-			target[datalength++] = Base64[output[2]];
-		target[datalength++] = Pad64;
-	}
-	if (datalength >= targsize)
-		return (-1);
-	target[datalength] = '\0';	/* Returned value doesn't count \0. */
-	return (int)(datalength);
-}
-#endif /* !defined(HAVE_B64_NTOP) && !defined(HAVE___B64_NTOP) */
-
-#if !defined(HAVE_B64_PTON) && !defined(HAVE___B64_PTON)
-
-/* skips all whitespace anywhere.
- converts characters, four at a time, starting at (or after)
- src from base - 64 numbers into three 8 bit bytes in the target area.
- it returns the number of data bytes stored at the target, or -1 on error.
- */
-
-int
-f_b64_pton(char const *src, u_char *target, size_t targsize)
-{
-	u_int tarindex, state;
-	int ch;
-	char *pos;
-
-	state = 0;
-	tarindex = 0;
-
-	while ((ch = *src++) != '\0') {
-		if (isspace(ch))	/* Skip whitespace anywhere. */
-			continue;
-
-		if (ch == Pad64)
-			break;
-
-		pos = strchr(Base64, ch);
-		if (pos == 0) 		/* A non-base64 character. */
-			return (-1);
-
-		switch (state) {
-            case 0:
-                if (target) {
-                    if (tarindex >= targsize)
-                        return (-1);
-                    target[tarindex] = (pos - Base64) << 2;
-                }
-                state = 1;
-                break;
-            case 1:
-                if (target) {
-                    if (tarindex + 1 >= targsize)
-                        return (-1);
-                    target[tarindex]   |=  (pos - Base64) >> 4;
-                    target[tarindex+1]  = ((pos - Base64) & 0x0f)
-                    << 4 ;
-                }
-                tarindex++;
-                state = 2;
-                break;
-            case 2:
-                if (target) {
-                    if (tarindex + 1 >= targsize)
-                        return (-1);
-                    target[tarindex]   |=  (pos - Base64) >> 2;
-                    target[tarindex+1]  = ((pos - Base64) & 0x03)
-                    << 6;
-                }
-                tarindex++;
-                state = 3;
-                break;
-            case 3:
-                if (target) {
-                    if (tarindex >= targsize)
-                        return (-1);
-                    target[tarindex] |= (pos - Base64);
-                }
-                tarindex++;
-                state = 0;
-                break;
-		}
-	}
-
-	/*
-	 * We are done decoding Base-64 chars.  Let's see if we ended
-	 * on a byte boundary, and/or with erroneous trailing characters.
-	 */
-
-	if (ch == Pad64) {		/* We got a pad char. */
-		ch = *src++;		/* Skip it, get next. */
-		switch (state) {
-            case 0:		/* Invalid = in first position */
-            case 1:		/* Invalid = in second position */
-                return (-1);
-
-            case 2:		/* Valid, means one byte of info */
-                /* Skip any number of spaces. */
-                for (; ch != '\0'; ch = *src++)
-                    if (!isspace(ch))
-                        break;
-                /* Make sure there is another trailing = sign. */
-                if (ch != Pad64)
-                    return (-1);
-                ch = *src++;		/* Skip the = */
-                /* Fall through to "single trailing =" case. */
-                /* FALLTHROUGH */
-
-            case 3:		/* Valid, means two bytes of info */
-                /*
-                 * We know this char is an =.  Is there anything but
-                 * whitespace after it?
-                 */
-                for (; ch != '\0'; ch = *src++)
-                    if (!isspace(ch))
-                        return (-1);
-
-                /*
-                 * Now make sure for cases 2 and 3 that the "extra"
-                 * bits that slopped past the last full byte were
-                 * zeros.  If we don't check them, they become a
-                 * subliminal channel.
-                 */
-                if (target && target[tarindex] != 0)
-                    return (-1);
-		}
-	} else {
-		/*
-		 * We ended by seeing the end of the string.  Make sure we
-		 * have no partial bytes lying around.
-		 */
-		if (state != 0)
-			return (-1);
-	}
-
-	return (tarindex);
-}
-
-#endif /* !defined(HAVE_B64_PTON) && !defined(HAVE___B64_PTON) */
-#endif
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/fbase64.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/fbase64.h
deleted file mode 100644
index a9bf142..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/fbase64.h
+++ /dev/null
@@ -1,33 +0,0 @@
-//   Copyright 2012 Square Inc.
-//
-//   Licensed under the Apache License, Version 2.0 (the "License");
-//   you may not use this file except in compliance with the License.
-//   You may obtain a copy of the License at
-//
-//       http://www.apache.org/licenses/LICENSE-2.0
-//
-//   Unless required by applicable law or agreed to in writing, software
-//   distributed under the License is distributed on an "AS IS" BASIS,
-//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-//   See the License for the specific language governing permissions and
-//   limitations under the License.
-//
-
-#ifndef FSocketRocket_base64_h
-#define FSocketRocket_base64_h
-
-#include <sys/types.h>
-
-extern int
-f_b64_ntop(u_char const *src,
-         size_t srclength,
-         char *target,
-         size_t targsize);
-
-extern int
-f_b64_pton(char const *src,
-         u_char *target,
-         size_t targsize);
-
-
-#endif
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/Wrap-leveldb/APLevelDB.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/Wrap-leveldb/APLevelDB.h
deleted file mode 100644
index c0baa22..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/Wrap-leveldb/APLevelDB.h
+++ /dev/null
@@ -1,105 +0,0 @@
-//
-//  APLevelDB.h
-//
-//  Created by Adam Preble on 1/23/12.
-//  Copyright (c) 2012 Adam Preble. All rights reserved.
-//
-//	Permission is hereby granted, free of charge, to any person obtaining a copy
-//	of this software and associated documentation files (the "Software"), to deal
-//	in the Software without restriction, including without limitation the rights
-//	to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-//	copies of the Software, and to permit persons to whom the Software is
-//	furnished to do so, subject to the following conditions:
-//
-//	The above copyright notice and this permission notice shall be included in
-//	all copies or substantial portions of the Software.
-//
-//	THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-//	IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-//	FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-//	AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-//	LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-//	OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-//	THE SOFTWARE.
-
-#import <Foundation/Foundation.h>
-
-extern NSString * const APLevelDBErrorDomain;
-
-@class APLevelDBIterator;
-@protocol APLevelDBWriteBatch;
-
-@interface APLevelDB : NSObject
-
-@property (nonatomic, readonly, strong) NSString *path;
-
-+ (APLevelDB *)levelDBWithPath:(NSString *)path error:(NSError *__autoreleasing*)errorOut;
-- (void)close;
-
-- (BOOL)setData:(NSData *)data forKey:(NSString *)key;
-- (BOOL)setString:(NSString *)str forKey:(NSString *)key;
-
-- (NSData *)dataForKey:(NSString *)key;
-- (NSString *)stringForKey:(NSString *)key;
-
-- (BOOL)removeKey:(NSString *)key;
-
-- (NSArray *)allKeys;
-
-- (void)enumerateKeys:(void (^)(NSString *key, BOOL *stop))block;
-- (void)enumerateKeysWithPrefix:(NSString *)prefix usingBlock:(void (^)(NSString *key, BOOL *stop))block;
-
-- (void)enumerateKeysAndValuesAsStrings:(void (^)(NSString *key, NSString *value, BOOL *stop))block;
-- (void)enumerateKeysWithPrefix:(NSString *)prefix asStrings:(void (^)(NSString *key, NSString *value, BOOL *stop))block;
-
-- (void)enumerateKeysAndValuesAsData:(void (^)(NSString *key, NSData *value, BOOL *stop))block;
-- (void)enumerateKeysWithPrefix:(NSString *)prefix asData:(void (^)(NSString *key, NSData *value, BOOL *stop))block;
-
-- (NSUInteger)approximateSizeFrom:(NSString *)from to:(NSString *)to;
-- (NSUInteger)exactSizeFrom:(NSString *)from to:(NSString *)to;
-
-// Objective-C Subscripting Support:
-//   The database object supports subscripting for string-string and string-data key-value access and assignment.
-//   Examples:
-//     db[@"key"] = @"value";
-//     db[@"key"] = [NSData data];
-//     NSString *s = db[@"key"];
-//   An NSInvalidArgumentException is raised if the key is not an NSString, or if the assigned object is not an
-//   instance of NSString or NSData.
-- (id)objectForKeyedSubscript:(id)key;
-- (void)setObject:(id)object forKeyedSubscript:(id<NSCopying>)key;
-
-// Batch write/atomic update support:
-- (id<APLevelDBWriteBatch>)beginWriteBatch;
-
-@end
-
-
-@interface APLevelDBIterator : NSObject
-
-+ (id)iteratorWithLevelDB:(APLevelDB *)db;
-
-// Designated initializer:
-- (id)initWithLevelDB:(APLevelDB *)db;
-
-- (BOOL)seekToKey:(NSString *)key;
-- (NSString *)nextKey;
-- (NSString *)key;
-- (NSString *)valueAsString;
-- (NSData *)valueAsData;
-
-@end
-
-
-@protocol APLevelDBWriteBatch <NSObject>
-
-- (void)setData:(NSData *)data forKey:(NSString *)key;
-- (void)setString:(NSString *)str forKey:(NSString *)key;
-
-- (void)removeKey:(NSString *)key;
-
-// Remove all of the buffered sets and removes:
-- (void)clear;
-- (BOOL)commit;
-
-@end
diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/Wrap-leveldb/APLevelDB.mm b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/Wrap-leveldb/APLevelDB.mm
deleted file mode 100644
index cdecce6..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/Wrap-leveldb/APLevelDB.mm
+++ /dev/null
@@ -1,500 +0,0 @@
-//
-//  APLevelDB.m
-//
-//  Created by Adam Preble on 1/23/12.
-//  Copyright (c) 2012 Adam Preble. All rights reserved.
-//
-//	Permission is hereby granted, free of charge, to any person obtaining a copy
-//	of this software and associated documentation files (the "Software"), to deal
-//	in the Software without restriction, including without limitation the rights
-//	to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-//	copies of the Software, and to permit persons to whom the Software is
-//	furnished to do so, subject to the following conditions:
-//
-//	The above copyright notice and this permission notice shall be included in
-//	all copies or substantial portions of the Software.
-//
-//	THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-//	IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-//	FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-//	AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-//	LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-//	OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-//	THE SOFTWARE.
-
-//
-//  Portions of APLevelDB are based on LevelDB-ObjC:
-//	https://github.com/hoisie/LevelDB-ObjC
-//  Specifically the SliceFromString/StringFromSlice macros, and the structure of
-//  the enumeration methods.  License for those potions follows:
-//
-//	Copyright (c) 2011 Pave Labs
-//
-//	Permission is hereby granted, free of charge, to any person obtaining a copy
-//	of this software and associated documentation files (the "Software"), to deal
-//	in the Software without restriction, including without limitation the rights
-//	to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-//	copies of the Software, and to permit persons to whom the Software is
-//	furnished to do so, subject to the following conditions:
-//
-//	The above copyright notice and this permission notice shall be included in
-//	all copies or substantial portions of the Software.
-//
-//	THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-//	IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-//	FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-//	AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-//	LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-//	OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-//	THE SOFTWARE.
-//
-
-#import "APLevelDB.h"
-
-#import "leveldb/db.h"
-#import "leveldb/options.h"
-#import "leveldb/write_batch.h"
-
-NSString * const APLevelDBErrorDomain = @"APLevelDBErrorDomain";
-
-#define SliceFromString(_string_) (leveldb::Slice((char *)[_string_ UTF8String], [_string_ lengthOfBytesUsingEncoding:NSUTF8StringEncoding]))
-#define StringFromSlice(_slice_) ([[NSString alloc] initWithBytes:_slice_.data() length:_slice_.size() encoding:NSUTF8StringEncoding])
-
-
-@interface APLevelDBWriteBatch : NSObject <APLevelDBWriteBatch> {
-    @package
-    leveldb::WriteBatch _batch;
-}
-
-@property (nonatomic, strong) APLevelDB *levelDB;
-
-- (id)initWithLevelDB:(APLevelDB *)levelDB;
-@end
-
-
-#pragma mark - APLevelDB
-
-@interface APLevelDB () {
-    leveldb::DB *_db;
-    leveldb::ReadOptions _readOptions;
-    leveldb::WriteOptions _writeOptions;
-}
-- (id)initWithPath:(NSString *)path error:(NSError **)errorOut;
-+ (leveldb::Options)defaultCreateOptions;
-@property (nonatomic, readonly) leveldb::DB *db;
-@end
-
-
-@implementation APLevelDB
-
-@synthesize path = _path;
-@synthesize db = _db;
-
-+ (APLevelDB *)levelDBWithPath:(NSString *)path error:(NSError *__autoreleasing *)errorOut
-{
-    return [[APLevelDB alloc] initWithPath:path error:errorOut];
-}
-
-- (id)initWithPath:(NSString *)path error:(NSError *__autoreleasing *)errorOut
-{
-    if ((self = [super init]))
-    {
-        _path = path;
-
-        leveldb::Options options = [[self class] defaultCreateOptions];
-
-        leveldb::Status status = leveldb::DB::Open(options, [_path UTF8String], &_db);
-
-        if (!status.ok())
-        {
-            if (errorOut)
-            {
-                NSString *statusString = [[NSString alloc] initWithCString:status.ToString().c_str() encoding:NSUTF8StringEncoding];
-                *errorOut = [NSError errorWithDomain:APLevelDBErrorDomain
-                                                code:0
-                                            userInfo:[NSDictionary dictionaryWithObjectsAndKeys:statusString, NSLocalizedDescriptionKey, nil]];
-            }
-            return nil;
-        }
-
-        _writeOptions.sync = false;
-    }
-    return self;
-}
-
-- (void)close {
-    if (_db != NULL) {
-        delete _db;
-        _db = NULL;
-    }
-}
-
-- (void)dealloc
-{
-    if (_db != NULL) {
-        delete _db;
-        _db = NULL;
-    }
-}
-
-+ (leveldb::Options)defaultCreateOptions
-{
-    leveldb::Options options;
-    options.create_if_missing = true;
-    return options;
-}
-
-- (BOOL)setData:(NSData *)data forKey:(NSString *)key
-{
-    leveldb::Slice keySlice = SliceFromString(key);
-    leveldb::Slice valueSlice = leveldb::Slice((const char *)[data bytes], (size_t)[data length]);
-    leveldb::Status status = _db->Put(_writeOptions, keySlice, valueSlice);
-    return (status.ok() == true);
-}
-
-- (BOOL)setString:(NSString *)str forKey:(NSString *)key
-{
-    // This could have been based on
-    leveldb::Slice keySlice = SliceFromString(key);
-    leveldb::Slice valueSlice = SliceFromString(str);
-    leveldb::Status status = _db->Put(_writeOptions, keySlice, valueSlice);
-    return (status.ok() == true);
-}
-
-- (NSData *)dataForKey:(NSString *)key
-{
-    leveldb::Slice keySlice = SliceFromString(key);
-    std::string valueCPPString;
-    leveldb::Status status = _db->Get(_readOptions, keySlice, &valueCPPString);
-
-    if (!status.ok())
-        return nil;
-    else
-        return [NSData dataWithBytes:valueCPPString.data() length:valueCPPString.size()];
-}
-
-- (NSString *)stringForKey:(NSString *)key
-{
-    leveldb::Slice keySlice = SliceFromString(key);
-    std::string valueCPPString;
-    leveldb::Status status = _db->Get(_readOptions, keySlice, &valueCPPString);
-
-    // We assume (dangerously?) UTF-8 string encoding:
-    if (!status.ok())
-        return nil;
-    else
-        return [[NSString alloc] initWithBytes:valueCPPString.data() length:valueCPPString.size() encoding:NSUTF8StringEncoding];
-}
-
-- (BOOL)removeKey:(NSString *)key
-{
-    leveldb::Slice keySlice = SliceFromString(key);
-    leveldb::Status status = _db->Delete(_writeOptions, keySlice);
-    return (status.ok() == true);
-}
-
-- (NSArray *)allKeys
-{
-    NSMutableArray *keys = [NSMutableArray array];
-    [self enumerateKeys:^(NSString *key, BOOL *stop) {
-        [keys addObject:key];
-    }];
-    return keys;
-}
-
-- (void)enumerateKeysAndValuesAsStrings:(void (^)(NSString *key, NSString *value, BOOL *stop))block
-{
-    [self enumerateKeysWithPrefix:@"" asStrings:block];
-}
-
-- (void)enumerateKeysWithPrefix:(NSString *)prefixString asStrings:(void (^)(NSString *, NSString *, BOOL *))block
-{
-    @autoreleasepool {
-        BOOL stop = NO;
-        leveldb::Iterator* iter = _db->NewIterator(leveldb::ReadOptions());
-        leveldb::Slice prefix = SliceFromString(prefixString);
-        for (iter->Seek(prefix); iter->Valid(); iter->Next()) {
-            leveldb::Slice key = iter->key(), value = iter->value();
-            if (key.starts_with(prefix)) {
-                NSString *k = StringFromSlice(key);
-                NSString *v = [[NSString alloc] initWithBytes:value.data() length:value.size() encoding:NSUTF8StringEncoding];
-                block(k, v, &stop);
-                if (stop)
-                    break;
-            } else {
-                break;
-            }
-        }
-
-        delete iter;
-    }
-}
-
-- (void)enumerateKeys:(void (^)(NSString *key, BOOL *stop))block
-{
-    [self enumerateKeysWithPrefix:@"" usingBlock:block];
-}
-
-- (void)enumerateKeysWithPrefix:(NSString *)prefixString usingBlock:(void (^)(NSString *key, BOOL *stop))block;
-{
-    @autoreleasepool {
-        BOOL stop = NO;
-        leveldb::Slice prefix = SliceFromString(prefixString);
-        leveldb::Iterator* iter = _db->NewIterator(leveldb::ReadOptions());
-        for (iter->Seek(prefix); iter->Valid(); iter->Next()) {
-            leveldb::Slice key = iter->key();
-            if (key.starts_with(prefix)) {
-                NSString *k = StringFromSlice(key);
-                block(k, &stop);
-                if (stop)
-                    break;
-            } else {
-                break;
-            }
-        }
-
-        delete iter;
-    }
-}
-
-- (void)enumerateKeysAndValuesAsData:(void (^)(NSString *key, NSData *data, BOOL *stop))block
-{
-    [self enumerateKeysWithPrefix:@"" asData:block];
-}
-
-- (void)enumerateKeysWithPrefix:(NSString *)prefixString asData:(void (^)(NSString *, NSData *, BOOL *))block
-{
-    @autoreleasepool {
-        BOOL stop = NO;
-        leveldb::Iterator* iter = _db->NewIterator(leveldb::ReadOptions());
-        leveldb::Slice prefix = SliceFromString(prefixString);
-        for (iter->Seek(prefix); iter->Valid(); iter->Next()) {
-            leveldb::Slice key = iter->key(), value = iter->value();
-            if (key.starts_with(prefix)) {
-                NSString *k = StringFromSlice(key);
-                NSData *data = [NSData dataWithBytes:value.data() length:value.size()];
-                block(k, data, &stop);
-                if (stop)
-                    break;
-            } else {
-                break;
-            }
-        }
-
-        delete iter;
-    }
-}
-
-- (NSUInteger)exactSizeFrom:(NSString *)from to:(NSString *)to {
-    NSUInteger size = 0;
-    leveldb::Iterator* iter = _db->NewIterator(leveldb::ReadOptions());
-    leveldb::Slice fromSlice = SliceFromString(from);
-    leveldb::Slice toSlice = SliceFromString(to);
-    iter->Seek(fromSlice);
-    while (iter->Valid() && iter->key().compare(toSlice) <= 0) {
-        size += iter->value().size();
-        iter->Next();
-    }
-    delete iter;
-    return size;
-}
-
-
-- (NSUInteger)approximateSizeFrom:(NSString *)from to:(NSString *)to {
-    leveldb::Range ranges[1];
-    leveldb::Slice fromSlice = SliceFromString(from);
-    leveldb::Slice toSlice = SliceFromString(to);
-    ranges[0] = leveldb::Range(fromSlice, toSlice);
-    uint64_t sizes[1];
-    _db->GetApproximateSizes(ranges, 1, sizes);
-    return (NSUInteger)sizes[0];
-}
-
-#pragma mark - Subscripting Support
-
-- (id)objectForKeyedSubscript:(id)key
-{
-    if (![key respondsToSelector: @selector(componentsSeparatedByString:)])
-    {
-        [NSException raise:NSInvalidArgumentException format:@"key must be an NSString"];
-    }
-    return [self stringForKey:key];
-}
-- (void)setObject:(id)thing forKeyedSubscript:(id<NSCopying>)key
-{
-    id idKey = (id) key;
-    if (![idKey respondsToSelector: @selector(componentsSeparatedByString:)])
-    {
-        [NSException raise:NSInvalidArgumentException format:@"key must be NSString or NSData"];
-    }
-
-    if ([thing respondsToSelector:@selector(componentsSeparatedByString:)])
-        [self setString:thing forKey:(NSString *)key];
-    else if ([thing respondsToSelector:@selector(subdataWithRange:)])
-        [self setData:thing forKey:(NSString *)key];
-    else
-        [NSException raise:NSInvalidArgumentException format:@"object must be NSString or NSData"];
-}
-
-#pragma mark - Atomic Updates
-
-- (id<APLevelDBWriteBatch>)beginWriteBatch
-{
-    APLevelDBWriteBatch *batch = [[APLevelDBWriteBatch alloc] initWithLevelDB:self];
-    return batch;
-}
-
-- (BOOL)commitWriteBatch:(id<APLevelDBWriteBatch>)theBatch
-{
-    if (!theBatch)
-        return NO;
-
-    APLevelDBWriteBatch *batch = theBatch;
-
-    leveldb::Status status;
-    status = _db->Write(_writeOptions, &batch->_batch);
-    return (status.ok() == true);
-}
-
-@end
-
-
-#pragma mark - APLevelDBIterator
-
-@interface APLevelDBIterator () {
-    leveldb::Iterator *_iter;
-}
-
-@property (nonatomic, strong) APLevelDB *levelDB;
-@end
-
-
-
-@implementation APLevelDBIterator
-
-+ (id)iteratorWithLevelDB:(APLevelDB *)db
-{
-    APLevelDBIterator *iter = [[[self class] alloc] initWithLevelDB:db];
-    return iter;
-}
-
-- (id)initWithLevelDB:(APLevelDB *)db
-{
-    if ((self = [super init]))
-    {
-        // Hold on to the database so it doesn't get deallocated before the iterator is deallocated
-        self->_levelDB = db;
-        _iter = db.db->NewIterator(leveldb::ReadOptions());
-        _iter->SeekToFirst();
-        if (!_iter->Valid())
-            return nil;
-    }
-    return self;
-}
-
-- (id)init
-{
-    [NSException raise:@"BadInitializer" format:@"Use the designated initializer, -initWithLevelDB:, instead."];
-    return nil;
-}
-
-- (void)dealloc
-{
-    self->_levelDB = nil;
-    delete _iter;
-    _iter = NULL;
-}
-
-- (BOOL)seekToKey:(NSString *)key
-{
-    leveldb::Slice target = SliceFromString(key);
-    _iter->Seek(target);
-    return _iter->Valid() == true;
-}
-
-- (void)seekToFirst
-{
-    _iter->SeekToFirst();
-}
-
-- (void)seekToLast
-{
-    _iter->SeekToLast();
-}
-
-- (NSString *)nextKey
-{
-    _iter->Next();
-    return [self key];
-}
-
-- (NSString *)key
-{
-    if (_iter->Valid() == false)
-        return nil;
-    leveldb::Slice value = _iter->key();
-    return StringFromSlice(value);
-}
-
-- (NSString *)valueAsString
-{
-    if (_iter->Valid() == false)
-        return nil;
-    leveldb::Slice value = _iter->value();
-    return StringFromSlice(value);
-}
-
-- (NSData *)valueAsData
-{
-    if (_iter->Valid() == false)
-        return nil;
-    leveldb::Slice value = _iter->value();
-    return [NSData dataWithBytes:value.data() length:value.size()];
-}
-
-@end
-
-
-
-#pragma mark - APLevelDBWriteBatch
-
-@implementation APLevelDBWriteBatch
-
-- (id)initWithLevelDB:(APLevelDB *)levelDB {
-    self = [super init];
-    if (self != nil) {
-        self->_levelDB = levelDB;
-    }
-    return self;
-}
-
-- (void)setData:(NSData *)data forKey:(NSString *)key
-{
-    leveldb::Slice keySlice = SliceFromString(key);
-    leveldb::Slice valueSlice = leveldb::Slice((const char *)[data bytes], (size_t)[data length]);
-    _batch.Put(keySlice, valueSlice);
-}
-- (void)setString:(NSString *)str forKey:(NSString *)key
-{
-    leveldb::Slice keySlice = SliceFromString(key);
-    leveldb::Slice valueSlice = SliceFromString(str);
-    _batch.Put(keySlice, valueSlice);
-}
-
-- (void)removeKey:(NSString *)key
-{
-    leveldb::Slice keySlice = SliceFromString(key);
-    _batch.Delete(keySlice);
-}
-
-- (void)clear
-{
-    _batch.Clear();
-}
-
-- (BOOL)commit {
-    return [self.levelDB commitWriteBatch:self];
-}
-
-@end
-
diff --git a/assign5/openTok/Pods/FirebaseDatabase/LICENSE b/assign5/openTok/Pods/FirebaseDatabase/LICENSE
deleted file mode 100644
index d645695..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
diff --git a/assign5/openTok/Pods/FirebaseDatabase/README.md b/assign5/openTok/Pods/FirebaseDatabase/README.md
deleted file mode 100644
index b04a270..0000000
--- a/assign5/openTok/Pods/FirebaseDatabase/README.md
+++ /dev/null
@@ -1,282 +0,0 @@
-# Firebase iOS Open Source Development
- [![Actions Status][gh-auth-badge]][gh-actions]
- [![Actions Status][gh-core-badge]][gh-actions]
- [![Actions Status][gh-datatransport-badge]][gh-actions]
- [![Actions Status][gh-dynamiclinks-badge]][gh-actions]
- [![Actions Status][gh-firebasepod-badge]][gh-actions]
- [![Actions Status][gh-firestore-badge]][gh-actions]
- [![Actions Status][gh-interop-badge]][gh-actions]
- [![Actions Status][gh-messaging-badge]][gh-actions]
- [![Actions Status][gh-storage-badge]][gh-actions]
- [![Actions Status][gh-symbolcollision-badge]][gh-actions]
- [![Actions Status][gh-zip-badge]][gh-actions]
- [![Travis](https://travis-ci.org/firebase/firebase-ios-sdk.svg?branch=master)](https://travis-ci.org/firebase/firebase-ios-sdk)
-
-This repository contains all Firebase iOS SDK source except FirebaseAnalytics,
-FirebasePerformance, and FirebaseML.
-
-The repository also includes GoogleUtilities source. The
-[GoogleUtilities](GoogleUtilities/README.md) pod is
-a set of utilities used by Firebase and other Google products.
-
-Firebase is an app development platform with tools to help you build, grow and
-monetize your app. More information about Firebase can be found at
-[https://firebase.google.com](https://firebase.google.com).
-
-## Installation
-
-See the three subsections for details about three different installation methods.
-1. [Standard pod install](README.md#standard-pod-install)
-1. [Installing from the GitHub repo](README.md#installing-from-github)
-1. [Experimental Carthage](README.md#carthage-ios-only)
-
-### Standard pod install
-
-Go to
-[https://firebase.google.com/docs/ios/setup](https://firebase.google.com/docs/ios/setup).
-
-### Installing from GitHub
-
-For releases starting with 5.0.0, the source for each release is also deployed
-to CocoaPods master and available via standard
-[CocoaPods Podfile syntax](https://guides.cocoapods.org/syntax/podfile.html#pod).
-
-These instructions can be used to access the Firebase repo at other branches,
-tags, or commits.
-
-#### Background
-
-See
-[the Podfile Syntax Reference](https://guides.cocoapods.org/syntax/podfile.html#pod)
-for instructions and options about overriding pod source locations.
-
-#### Accessing Firebase Source Snapshots
-
-All of the official releases are tagged in this repo and available via CocoaPods. To access a local
-source snapshot or unreleased branch, use Podfile directives like the following:
-
-To access FirebaseFirestore via a branch:
-```
-pod 'FirebaseCore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master'
-pod 'FirebaseFirestore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master'
-```
-
-To access FirebaseMessaging via a checked out version of the firebase-ios-sdk repo do:
-
-```
-pod 'FirebaseCore', :path => '/path/to/firebase-ios-sdk'
-pod 'FirebaseMessaging', :path => '/path/to/firebase-ios-sdk'
-```
-
-### Carthage (iOS only)
-
-Instructions for the experimental Carthage distribution are at
-[Carthage](Carthage.md).
-
-### Rome
-
-Instructions for installing binary frameworks via
-[Rome](https://github.com/CocoaPods/Rome) are at [Rome](Rome.md).
-
-### Using Firebase from a Framework or a library
-
-[Using Firebase from a Framework or a library](docs/firebase_in_libraries.md)
-
-## Development
-
-To develop Firebase software in this repository, ensure that you have at least
-the following software:
-
-  * Xcode 10.1 (or later)
-  * CocoaPods 1.7.2 (or later)
-  * [CocoaPods generate](https://github.com/square/cocoapods-generate)
-
-For the pod that you want to develop:
-
-`pod gen Firebase{name here}.podspec --local-sources=./ --auto-open --platforms=ios`
-
-Note: If the CocoaPods cache is out of date, you may need to run
-`pod repo update` before the `pod gen` command.
-
-Note: Set the `--platforms` option to `macos` or `tvos` to develop/test for
-those platforms. Since 10.2, Xcode does not properly handle multi-platform
-CocoaPods workspaces.
-
-Firestore has a self contained Xcode project. See
-[Firestore/README.md](Firestore/README.md).
-
-### Development for Catalyst
-* `pod gen {name here}.podspec --local-sources=./ --auto-open --platforms=ios`
-* Check the Mac box in the App-iOS Build Settings
-* Sign the App in the Settings Signing & Capabilities tab
-* Click Pods in the Project Manager
-* Add Signing to the iOS host app and unit test targets
-* Select the Unit-unit scheme
-* Run it to build and test
-
-### Adding a New Firebase Pod
-
-See [AddNewPod.md](AddNewPod.md).
-
-### Code Formatting
-
-To ensure that the code is formatted consistently, run the script
-[./scripts/style.sh](https://github.com/firebase/firebase-ios-sdk/blob/master/scripts/style.sh)
-before creating a PR.
-
-Travis will verify that any code changes are done in a style compliant way. Install
-`clang-format` and `swiftformat`.
-These commands will get the right versions:
-
-```
-brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/c6f1cbd/Formula/clang-format.rb
-brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/c13eda8/Formula/swiftformat.rb
-```
-
-Note: if you already have a newer version of these installed you may need to
-`brew switch` to this version.
-
-To update this section, find the versions of clang-format and swiftformat.rb to
-match the versions in the CI failure logs
-[here](https://github.com/Homebrew/homebrew-core/tree/master/Formula).
-
-### Running Unit Tests
-
-Select a scheme and press Command-u to build a component and run its unit tests.
-
-#### Viewing Code Coverage (Deprecated)
-
-First, make sure that [xcov](https://github.com/nakiostudio/xcov) is installed with `gem install xcov`.
-
-After running the `AllUnitTests_iOS` scheme in Xcode, execute
-`xcov --workspace Firebase.xcworkspace --scheme AllUnitTests_iOS --output_directory xcov_output`
-at Example/ in the terminal. This will aggregate the coverage, and you can run `open xcov_output/index.html` to see the results.
-
-### Running Sample Apps
-In order to run the sample apps and integration tests, you'll need valid
-`GoogleService-Info.plist` files for those samples. The Firebase Xcode project contains dummy plist
-files without real values, but can be replaced with real plist files. To get your own
-`GoogleService-Info.plist` files:
-
-1. Go to the [Firebase Console](https://console.firebase.google.com/)
-2. Create a new Firebase project, if you don't already have one
-3. For each sample app you want to test, create a new Firebase app with the sample app's bundle
-identifier (e.g. `com.google.Database-Example`)
-4. Download the resulting `GoogleService-Info.plist` and replace the appropriate dummy plist file
-(e.g. in [Example/Database/App/](Example/Database/App/));
-
-Some sample apps like Firebase Messaging ([Example/Messaging/App](Example/Messaging/App)) require
-special Apple capabilities, and you will have to change the sample app to use a unique bundle
-identifier that you can control in your own Apple Developer account.
-
-## Specific Component Instructions
-See the sections below for any special instructions for those components.
-
-### Firebase Auth
-
-If you're doing specific Firebase Auth development, see
-[the Auth Sample README](FirebaseAuth/Tests/Sample/README.md) for instructions about
-building and running the FirebaseAuth pod along with various samples and tests.
-
-### Firebase Database
-
-To run the Database Integration tests, make your database authentication rules
-[public](https://firebase.google.com/docs/database/security/quickstart).
-
-### Firebase Storage
-
-To run the Storage Integration tests, follow the instructions in
-[FIRStorageIntegrationTests.m](FirebaseStorage/Tests/Integration/FIRStorageIntegrationTests.m).
-
-#### Push Notifications
-
-Push notifications can only be delivered to specially provisioned App IDs in the developer portal.
-In order to actually test receiving push notifications, you will need to:
-
-1. Change the bundle identifier of the sample app to something you own in your Apple Developer
-account, and enable that App ID for push notifications.
-2. You'll also need to
-[upload your APNs Provider Authentication Key or certificate to the Firebase Console](https://firebase.google.com/docs/cloud-messaging/ios/certs)
-at **Project Settings > Cloud Messaging > [Your Firebase App]**.
-3. Ensure your iOS device is added to your Apple Developer portal as a test device.
-
-#### iOS Simulator
-
-The iOS Simulator cannot register for remote notifications, and will not receive push notifications.
-In order to receive push notifications, you'll have to follow the steps above and run the app on a
-physical device.
-
-## Community Supported Efforts
-
-We've seen an amazing amount of interest and contributions to improve the Firebase SDKs, and we are
-very grateful!  We'd like to empower as many developers as we can to be able to use Firebase and
-participate in the Firebase community.
-
-### tvOS, macOS, watchOS and Catalyst
-Thanks to contributions from the community, many of Firebase SDKs now compile, run unit tests, and work on
-tvOS, macOS, watchOS and Catalyst.
-
-For tvOS, checkout the [Sample](Example/tvOSSample).
-For watchOS, currently only Messaging and Storage (and their dependencies) have limited support. Checkout the
-[Independent Watch App Sample](Example/watchOSSample).
-
-Keep in mind that macOS, tvOS, watchOS and Catalyst are not officially supported by Firebase, and this
-repository is actively developed primarily for iOS. While we can catch basic unit test issues with
-Travis, there may be some changes where the SDK no longer works as expected on macOS, tvOS or watchOS. If you
-encounter this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues).
-
-During app setup in the console, you may get to a step that mentions something like "Checking if the app
-has communicated with our servers". This relies on Analytics and will not work on macOS/tvOS/watchOS/Catalyst.
-**It's safe to ignore the message and continue**, the rest of the SDKs will work as expected.
-
-To install, add a subset of the following to the Podfile:
-
-```
-pod 'Firebase/ABTesting'     # No watchOS support yet
-pod 'Firebase/Auth'          # No watchOS support yet
-pod 'Firebase/Crashlytics'   # No watchOS support yet
-pod 'Firebase/Database'      # No watchOS support yet
-pod 'Firebase/Firestore'     # No watchOS support yet
-pod 'Firebase/Functions'     # No watchOS support yet
-pod 'Firebase/Messaging'
-pod 'Firebase/RemoteConfig'  # No watchOS support yet
-pod 'Firebase/Storage'
-```
-
-#### Additional Catalyst Notes
-
-* FirebaseAuth and FirebaseMessaging require adding `Keychain Sharing Capability`
-to Build Settings.
-* FirebaseFirestore requires signing the
-[gRPC Resource target](https://github.com/firebase/firebase-ios-sdk/issues/3500#issuecomment-518741681).
-
-## Roadmap
-
-See [Roadmap](ROADMAP.md) for more about the Firebase iOS SDK Open Source
-plans and directions.
-
-## Contributing
-
-See [Contributing](CONTRIBUTING.md) for more information on contributing to the Firebase
-iOS SDK.
-
-## License
-
-The contents of this repository is licensed under the
-[Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0).
-
-Your use of Firebase is governed by the
-[Terms of Service for Firebase Services](https://firebase.google.com/terms/).
-
-[gh-actions]: https://github.com/firebase/firebase-ios-sdk/actions
-[gh-auth-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/auth/badge.svg
-[gh-core-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/core/badge.svg
-[gh-datatransport-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/datatransport/badge.svg
-[gh-dynamiclinks-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/dynamiclinks/badge.svg
-[gh-firebasepod-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firebasepod/badge.svg
-[gh-firestore-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firestore/badge.svg
-[gh-interop-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/interop/badge.svg
-[gh-messaging-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/messaging/badge.svg
-[gh-storage-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/storage/badge.svg
-[gh-symbolcollision-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/symbolcollision/badge.svg
-[gh-zip-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/zip/badge.svg
diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORAssert.m b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORAssert.m
deleted file mode 100644
index 3e5f57b..0000000
--- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORAssert.m
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "GDTCORLibrary/Public/GDTCORAssert.h"
-
-GDTCORAssertionBlock GDTCORAssertionBlockToRunInstead(void) {
-  // This class is only compiled in by unit tests, and this should fail quickly in optimized builds.
-  Class GDTCORAssertClass = NSClassFromString(@"GDTCORAssertHelper");
-  if (__builtin_expect(!!GDTCORAssertClass, 0)) {
-    SEL assertionBlockSEL = NSSelectorFromString(@"assertionBlock");
-    if (assertionBlockSEL) {
-      IMP assertionBlockIMP = [GDTCORAssertClass methodForSelector:assertionBlockSEL];
-      if (assertionBlockIMP) {
-        GDTCORAssertionBlock assertionBlock = ((GDTCORAssertionBlock(*)(id, SEL))assertionBlockIMP)(
-            GDTCORAssertClass, assertionBlockSEL);
-        if (assertionBlock) {
-          return assertionBlock;
-        }
-      }
-    }
-  }
-  return NULL;
-}
diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORClock.m b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORClock.m
deleted file mode 100644
index f0ea8ab..0000000
--- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORClock.m
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * Copyright 2018 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "GDTCORLibrary/Public/GDTCORClock.h"
-
-#import <sys/sysctl.h>
-
-// Using a monotonic clock is necessary because CFAbsoluteTimeGetCurrent(), NSDate, and related all
-// are subject to drift. That it to say, multiple consecutive calls do not always result in a
-// time that is in the future. Clocks may be adjusted by the user, NTP, or any number of external
-// factors. This class attempts to determine the wall-clock time at the time of the event by
-// capturing the kernel start and time since boot to determine a wallclock time in UTC.
-//
-// Timezone offsets at the time of a snapshot are also captured in order to provide local-time
-// details. Other classes in this library depend on comparing times at some time in the future to
-// a time captured in the past, and this class needs to provide a mechanism to do that.
-//
-// TL;DR: This class attempts to accomplish two things: 1. Provide accurate event times. 2. Provide
-// a monotonic clock mechanism to accurately check if some clock snapshot was before or after
-// by using a shared reference point (kernel boot time).
-//
-// Note: Much of the mach time stuff doesn't work properly in the simulator. So this class can be
-// difficult to unit test.
-
-/** Returns the kernel boottime property from sysctl.
- *
- * Inspired by https://stackoverflow.com/a/40497811
- *
- * @return The KERN_BOOTTIME property from sysctl, in nanoseconds.
- */
-static int64_t KernelBootTimeInNanoseconds() {
-  // Caching the result is not possible because clock drift would not be accounted for.
-  struct timeval boottime;
-  int mib[2] = {CTL_KERN, KERN_BOOTTIME};
-  size_t size = sizeof(boottime);
-  int rc = sysctl(mib, 2, &boottime, &size, NULL, 0);
-  if (rc != 0) {
-    return 0;
-  }
-  return (int64_t)boottime.tv_sec * NSEC_PER_MSEC + (int64_t)boottime.tv_usec;
-}
-
-/** Returns value of gettimeofday, in nanoseconds.
- *
- * Inspired by https://stackoverflow.com/a/40497811
- *
- * @return The value of gettimeofday, in nanoseconds.
- */
-static int64_t UptimeInNanoseconds() {
-  int64_t before_now;
-  int64_t after_now;
-  struct timeval now;
-
-  before_now = KernelBootTimeInNanoseconds();
-  // Addresses a race condition in which the system time has updated, but the boottime has not.
-  do {
-    gettimeofday(&now, NULL);
-    after_now = KernelBootTimeInNanoseconds();
-  } while (after_now != before_now);
-  return (int64_t)now.tv_sec * NSEC_PER_MSEC + (int64_t)now.tv_usec - before_now;
-}
-
-// TODO: Consider adding a 'trustedTime' property that can be populated by the response from a BE.
-@implementation GDTCORClock
-
-- (instancetype)init {
-  self = [super init];
-  if (self) {
-    _kernelBootTime = KernelBootTimeInNanoseconds();
-    _uptime = UptimeInNanoseconds();
-    _timeMillis =
-        (int64_t)((CFAbsoluteTimeGetCurrent() + kCFAbsoluteTimeIntervalSince1970) * NSEC_PER_USEC);
-    CFTimeZoneRef timeZoneRef = CFTimeZoneCopySystem();
-    _timezoneOffsetSeconds = CFTimeZoneGetSecondsFromGMT(timeZoneRef, 0);
-    CFRelease(timeZoneRef);
-  }
-  return self;
-}
-
-+ (GDTCORClock *)snapshot {
-  return [[GDTCORClock alloc] init];
-}
-
-+ (instancetype)clockSnapshotInTheFuture:(uint64_t)millisInTheFuture {
-  GDTCORClock *snapshot = [self snapshot];
-  snapshot->_timeMillis += millisInTheFuture;
-  return snapshot;
-}
-
-- (BOOL)isAfter:(GDTCORClock *)otherClock {
-  // These clocks are trivially comparable when they share a kernel boot time.
-  if (_kernelBootTime == otherClock->_kernelBootTime) {
-    int64_t timeDiff = (_timeMillis + _timezoneOffsetSeconds) -
-                       (otherClock->_timeMillis + otherClock->_timezoneOffsetSeconds);
-    return timeDiff > 0;
-  } else {
-    int64_t kernelBootTimeDiff = otherClock->_kernelBootTime - _kernelBootTime;
-    // This isn't a great solution, but essentially, if the other clock's boot time is 'later', NO
-    // is returned. This can be altered by changing the system time and rebooting.
-    return kernelBootTimeDiff < 0 ? YES : NO;
-  }
-}
-
-- (NSUInteger)hash {
-  return [@(_kernelBootTime) hash] ^ [@(_uptime) hash] ^ [@(_timeMillis) hash] ^
-         [@(_timezoneOffsetSeconds) hash];
-}
-
-- (BOOL)isEqual:(id)object {
-  return [self hash] == [object hash];
-}
-
-#pragma mark - NSSecureCoding
-
-/** NSKeyedCoder key for timeMillis property. */
-static NSString *const kGDTCORClockTimeMillisKey = @"GDTCORClockTimeMillis";
-
-/** NSKeyedCoder key for timezoneOffsetMillis property. */
-static NSString *const kGDTCORClockTimezoneOffsetSeconds = @"GDTCORClockTimezoneOffsetSeconds";
-
-/** NSKeyedCoder key for _kernelBootTime ivar. */
-static NSString *const kGDTCORClockKernelBootTime = @"GDTCORClockKernelBootTime";
-
-/** NSKeyedCoder key for _uptime ivar. */
-static NSString *const kGDTCORClockUptime = @"GDTCORClockUptime";
-
-+ (BOOL)supportsSecureCoding {
-  return YES;
-}
-
-- (instancetype)initWithCoder:(NSCoder *)aDecoder {
-  self = [super init];
-  if (self) {
-    // TODO: If the kernelBootTime is more recent, we need to change the kernel boot time and
-    // uptimeMillis ivars
-    _timeMillis = [aDecoder decodeInt64ForKey:kGDTCORClockTimeMillisKey];
-    _timezoneOffsetSeconds = [aDecoder decodeInt64ForKey:kGDTCORClockTimezoneOffsetSeconds];
-    _kernelBootTime = [aDecoder decodeInt64ForKey:kGDTCORClockKernelBootTime];
-    _uptime = [aDecoder decodeInt64ForKey:kGDTCORClockUptime];
-  }
-  return self;
-}
-
-- (void)encodeWithCoder:(NSCoder *)aCoder {
-  [aCoder encodeInt64:_timeMillis forKey:kGDTCORClockTimeMillisKey];
-  [aCoder encodeInt64:_timezoneOffsetSeconds forKey:kGDTCORClockTimezoneOffsetSeconds];
-  [aCoder encodeInt64:_kernelBootTime forKey:kGDTCORClockKernelBootTime];
-  [aCoder encodeInt64:_uptime forKey:kGDTCORClockUptime];
-}
-
-@end
diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORConsoleLogger.m b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORConsoleLogger.m
deleted file mode 100644
index 0f5170d..0000000
--- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORConsoleLogger.m
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright 2018 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "GDTCORLibrary/Public/GDTCORConsoleLogger.h"
-
-volatile NSInteger GDTCORConsoleLoggerLoggingLevel = GDTCORLoggingLevelErrors;
-
-/** The console logger prefix. */
-static NSString *kGDTCORConsoleLogger = @"[GoogleDataTransport]";
-
-NSString *GDTCORMessageCodeEnumToString(GDTCORMessageCode code) {
-  return [[NSString alloc] initWithFormat:@"I-GDTCOR%06ld", (long)code];
-}
-
-void GDTCORLog(GDTCORMessageCode code, GDTCORLoggingLevel logLevel, NSString *format, ...) {
-// Don't log anything in not debug builds.
-#if !NDEBUG
-  if (logLevel >= GDTCORConsoleLoggerLoggingLevel) {
-    NSString *logFormat = [NSString stringWithFormat:@"%@[%@] %@", kGDTCORConsoleLogger,
-                                                     GDTCORMessageCodeEnumToString(code), format];
-    va_list args;
-    va_start(args, format);
-    NSLogv(logFormat, args);
-    va_end(args);
-  }
-#endif  // !NDEBUG
-}
-
-void GDTCORLogAssert(
-    BOOL wasFatal, NSString *_Nonnull file, NSInteger line, NSString *_Nullable format, ...) {
-// Don't log anything in not debug builds.
-#if !NDEBUG
-  GDTCORMessageCode code = wasFatal ? GDTCORMCEFatalAssertion : GDTCORMCEGeneralError;
-  NSString *logFormat =
-      [NSString stringWithFormat:@"%@[%@] (%@:%ld) : %@", kGDTCORConsoleLogger,
-                                 GDTCORMessageCodeEnumToString(code), file, (long)line, format];
-  va_list args;
-  va_start(args, format);
-  NSLogv(logFormat, args);
-  va_end(args);
-#endif  // !NDEBUG
-}
diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORDataFuture.m b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORDataFuture.m
deleted file mode 100644
index 04903d4..0000000
--- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORDataFuture.m
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "GDTCORLibrary/Private/GDTCORDataFuture.h"
-
-@implementation GDTCORDataFuture
-
-- (instancetype)initWithFileURL:(NSURL *)fileURL {
-  self = [super init];
-  if (self) {
-    _fileURL = fileURL;
-  }
-  return self;
-}
-
-- (BOOL)isEqual:(id)object {
-  return [self hash] == [object hash];
-}
-
-- (NSUInteger)hash {
-  // In reality, only one of these should be populated.
-  return [_fileURL hash];
-}
-
-#pragma mark - NSSecureCoding
-
-/** Coding key for _fileURL ivar. */
-static NSString *kGDTCORDataFutureFileURLKey = @"GDTCORDataFutureFileURLKey";
-
-+ (BOOL)supportsSecureCoding {
-  return YES;
-}
-
-- (void)encodeWithCoder:(nonnull NSCoder *)aCoder {
-  [aCoder encodeObject:_fileURL forKey:kGDTCORDataFutureFileURLKey];
-}
-
-- (nullable instancetype)initWithCoder:(nonnull NSCoder *)aDecoder {
-  self = [self init];
-  if (self) {
-    _fileURL = [aDecoder decodeObjectOfClass:[NSURL class] forKey:kGDTCORDataFutureFileURLKey];
-  }
-  return self;
-}
-
-@end
diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCOREvent.m b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCOREvent.m
deleted file mode 100644
index 6514312..0000000
--- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCOREvent.m
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- * Copyright 2018 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "GDTCORLibrary/Public/GDTCOREvent.h"
-
-#import <GoogleDataTransport/GDTCORAssert.h>
-#import <GoogleDataTransport/GDTCORClock.h>
-#import <GoogleDataTransport/GDTCORConsoleLogger.h>
-#import <GoogleDataTransport/GDTCORPlatform.h>
-
-#import "GDTCORLibrary/Private/GDTCORDataFuture.h"
-#import "GDTCORLibrary/Private/GDTCOREvent_Private.h"
-
-@implementation GDTCOREvent
-
-+ (NSNumber *)nextEventID {
-  static unsigned long long nextEventID = 0;
-  static NSString *counterPath;
-  static dispatch_queue_t eventIDQueue;
-  static dispatch_once_t onceToken;
-  dispatch_once(&onceToken, ^{
-    eventIDQueue = dispatch_queue_create("com.google.GDTCOREventIDQueue", DISPATCH_QUEUE_SERIAL);
-    counterPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
-    counterPath = [NSString stringWithFormat:@"%@/google-sdks-events/count", counterPath];
-    NSError *error;
-    NSString *countText = [NSString stringWithContentsOfFile:counterPath
-                                                    encoding:NSUTF8StringEncoding
-                                                       error:&error];
-    const char *countChars = [countText UTF8String];
-    unsigned long long count = 0ULL;
-    if (countChars) {
-      count = strtoull([countText UTF8String], NULL, 10);
-    }
-    nextEventID = error ? 0 : count;
-  });
-
-  __block NSNumber *result;
-  dispatch_sync(eventIDQueue, ^{
-    result = @(nextEventID);
-    nextEventID++;
-    NSError *error;
-    [[result stringValue] writeToFile:counterPath
-                           atomically:YES
-                             encoding:NSUTF8StringEncoding
-                                error:&error];
-    GDTCORAssert(error == nil, @"There was an error saving the new counter value to disk.");
-  });
-  return result;
-}
-
-- (nullable instancetype)initWithMappingID:(NSString *)mappingID target:(NSInteger)target {
-  GDTCORAssert(mappingID.length > 0, @"Please give a valid mapping ID");
-  GDTCORAssert(target > 0, @"A target cannot be negative or 0");
-  if (mappingID == nil || mappingID.length == 0 || target <= 0) {
-    return nil;
-  }
-  self = [super init];
-  if (self) {
-    _eventID = [GDTCOREvent nextEventID];
-    _mappingID = mappingID;
-    _target = target;
-    _qosTier = GDTCOREventQosDefault;
-  }
-  GDTCORLogDebug(@"Event %@ created. mappingID: %@ target:%ld", self, mappingID, (long)target);
-  return self;
-}
-
-- (instancetype)copy {
-  GDTCOREvent *copy = [[GDTCOREvent alloc] initWithMappingID:_mappingID target:_target];
-  copy->_eventID = _eventID;
-  copy.dataObject = _dataObject;
-  copy.qosTier = _qosTier;
-  copy.clockSnapshot = _clockSnapshot;
-  copy.customBytes = _customBytes;
-  copy->_GDTFilePath = _GDTFilePath;
-  GDTCORLogDebug(@"Copying event %@ to event %@", self, copy);
-  return copy;
-}
-
-- (NSUInteger)hash {
-  // This loses some precision, but it's probably fine.
-  NSUInteger eventIDHash = [_eventID hash];
-  NSUInteger mappingIDHash = [_mappingID hash];
-  NSUInteger timeHash = [_clockSnapshot hash];
-  NSInteger dataObjectHash = [_dataObject hash];
-  NSUInteger fileURL = [_GDTFilePath hash];
-
-  return eventIDHash ^ mappingIDHash ^ _target ^ _qosTier ^ timeHash ^ dataObjectHash ^ fileURL;
-}
-
-- (BOOL)isEqual:(id)object {
-  return [self hash] == [object hash];
-}
-
-#pragma mark - Property overrides
-
-- (void)setDataObject:(id<GDTCOREventDataObject>)dataObject {
-  // If you're looking here because of a performance issue in -transportBytes slowing the assignment
-  // of -dataObject, one way to address this is to add a queue to this class,
-  // dispatch_(barrier_ if concurrent)async here, and implement the getter with a dispatch_sync.
-  if (dataObject != _dataObject) {
-    _dataObject = dataObject;
-  }
-}
-
-- (NSURL *)fileURL {
-  if (!_GDTFilePath) {
-    _GDTFilePath = [NSString stringWithFormat:@"event-%lu", (unsigned long)self.hash];
-  }
-  return [GDTCORRootDirectory() URLByAppendingPathComponent:_GDTFilePath];
-}
-
-#pragma mark - Private methods
-
-- (BOOL)writeToGDTPath:(NSString *)filePath error:(NSError **)error {
-  NSData *dataTransportBytes = [_dataObject transportBytes];
-  if (dataTransportBytes == nil) {
-    _GDTFilePath = nil;
-    _dataObject = nil;
-    return NO;
-  }
-  NSURL *fileURL = [GDTCORRootDirectory() URLByAppendingPathComponent:filePath];
-  BOOL writingSuccess = [dataTransportBytes writeToURL:fileURL
-                                               options:NSDataWritingAtomic
-                                                 error:error];
-  if (!writingSuccess) {
-    GDTCORLogError(GDTCORMCEFileWriteError, @"An event file could not be written: %@", fileURL);
-    return NO;
-  }
-  _GDTFilePath = filePath;
-  _dataObject = nil;
-  return YES;
-}
-
-#pragma mark - NSSecureCoding and NSCoding Protocols
-
-/** NSCoding key for eventID property. */
-static NSString *eventIDKey = @"_eventID";
-
-/** NSCoding key for mappingID property. */
-static NSString *mappingIDKey = @"_mappingID";
-
-/** NSCoding key for target property. */
-static NSString *targetKey = @"_target";
-
-/** NSCoding key for qosTier property. */
-static NSString *qosTierKey = @"_qosTier";
-
-/** NSCoding key for clockSnapshot property. */
-static NSString *clockSnapshotKey = @"_clockSnapshot";
-
-/** NSCoding key for fileURL property. */
-static NSString *fileURLKey = @"_fileURL";
-
-/** NSCoding key for GDTFilePath property. */
-static NSString *kGDTFilePathKey = @"_GDTFilePath";
-
-/** NSCoding key for backwards compatibility of GDTCORStoredEvent mappingID property.*/
-static NSString *kStoredEventMappingIDKey = @"GDTCORStoredEventMappingIDKey";
-
-/** NSCoding key for backwards compatibility of GDTCORStoredEvent target property.*/
-static NSString *kStoredEventTargetKey = @"GDTCORStoredEventTargetKey";
-
-/** NSCoding key for backwards compatibility of GDTCORStoredEvent qosTier property.*/
-static NSString *kStoredEventQosTierKey = @"GDTCORStoredEventQosTierKey";
-
-/** NSCoding key for backwards compatibility of GDTCORStoredEvent clockSnapshot property.*/
-static NSString *kStoredEventClockSnapshotKey = @"GDTCORStoredEventClockSnapshotKey";
-
-/** NSCoding key for backwards compatibility of GDTCORStoredEvent dataFuture property.*/
-static NSString *kStoredEventDataFutureKey = @"GDTCORStoredEventDataFutureKey";
-
-/** NSCoding key for customData property. */
-static NSString *kCustomDataKey = @"GDTCOREventCustomDataKey";
-
-+ (BOOL)supportsSecureCoding {
-  return YES;
-}
-
-- (id)initWithCoder:(NSCoder *)aDecoder {
-  GDTCORDataFuture *dataFuture = [aDecoder decodeObjectOfClass:[GDTCORDataFuture class]
-                                                        forKey:kStoredEventDataFutureKey];
-  if (dataFuture) {
-    return [self initWithCoderForStoredEventBackwardCompatibility:aDecoder
-                                                          fileURL:dataFuture.fileURL];
-  }
-  NSString *mappingID = [aDecoder decodeObjectOfClass:[NSString class] forKey:mappingIDKey];
-  NSInteger target = [aDecoder decodeIntegerForKey:targetKey];
-  self = [self initWithMappingID:mappingID target:target];
-  if (self) {
-    _eventID = [aDecoder decodeObjectOfClass:[NSNumber class] forKey:eventIDKey];
-    if (_eventID == nil) {
-      _eventID = [GDTCOREvent nextEventID];
-    }
-    _qosTier = [aDecoder decodeIntegerForKey:qosTierKey];
-    _clockSnapshot = [aDecoder decodeObjectOfClass:[GDTCORClock class] forKey:clockSnapshotKey];
-    NSURL *fileURL = [aDecoder decodeObjectOfClass:[NSURL class] forKey:fileURLKey];
-    if (fileURL) {
-      _GDTFilePath = [fileURL lastPathComponent];
-    } else {
-      _GDTFilePath = [aDecoder decodeObjectOfClass:[NSString class] forKey:kGDTFilePathKey];
-    }
-    _customBytes = [aDecoder decodeObjectOfClass:[NSData class] forKey:kCustomDataKey];
-  }
-  return self;
-}
-
-- (id)initWithCoderForStoredEventBackwardCompatibility:(NSCoder *)aDecoder
-                                               fileURL:(NSURL *)fileURL {
-  NSString *mappingID = [aDecoder decodeObjectOfClass:[NSString class]
-                                               forKey:kStoredEventMappingIDKey];
-  NSInteger target = [[aDecoder decodeObjectOfClass:[NSNumber class]
-                                             forKey:kStoredEventTargetKey] integerValue];
-  self = [self initWithMappingID:mappingID target:target];
-  if (self) {
-    _eventID = [aDecoder decodeObjectOfClass:[NSNumber class] forKey:eventIDKey];
-    if (_eventID == nil) {
-      _eventID = [GDTCOREvent nextEventID];
-    }
-    _qosTier = [[aDecoder decodeObjectOfClass:[NSNumber class]
-                                       forKey:kStoredEventQosTierKey] integerValue];
-    _clockSnapshot = [aDecoder decodeObjectOfClass:[GDTCORClock class]
-                                            forKey:kStoredEventClockSnapshotKey];
-    if (fileURL) {
-      _GDTFilePath = [fileURL lastPathComponent];
-    } else {
-      _GDTFilePath = [aDecoder decodeObjectOfClass:[NSString class] forKey:kGDTFilePathKey];
-    }
-    _customBytes = [aDecoder decodeObjectOfClass:[NSData class] forKey:kCustomDataKey];
-  }
-  return self;
-}
-
-- (void)encodeWithCoder:(NSCoder *)aCoder {
-  [aCoder encodeObject:_eventID forKey:eventIDKey];
-  [aCoder encodeObject:_mappingID forKey:mappingIDKey];
-  [aCoder encodeInteger:_target forKey:targetKey];
-  [aCoder encodeInteger:_qosTier forKey:qosTierKey];
-  [aCoder encodeObject:_clockSnapshot forKey:clockSnapshotKey];
-  [aCoder encodeObject:_GDTFilePath forKey:kGDTFilePathKey];
-  [aCoder encodeObject:_customBytes forKey:kCustomDataKey];
-}
-
-@end
diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORFlatFileStorage.m b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORFlatFileStorage.m
deleted file mode 100644
index 224fb58..0000000
--- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORFlatFileStorage.m
+++ /dev/null
@@ -1,342 +0,0 @@
-/*
- * Copyright 2018 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "GDTCORLibrary/Private/GDTCORFlatFileStorage.h"
-
-#import <GoogleDataTransport/GDTCORAssert.h>
-#import <GoogleDataTransport/GDTCORConsoleLogger.h>
-#import <GoogleDataTransport/GDTCOREvent.h>
-#import <GoogleDataTransport/GDTCORLifecycle.h>
-#import <GoogleDataTransport/GDTCORPrioritizer.h>
-
-#import "GDTCORLibrary/Private/GDTCOREvent_Private.h"
-#import "GDTCORLibrary/Private/GDTCORRegistrar_Private.h"
-#import "GDTCORLibrary/Private/GDTCORUploadCoordinator.h"
-
-@implementation GDTCORFlatFileStorage
-
-+ (void)load {
-  [[GDTCORRegistrar sharedInstance] registerStorage:[self sharedInstance] target:kGDTCORTargetCCT];
-  [[GDTCORRegistrar sharedInstance] registerStorage:[self sharedInstance] target:kGDTCORTargetFLL];
-  [[GDTCORRegistrar sharedInstance] registerStorage:[self sharedInstance] target:kGDTCORTargetCSH];
-
-  // Sets a global translation mapping to decode GDTCORStoredEvent objects encoded as instances of
-  // GDTCOREvent instead. Then we do the same thing with GDTCORStorage. This must be done in load
-  // because there are no direct references to this class and the NSCoding methods won't be called
-  // unless the class name is mapped early.
-  [NSKeyedUnarchiver setClass:[GDTCOREvent class] forClassName:@"GDTCORStoredEvent"];
-  [NSKeyedUnarchiver setClass:[GDTCORFlatFileStorage class] forClassName:@"GDTCORStorage"];
-}
-
-+ (NSString *)archivePath {
-  static NSString *archivePath;
-  static dispatch_once_t onceToken;
-  dispatch_once(&onceToken, ^{
-    archivePath =
-        [GDTCORRootDirectory() URLByAppendingPathComponent:@"GDTCORFlatFileStorageArchive"].path;
-  });
-  return archivePath;
-}
-
-+ (instancetype)sharedInstance {
-  static GDTCORFlatFileStorage *sharedStorage;
-  static dispatch_once_t onceToken;
-  dispatch_once(&onceToken, ^{
-    sharedStorage = [[GDTCORFlatFileStorage alloc] init];
-  });
-  return sharedStorage;
-}
-
-- (instancetype)init {
-  self = [super init];
-  if (self) {
-    _storageQueue =
-        dispatch_queue_create("com.google.GDTCORFlatFileStorage", DISPATCH_QUEUE_SERIAL);
-    _targetToEventSet = [[NSMutableDictionary alloc] init];
-    _storedEvents = [[NSMutableDictionary alloc] init];
-    _uploadCoordinator = [GDTCORUploadCoordinator sharedInstance];
-  }
-  return self;
-}
-
-- (void)storeEvent:(GDTCOREvent *)event
-        onComplete:(void (^_Nullable)(BOOL wasWritten, NSError *_Nullable error))completion {
-  GDTCORLogDebug(@"Saving event: %@", event);
-  if (event == nil) {
-    GDTCORLogDebug(@"%@", @"The event was nil, so it was not saved.");
-    return;
-  }
-  BOOL hadOriginalCompletion = completion != nil;
-  if (!completion) {
-    completion = ^(BOOL wasWritten, NSError *_Nullable error) {
-      GDTCORLogDebug(@"event %@ stored. success:%@ error:%@", event, wasWritten ? @"YES" : @"NO",
-                     error);
-    };
-  }
-
-  __block GDTCORBackgroundIdentifier bgID = GDTCORBackgroundIdentifierInvalid;
-  bgID = [[GDTCORApplication sharedApplication]
-      beginBackgroundTaskWithName:@"GDTStorage"
-                expirationHandler:^{
-                  // End the background task if it's still valid.
-                  [[GDTCORApplication sharedApplication] endBackgroundTask:bgID];
-                  bgID = GDTCORBackgroundIdentifierInvalid;
-                }];
-
-  dispatch_async(_storageQueue, ^{
-    // Check that a backend implementation is available for this target.
-    NSInteger target = event.target;
-
-    // Check that a prioritizer is available for this target.
-    id<GDTCORPrioritizer> prioritizer =
-        [GDTCORRegistrar sharedInstance].targetToPrioritizer[@(target)];
-    GDTCORAssert(prioritizer, @"There's no prioritizer registered for the given target. Are you "
-                              @"sure you've added the support library for the backend you need?");
-
-    // Write the transport bytes to disk, get a filename.
-    GDTCORAssert([event.dataObject transportBytes],
-                 @"The event should have been serialized to bytes");
-    NSError *error = nil;
-    NSURL *eventFile = [self saveEventBytesToDisk:event eventHash:event.hash error:&error];
-    if (!eventFile || error) {
-      GDTCORLogError(GDTCORMCEFileWriteError, @"Event failed to save to disk: %@", error);
-      completion(NO, error);
-      return;
-    } else {
-      GDTCORLogDebug(@"Event saved to disk: %@", eventFile);
-      completion(YES, error);
-    }
-
-    // Add event to tracking collections.
-    [self addEventToTrackingCollections:event];
-
-    // Have the prioritizer prioritize the event and save state if there was an onComplete block.
-    [prioritizer prioritizeEvent:event];
-    if (hadOriginalCompletion && [prioritizer respondsToSelector:@selector(saveState)]) {
-      [prioritizer saveState];
-      GDTCORLogDebug(@"Prioritizer %@ has saved state due to an event's onComplete block.",
-                     prioritizer);
-    }
-
-    // Check the QoS, if it's high priority, notify the target that it has a high priority event.
-    if (event.qosTier == GDTCOREventQoSFast) {
-      [self.uploadCoordinator forceUploadForTarget:target];
-    }
-
-    // Write state to disk if there was an onComplete block or if we're in the background.
-    if (hadOriginalCompletion || [[GDTCORApplication sharedApplication] isRunningInBackground]) {
-      if (hadOriginalCompletion) {
-        GDTCORLogDebug(@"%@",
-                       @"Saving flat file storage state because a completion block was passed.");
-      } else {
-        GDTCORLogDebug(
-            @"%@", @"Saving flat file storage state because the app is running in the background");
-      }
-      NSError *error;
-      GDTCOREncodeArchive(self, [GDTCORFlatFileStorage archivePath], &error);
-      if (error) {
-        GDTCORLogDebug(@"Serializing GDTCORFlatFileStorage to an archive failed: %@", error);
-      }
-    }
-
-    // Cancel or end the associated background task if it's still valid.
-    [[GDTCORApplication sharedApplication] endBackgroundTask:bgID];
-    bgID = GDTCORBackgroundIdentifierInvalid;
-    GDTCORLogDebug(@"Event %@ is stored. There are %ld events stored on disk", event,
-                   (unsigned long)self->_storedEvents.count);
-  });
-}
-
-- (void)removeEvents:(NSSet<NSNumber *> *)eventIDs {
-  NSSet<NSNumber *> *eventsToRemove = [eventIDs copy];
-  dispatch_async(_storageQueue, ^{
-    for (NSNumber *eventID in eventsToRemove) {
-      // Remove from disk, first and foremost.
-      GDTCOREvent *event = self->_storedEvents[eventID];
-      if (event) {
-        NSError *error;
-        if (event.fileURL) {
-          NSURL *fileURL = event.fileURL;
-          BOOL result = [[NSFileManager defaultManager] removeItemAtPath:fileURL.path error:&error];
-          if (!result || error) {
-            GDTCORLogWarning(GDTCORMCWFileReadError,
-                             @"There was an error removing an event file: %@", error);
-          } else {
-            GDTCORLogDebug(@"Removed event from disk: %@", fileURL);
-          }
-        }
-
-        // Remove from the tracking collections.
-        [self.storedEvents removeObjectForKey:event.eventID];
-        [self.targetToEventSet[@(event.target)] removeObject:event];
-      }
-    }
-  });
-}
-
-#pragma mark - Private helper methods
-
-/** Saves the event's dataObject to a file using NSData mechanisms.
- *
- * @note This method should only be called from a method within a block on _storageQueue to maintain
- * thread safety.
- *
- * @param event The event.
- * @param eventHash The hash value of the event.
- * @return The filename
- */
-- (NSURL *)saveEventBytesToDisk:(GDTCOREvent *)event
-                      eventHash:(NSUInteger)eventHash
-                          error:(NSError **)error {
-  NSString *eventFileName = [NSString stringWithFormat:@"event-%lu", (unsigned long)eventHash];
-  NSError *writingError;
-  [event writeToGDTPath:eventFileName error:&writingError];
-  if (writingError) {
-    GDTCORLogDebug(@"There was an error saving an event to disk: %@", writingError);
-  }
-  return event.fileURL;
-}
-
-/** Adds the event to internal tracking collections.
- *
- * @note This method should only be called from a method within a block on _storageQueue to maintain
- * thread safety.
- *
- * @param event The event to track.
- */
-- (void)addEventToTrackingCollections:(GDTCOREvent *)event {
-  _storedEvents[event.eventID] = event;
-  NSNumber *target = @(event.target);
-  NSMutableSet<GDTCOREvent *> *events = self.targetToEventSet[target];
-  events = events ? events : [[NSMutableSet alloc] init];
-  [events addObject:event];
-  _targetToEventSet[target] = events;
-}
-
-#pragma mark - GDTCORLifecycleProtocol
-
-- (void)appWillForeground:(GDTCORApplication *)app {
-  dispatch_async(_storageQueue, ^{
-    NSError *error;
-    GDTCORDecodeArchive([GDTCORFlatFileStorage class], [GDTCORFlatFileStorage archivePath], nil,
-                        &error);
-    if (error) {
-      GDTCORLogDebug(@"Deserializing GDTCORFlatFileStorage from an archive failed: %@", error);
-    }
-  });
-}
-
-- (void)appWillBackground:(GDTCORApplication *)app {
-  dispatch_async(_storageQueue, ^{
-    // Immediately request a background task to run until the end of the current queue of work, and
-    // cancel it once the work is done.
-    __block GDTCORBackgroundIdentifier bgID =
-        [app beginBackgroundTaskWithName:@"GDTStorage"
-                       expirationHandler:^{
-                         [app endBackgroundTask:bgID];
-                         bgID = GDTCORBackgroundIdentifierInvalid;
-                       }];
-    NSError *error;
-    GDTCOREncodeArchive(self, [GDTCORFlatFileStorage archivePath], &error);
-    if (error) {
-      GDTCORLogDebug(@"Serializing GDTCORFlatFileStorage to an archive failed: %@", error);
-    } else {
-      GDTCORLogDebug(@"Serialized GDTCORFlatFileStorage to %@",
-                     [GDTCORFlatFileStorage archivePath]);
-    }
-
-    // End the background task if it's still valid.
-    [app endBackgroundTask:bgID];
-    bgID = GDTCORBackgroundIdentifierInvalid;
-  });
-}
-
-- (void)appWillTerminate:(GDTCORApplication *)application {
-  dispatch_sync(_storageQueue, ^{
-    NSError *error;
-    GDTCOREncodeArchive(self, [GDTCORFlatFileStorage archivePath], &error);
-    if (error) {
-      GDTCORLogDebug(@"Serializing GDTCORFlatFileStorage to an archive failed: %@", error);
-    } else {
-      GDTCORLogDebug(@"Serialized GDTCORFlatFileStorage to %@",
-                     [GDTCORFlatFileStorage archivePath]);
-    }
-  });
-}
-
-#pragma mark - NSSecureCoding
-
-/** The NSKeyedCoder key for the storedEvents property. */
-static NSString *const kGDTCORFlatFileStorageStoredEventsKey = @"GDTCORStorageStoredEventsKey";
-
-/** The NSKeyedCoder key for the targetToEventSet property. */
-static NSString *const kGDTCORFlatFileStorageTargetToEventSetKey =
-    @"GDTCORStorageTargetToEventSetKey";
-
-/** The NSKeyedCoder key for the uploadCoordinator property. */
-static NSString *const kGDTCORFlatFileStorageUploadCoordinatorKey =
-    @"GDTCORStorageUploadCoordinatorKey";
-
-+ (BOOL)supportsSecureCoding {
-  return YES;
-}
-
-- (instancetype)initWithCoder:(NSCoder *)aDecoder {
-  // Create the singleton and populate its ivars.
-  GDTCORFlatFileStorage *sharedInstance = [self.class sharedInstance];
-  NSSet *classes = [NSSet setWithObjects:[NSMutableOrderedSet class], [NSMutableDictionary class],
-                                         [GDTCOREvent class], nil];
-  id storedEvents = [aDecoder decodeObjectOfClasses:classes
-                                             forKey:kGDTCORFlatFileStorageStoredEventsKey];
-  NSMutableDictionary<NSNumber *, GDTCOREvent *> *events = [[NSMutableDictionary alloc] init];
-  if ([storedEvents isKindOfClass:[NSMutableOrderedSet class]]) {
-    [(NSMutableOrderedSet *)storedEvents
-        enumerateObjectsUsingBlock:^(GDTCOREvent *_Nonnull obj, NSUInteger idx,
-                                     BOOL *_Nonnull stop) {
-          events[obj.eventID] = obj;
-        }];
-  } else if ([storedEvents isKindOfClass:[NSMutableDictionary class]]) {
-    events = (NSMutableDictionary *)storedEvents;
-  }
-  sharedInstance->_storedEvents = events;
-  classes = [NSSet
-      setWithObjects:[NSMutableDictionary class], [NSMutableSet class], [GDTCOREvent class], nil];
-  sharedInstance->_targetToEventSet =
-      [aDecoder decodeObjectOfClasses:classes forKey:kGDTCORFlatFileStorageTargetToEventSetKey];
-  sharedInstance->_uploadCoordinator =
-      [aDecoder decodeObjectOfClass:[GDTCORUploadCoordinator class]
-                             forKey:kGDTCORFlatFileStorageUploadCoordinatorKey];
-  return sharedInstance;
-}
-
-- (void)encodeWithCoder:(NSCoder *)aCoder {
-  GDTCORFlatFileStorage *sharedInstance = [self.class sharedInstance];
-  NSMutableDictionary<NSNumber *, GDTCOREvent *> *storedEvents = sharedInstance->_storedEvents;
-  if (storedEvents) {
-    [aCoder encodeObject:storedEvents forKey:kGDTCORFlatFileStorageStoredEventsKey];
-  }
-  NSMutableDictionary<NSNumber *, NSMutableSet<GDTCOREvent *> *> *targetToEventSet =
-      sharedInstance->_targetToEventSet;
-  if (targetToEventSet) {
-    [aCoder encodeObject:targetToEventSet forKey:kGDTCORFlatFileStorageTargetToEventSetKey];
-  }
-  GDTCORUploadCoordinator *uploadCoordinator = sharedInstance->_uploadCoordinator;
-  if (uploadCoordinator) {
-    [aCoder encodeObject:uploadCoordinator forKey:kGDTCORFlatFileStorageUploadCoordinatorKey];
-  }
-}
-
-@end
diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORLifecycle.m b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORLifecycle.m
deleted file mode 100644
index 9228c34..0000000
--- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORLifecycle.m
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "GDTCORLibrary/Public/GDTCORLifecycle.h"
-
-#import <GoogleDataTransport/GDTCORConsoleLogger.h>
-#import <GoogleDataTransport/GDTCOREvent.h>
-
-#import "GDTCORLibrary/Private/GDTCORRegistrar_Private.h"
-#import "GDTCORLibrary/Private/GDTCORTransformer_Private.h"
-#import "GDTCORLibrary/Private/GDTCORUploadCoordinator.h"
-
-@implementation GDTCORLifecycle
-
-+ (void)load {
-  [self sharedInstance];
-}
-
-/** Creates/returns the singleton instance of this class.
- *
- * @return The singleton instance of this class.
- */
-+ (instancetype)sharedInstance {
-  static GDTCORLifecycle *sharedInstance;
-  static dispatch_once_t onceToken;
-  dispatch_once(&onceToken, ^{
-    sharedInstance = [[GDTCORLifecycle alloc] init];
-  });
-  return sharedInstance;
-}
-
-- (instancetype)init {
-  self = [super init];
-  if (self) {
-    NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
-    [notificationCenter addObserver:self
-                           selector:@selector(applicationDidEnterBackground:)
-                               name:kGDTCORApplicationDidEnterBackgroundNotification
-                             object:nil];
-    [notificationCenter addObserver:self
-                           selector:@selector(applicationWillEnterForeground:)
-                               name:kGDTCORApplicationWillEnterForegroundNotification
-                             object:nil];
-
-    NSString *name = kGDTCORApplicationWillTerminateNotification;
-    [notificationCenter addObserver:self
-                           selector:@selector(applicationWillTerminate:)
-                               name:name
-                             object:nil];
-  }
-  return self;
-}
-
-- (void)dealloc {
-  [[NSNotificationCenter defaultCenter] removeObserver:self];
-}
-
-- (void)applicationDidEnterBackground:(NSNotification *)notification {
-  GDTCORApplication *application = [GDTCORApplication sharedApplication];
-  if ([[GDTCORTransformer sharedInstance] respondsToSelector:@selector(appWillBackground:)]) {
-    GDTCORLogDebug(@"%@", @"Signaling GDTCORTransformer that the app is backgrounding.");
-    [[GDTCORTransformer sharedInstance] appWillBackground:application];
-  }
-  if ([[GDTCORUploadCoordinator sharedInstance] respondsToSelector:@selector(appWillBackground:)]) {
-    GDTCORLogDebug(@"%@", @"Signaling GDTCORUploadCoordinator that the app is backgrounding.");
-    [[GDTCORUploadCoordinator sharedInstance] appWillBackground:application];
-  }
-  if ([[GDTCORRegistrar sharedInstance] respondsToSelector:@selector(appWillBackground:)]) {
-    GDTCORLogDebug(@"%@", @"Signaling GDTCORRegistrar that the app is backgrounding.");
-    [[GDTCORRegistrar sharedInstance] appWillBackground:application];
-  }
-}
-
-- (void)applicationWillEnterForeground:(NSNotification *)notification {
-  GDTCORApplication *application = [GDTCORApplication sharedApplication];
-  if ([[GDTCORTransformer sharedInstance] respondsToSelector:@selector(appWillForeground:)]) {
-    GDTCORLogDebug(@"%@", @"Signaling GDTCORTransformer that the app is foregrounding.");
-    [[GDTCORTransformer sharedInstance] appWillForeground:application];
-  }
-  if ([[GDTCORUploadCoordinator sharedInstance] respondsToSelector:@selector(appWillForeground:)]) {
-    GDTCORLogDebug(@"%@", @"Signaling GDTCORUploadCoordinator that the app is foregrounding.");
-    [[GDTCORUploadCoordinator sharedInstance] appWillForeground:application];
-  }
-  if ([[GDTCORRegistrar sharedInstance] respondsToSelector:@selector(appWillForeground:)]) {
-    GDTCORLogDebug(@"%@", @"Signaling GDTCORRegistrar that the app is foregrounding.");
-    [[GDTCORRegistrar sharedInstance] appWillForeground:application];
-  }
-}
-
-- (void)applicationWillTerminate:(NSNotification *)notification {
-  GDTCORApplication *application = [GDTCORApplication sharedApplication];
-  if ([[GDTCORTransformer sharedInstance] respondsToSelector:@selector(appWillTerminate:)]) {
-    GDTCORLogDebug(@"%@", @"Signaling GDTCORTransformer that the app is terminating.");
-    [[GDTCORTransformer sharedInstance] appWillTerminate:application];
-  }
-  if ([[GDTCORUploadCoordinator sharedInstance] respondsToSelector:@selector(appWillTerminate:)]) {
-    GDTCORLogDebug(@"%@", @"Signaling GDTCORUploadCoordinator that the app is terminating.");
-    [[GDTCORUploadCoordinator sharedInstance] appWillTerminate:application];
-  }
-  if ([[GDTCORRegistrar sharedInstance] respondsToSelector:@selector(appWillTerminate:)]) {
-    GDTCORLogDebug(@"%@", @"Signaling GDTCORRegistrar that the app is terminating.");
-    [[GDTCORRegistrar sharedInstance] appWillTerminate:application];
-  }
-}
-
-@end
diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORPlatform.m b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORPlatform.m
deleted file mode 100644
index 151d9b1..0000000
--- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORPlatform.m
+++ /dev/null
@@ -1,407 +0,0 @@
-/*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <GoogleDataTransport/GDTCORPlatform.h>
-
-#import <GoogleDataTransport/GDTCORAssert.h>
-#import <GoogleDataTransport/GDTCORConsoleLogger.h>
-#import <GoogleDataTransport/GDTCORReachability.h>
-
-#import "GDTCORLibrary/Private/GDTCORRegistrar_Private.h"
-
-#ifdef GDTCOR_VERSION
-#define STR(x) STR_EXPAND(x)
-#define STR_EXPAND(x) #x
-NSString *const kGDTCORVersion = @STR(GDTCOR_VERSION);
-#else
-NSString *const kGDTCORVersion = @"Unknown";
-#endif  // GDTCOR_VERSION
-
-const GDTCORBackgroundIdentifier GDTCORBackgroundIdentifierInvalid = 0;
-
-NSString *const kGDTCORApplicationDidEnterBackgroundNotification =
-    @"GDTCORApplicationDidEnterBackgroundNotification";
-
-NSString *const kGDTCORApplicationWillEnterForegroundNotification =
-    @"GDTCORApplicationWillEnterForegroundNotification";
-
-NSString *const kGDTCORApplicationWillTerminateNotification =
-    @"GDTCORApplicationWillTerminateNotification";
-
-NSURL *GDTCORRootDirectory(void) {
-  static NSURL *GDTPath;
-  static dispatch_once_t onceToken;
-  dispatch_once(&onceToken, ^{
-    NSString *cachePath =
-        NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
-    GDTPath =
-        [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/google-sdks-events", cachePath]];
-    GDTCORLogDebug(@"GDT's state will be saved to: %@", GDTPath);
-    if (![[NSFileManager defaultManager] fileExistsAtPath:GDTPath.path]) {
-      NSError *error;
-      [[NSFileManager defaultManager] createDirectoryAtPath:GDTPath.path
-                                withIntermediateDirectories:YES
-                                                 attributes:nil
-                                                      error:&error];
-      GDTCORAssert(error == nil, @"There was an error creating GDT's path");
-    }
-  });
-  return GDTPath;
-}
-
-#if !TARGET_OS_WATCH
-BOOL GDTCORReachabilityFlagsContainWWAN(SCNetworkReachabilityFlags flags) {
-#if TARGET_OS_IOS
-  return (flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN;
-#else
-  return NO;
-#endif  // TARGET_OS_IOS
-}
-#endif  // !TARGET_OS_WATCH
-
-GDTCORNetworkType GDTCORNetworkTypeMessage() {
-#if !TARGET_OS_WATCH
-  SCNetworkReachabilityFlags reachabilityFlags = [GDTCORReachability currentFlags];
-  if ((reachabilityFlags & kSCNetworkReachabilityFlagsReachable) ==
-      kSCNetworkReachabilityFlagsReachable) {
-    if (GDTCORReachabilityFlagsContainWWAN(reachabilityFlags)) {
-      return GDTCORNetworkTypeMobile;
-    } else {
-      return GDTCORNetworkTypeWIFI;
-    }
-  }
-#endif
-  return GDTCORNetworkTypeUNKNOWN;
-}
-
-GDTCORNetworkMobileSubtype GDTCORNetworkMobileSubTypeMessage() {
-#if TARGET_OS_IOS
-  static NSDictionary<NSString *, NSNumber *> *CTRadioAccessTechnologyToNetworkSubTypeMessage;
-  static CTTelephonyNetworkInfo *networkInfo;
-  static dispatch_once_t onceToken;
-  dispatch_once(&onceToken, ^{
-    CTRadioAccessTechnologyToNetworkSubTypeMessage = @{
-      CTRadioAccessTechnologyGPRS : @(GDTCORNetworkMobileSubtypeGPRS),
-      CTRadioAccessTechnologyEdge : @(GDTCORNetworkMobileSubtypeEdge),
-      CTRadioAccessTechnologyWCDMA : @(GDTCORNetworkMobileSubtypeWCDMA),
-      CTRadioAccessTechnologyHSDPA : @(GDTCORNetworkMobileSubtypeHSDPA),
-      CTRadioAccessTechnologyHSUPA : @(GDTCORNetworkMobileSubtypeHSUPA),
-      CTRadioAccessTechnologyCDMA1x : @(GDTCORNetworkMobileSubtypeCDMA1x),
-      CTRadioAccessTechnologyCDMAEVDORev0 : @(GDTCORNetworkMobileSubtypeCDMAEVDORev0),
-      CTRadioAccessTechnologyCDMAEVDORevA : @(GDTCORNetworkMobileSubtypeCDMAEVDORevA),
-      CTRadioAccessTechnologyCDMAEVDORevB : @(GDTCORNetworkMobileSubtypeCDMAEVDORevB),
-      CTRadioAccessTechnologyeHRPD : @(GDTCORNetworkMobileSubtypeHRPD),
-      CTRadioAccessTechnologyLTE : @(GDTCORNetworkMobileSubtypeLTE),
-    };
-    networkInfo = [[CTTelephonyNetworkInfo alloc] init];
-  });
-  NSString *networkCurrentRadioAccessTechnology;
-#if TARGET_OS_MACCATALYST
-  NSDictionary<NSString *, NSString *> *networkCurrentRadioAccessTechnologyDict =
-      networkInfo.serviceCurrentRadioAccessTechnology;
-  if (networkCurrentRadioAccessTechnologyDict.count) {
-    networkCurrentRadioAccessTechnology = networkCurrentRadioAccessTechnologyDict.allValues[0];
-  }
-#else  // TARGET_OS_MACCATALYST
-#if defined(__IPHONE_12_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 120000
-  if (@available(iOS 12.0, *)) {
-    NSDictionary<NSString *, NSString *> *networkCurrentRadioAccessTechnologyDict =
-        networkInfo.serviceCurrentRadioAccessTechnology;
-    if (networkCurrentRadioAccessTechnologyDict.count) {
-      // In iOS 12, multiple radio technologies can be captured. We prefer not particular radio
-      // tech to another, so we'll just return the first value in the dictionary.
-      networkCurrentRadioAccessTechnology = networkCurrentRadioAccessTechnologyDict.allValues[0];
-    }
-  } else {
-#else   // defined(__IPHONE_12_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 120000
-  networkCurrentRadioAccessTechnology = networkInfo.currentRadioAccessTechnology;
-#endif  // // defined(__IPHONE_12_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 120000
-  }
-#endif  // TARGET_OS_MACCATALYST
-  if (networkCurrentRadioAccessTechnology) {
-    NSNumber *networkMobileSubtype =
-        CTRadioAccessTechnologyToNetworkSubTypeMessage[networkCurrentRadioAccessTechnology];
-    return networkMobileSubtype.intValue;
-  } else {
-    return GDTCORNetworkMobileSubtypeUNKNOWN;
-  }
-#else
-  return GDTCORNetworkMobileSubtypeUNKNOWN;
-#endif
-}
-
-NSData *_Nullable GDTCOREncodeArchive(id<NSSecureCoding> obj,
-                                      NSString *archivePath,
-                                      NSError *_Nullable *error) {
-  NSData *resultData;
-#if (defined(__IPHONE_11_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 110000) || \
-    (defined(__MAC_10_13) && MAC_OS_X_VERSION_MAX_ALLOWED >= 101300) ||      \
-    (defined(__TVOS_11_0) && __TV_OS_VERSION_MAX_ALLOWED >= 110000) ||       \
-    (defined(__WATCHOS_4_0) && __WATCH_OS_VERSION_MAX_ALLOWED >= 040000) ||  \
-    (defined(TARGET_OS_MACCATALYST) && TARGET_OS_MACCATALYST)
-  if (@available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4, *)) {
-    resultData = [NSKeyedArchiver archivedDataWithRootObject:obj
-                                       requiringSecureCoding:YES
-                                                       error:error];
-    if (*error) {
-      GDTCORLogDebug(@"Encoding an object failed: %@", *error);
-      return nil;
-    }
-    if (archivePath) {
-      BOOL result = [resultData writeToFile:archivePath options:NSDataWritingAtomic error:error];
-      if (result == NO || *error) {
-        GDTCORLogDebug(@"Attempt to write archive failed: URL:%@ error:%@", archivePath, *error);
-      } else {
-        GDTCORLogDebug(@"Writing archive succeeded: %@", archivePath);
-      }
-    }
-  } else {
-#endif
-    BOOL result = NO;
-    @try {
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
-      resultData = [NSKeyedArchiver archivedDataWithRootObject:obj];
-#pragma clang diagnostic pop
-      if (archivePath) {
-        result = [resultData writeToFile:archivePath options:NSDataWritingAtomic error:error];
-        if (result == NO || *error) {
-          GDTCORLogDebug(@"Attempt to write archive failed: URL:%@ error:%@", archivePath, *error);
-        } else {
-          GDTCORLogDebug(@"Writing archive succeeded: %@", archivePath);
-        }
-      }
-    } @catch (NSException *exception) {
-      NSString *errorString =
-          [NSString stringWithFormat:@"An exception was thrown during encoding: %@", exception];
-      *error = [NSError errorWithDomain:NSCocoaErrorDomain
-                                   code:-1
-                               userInfo:@{NSLocalizedFailureReasonErrorKey : errorString}];
-    }
-    GDTCORLogDebug(@"Attempt to write archive. successful:%@ URL:%@ error:%@",
-                   result ? @"YES" : @"NO", archivePath, *error);
-  }
-  return resultData;
-}
-
-id<NSSecureCoding> _Nullable GDTCORDecodeArchive(Class archiveClass,
-                                                 NSString *_Nullable archivePath,
-                                                 NSData *_Nullable archiveData,
-                                                 NSError *_Nullable *error) {
-  id<NSSecureCoding> unarchivedObject = nil;
-#if (defined(__IPHONE_11_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 110000) || \
-    (defined(__MAC_10_13) && MAC_OS_X_VERSION_MAX_ALLOWED >= 101300) ||      \
-    (defined(__TVOS_11_0) && __TV_OS_VERSION_MAX_ALLOWED >= 110000) ||       \
-    (defined(__WATCHOS_4_0) && __WATCH_OS_VERSION_MAX_ALLOWED >= 040000) ||  \
-    (defined(TARGET_OS_MACCATALYST) && TARGET_OS_MACCATALYST)
-  if (@available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4, *)) {
-    NSData *data = archiveData ? archiveData : [NSData dataWithContentsOfFile:archivePath];
-    if (data) {
-      unarchivedObject = [NSKeyedUnarchiver unarchivedObjectOfClass:archiveClass
-                                                           fromData:data
-                                                              error:error];
-    }
-  } else {
-#endif
-    @try {
-      NSData *archivedData =
-          archiveData ? archiveData : [NSData dataWithContentsOfFile:archivePath];
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
-      unarchivedObject = [NSKeyedUnarchiver unarchiveObjectWithData:archivedData];
-#pragma clang diagnostic pop
-    } @catch (NSException *exception) {
-      NSString *errorString =
-          [NSString stringWithFormat:@"An exception was thrown during encoding: %@", exception];
-      *error = [NSError errorWithDomain:NSCocoaErrorDomain
-                                   code:-1
-                               userInfo:@{NSLocalizedFailureReasonErrorKey : errorString}];
-    }
-  }
-  return unarchivedObject;
-}
-
-@interface GDTCORApplication ()
-/**
- Private flag to match the existing `readonly` public flag. This will be accurate for all platforms,
- since we handle each platform's lifecycle notifications separately.
- */
-@property(atomic, readwrite) BOOL isRunningInBackground;
-
-@end
-
-@implementation GDTCORApplication
-
-+ (void)load {
-  GDTCORLogDebug(
-      @"%@", @"GDT is initializing. Please note that if you quit the app via the "
-              "debugger and not through a lifecycle event, event data will remain on disk but "
-              "storage won't have a reference to them since the singleton wasn't saved to disk.");
-#if TARGET_OS_IOS || TARGET_OS_TV
-  // If this asserts, please file a bug at https://github.com/firebase/firebase-ios-sdk/issues.
-  GDTCORFatalAssert(
-      GDTCORBackgroundIdentifierInvalid == UIBackgroundTaskInvalid,
-      @"GDTCORBackgroundIdentifierInvalid and UIBackgroundTaskInvalid should be the same.");
-#endif
-  [self sharedApplication];
-}
-
-+ (nullable GDTCORApplication *)sharedApplication {
-  static GDTCORApplication *application;
-  static dispatch_once_t onceToken;
-  dispatch_once(&onceToken, ^{
-    application = [[GDTCORApplication alloc] init];
-  });
-  return application;
-}
-
-- (instancetype)init {
-  self = [super init];
-  if (self) {
-    // This class will be instantiated in the foreground.
-    _isRunningInBackground = NO;
-
-#if TARGET_OS_IOS || TARGET_OS_TV
-    NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
-    [notificationCenter addObserver:self
-                           selector:@selector(iOSApplicationDidEnterBackground:)
-                               name:UIApplicationDidEnterBackgroundNotification
-                             object:nil];
-    [notificationCenter addObserver:self
-                           selector:@selector(iOSApplicationWillEnterForeground:)
-                               name:UIApplicationWillEnterForegroundNotification
-                             object:nil];
-
-    NSString *name = UIApplicationWillTerminateNotification;
-    [notificationCenter addObserver:self
-                           selector:@selector(iOSApplicationWillTerminate:)
-                               name:name
-                             object:nil];
-
-#if defined(__IPHONE_13_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
-    if (@available(iOS 13, tvOS 13.0, *)) {
-      [notificationCenter addObserver:self
-                             selector:@selector(iOSApplicationWillEnterForeground:)
-                                 name:UISceneWillEnterForegroundNotification
-                               object:nil];
-      [notificationCenter addObserver:self
-                             selector:@selector(iOSApplicationDidEnterBackground:)
-                                 name:UISceneWillDeactivateNotification
-                               object:nil];
-    }
-#endif  // defined(__IPHONE_13_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
-
-#elif TARGET_OS_OSX
-    NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
-    [notificationCenter addObserver:self
-                           selector:@selector(macOSApplicationWillTerminate:)
-                               name:NSApplicationWillTerminateNotification
-                             object:nil];
-#endif  // TARGET_OS_IOS || TARGET_OS_TV
-  }
-  return self;
-}
-
-- (GDTCORBackgroundIdentifier)beginBackgroundTaskWithName:(NSString *)name
-                                        expirationHandler:(void (^)(void))handler {
-  GDTCORBackgroundIdentifier bgID =
-      [[self sharedApplicationForBackgroundTask] beginBackgroundTaskWithName:name
-                                                           expirationHandler:handler];
-#if !NDEBUG
-  if (bgID != GDTCORBackgroundIdentifierInvalid) {
-    GDTCORLogDebug(@"Creating background task with name:%@ bgID:%ld", name, (long)bgID);
-  }
-#endif  // !NDEBUG
-  return bgID;
-}
-
-- (void)endBackgroundTask:(GDTCORBackgroundIdentifier)bgID {
-  if (bgID != GDTCORBackgroundIdentifierInvalid) {
-    GDTCORLogDebug(@"Ending background task with ID:%ld was successful", (long)bgID);
-    [[self sharedApplicationForBackgroundTask] endBackgroundTask:bgID];
-    return;
-  }
-}
-
-#pragma mark - App environment helpers
-
-- (BOOL)isAppExtension {
-#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_WATCH
-  BOOL appExtension = [[[NSBundle mainBundle] bundlePath] hasSuffix:@".appex"];
-  return appExtension;
-#elif TARGET_OS_OSX
-  return NO;
-#endif
-}
-
-/** Returns a UIApplication instance if on the appropriate platform.
- *
- * @return The shared UIApplication if on the appropriate platform.
- */
-#if TARGET_OS_IOS || TARGET_OS_TV
-- (nullable UIApplication *)sharedApplicationForBackgroundTask {
-#else
-- (nullable id)sharedApplicationForBackgroundTask {
-#endif
-  if ([self isAppExtension]) {
-    return nil;
-  }
-  id sharedApplication = nil;
-  Class uiApplicationClass = NSClassFromString(@"UIApplication");
-  if (uiApplicationClass &&
-      [uiApplicationClass respondsToSelector:(NSSelectorFromString(@"sharedApplication"))]) {
-    sharedApplication = [uiApplicationClass sharedApplication];
-  }
-  return sharedApplication;
-}
-
-#pragma mark - UIApplicationDelegate
-
-#if TARGET_OS_IOS || TARGET_OS_TV
-- (void)iOSApplicationDidEnterBackground:(NSNotification *)notif {
-  _isRunningInBackground = YES;
-
-  NSNotificationCenter *notifCenter = [NSNotificationCenter defaultCenter];
-  GDTCORLogDebug(@"%@", @"GDTCORPlatform is sending a notif that the app is backgrounding.");
-  [notifCenter postNotificationName:kGDTCORApplicationDidEnterBackgroundNotification object:nil];
-}
-
-- (void)iOSApplicationWillEnterForeground:(NSNotification *)notif {
-  _isRunningInBackground = NO;
-
-  NSNotificationCenter *notifCenter = [NSNotificationCenter defaultCenter];
-  GDTCORLogDebug(@"%@", @"GDTCORPlatform is sending a notif that the app is foregrounding.");
-  [notifCenter postNotificationName:kGDTCORApplicationWillEnterForegroundNotification object:nil];
-}
-
-- (void)iOSApplicationWillTerminate:(NSNotification *)notif {
-  NSNotificationCenter *notifCenter = [NSNotificationCenter defaultCenter];
-  GDTCORLogDebug(@"%@", @"GDTCORPlatform is sending a notif that the app is terminating.");
-  [notifCenter postNotificationName:kGDTCORApplicationWillTerminateNotification object:nil];
-}
-#endif  // TARGET_OS_IOS || TARGET_OS_TV
-
-#pragma mark - NSApplicationDelegate
-
-#if TARGET_OS_OSX
-- (void)macOSApplicationWillTerminate:(NSNotification *)notif {
-  NSNotificationCenter *notifCenter = [NSNotificationCenter defaultCenter];
-  GDTCORLogDebug(@"%@", @"GDTCORPlatform is sending a notif that the app is terminating.");
-  [notifCenter postNotificationName:kGDTCORApplicationWillTerminateNotification object:nil];
-}
-#endif  // TARGET_OS_OSX
-
-@end
diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORReachability.m b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORReachability.m
deleted file mode 100644
index 3fb4e0d..0000000
--- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORReachability.m
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "GDTCORLibrary/Public/GDTCORReachability.h"
-#import "GDTCORLibrary/Private/GDTCORReachability_Private.h"
-#if !TARGET_OS_WATCH
-
-#import <GoogleDataTransport/GDTCORConsoleLogger.h>
-
-#import <netinet/in.h>
-
-/** Sets the _callbackFlag ivar whenever the network changes.
- *
- * @param reachability The reachability object calling back.
- * @param flags The new flag values.
- * @param info Any data that might be passed in by the callback.
- */
-static void GDTCORReachabilityCallback(SCNetworkReachabilityRef reachability,
-                                       SCNetworkReachabilityFlags flags,
-                                       void *info);
-
-@implementation GDTCORReachability {
-  /** The reachability object. */
-  SCNetworkReachabilityRef _reachabilityRef;
-
-  /** The queue on which callbacks and all work will occur. */
-  dispatch_queue_t _reachabilityQueue;
-
-  /** Flags specified by reachability callbacks. */
-  SCNetworkConnectionFlags _callbackFlags;
-}
-
-+ (void)load {
-  [self sharedInstance];
-}
-
-+ (instancetype)sharedInstance {
-  static GDTCORReachability *sharedInstance;
-  static dispatch_once_t onceToken;
-  dispatch_once(&onceToken, ^{
-    sharedInstance = [[GDTCORReachability alloc] init];
-  });
-  return sharedInstance;
-}
-
-+ (SCNetworkReachabilityFlags)currentFlags {
-  __block SCNetworkReachabilityFlags currentFlags;
-  dispatch_sync([GDTCORReachability sharedInstance] -> _reachabilityQueue, ^{
-    GDTCORReachability *reachability = [GDTCORReachability sharedInstance];
-    currentFlags =
-        reachability->_callbackFlags ? reachability->_callbackFlags : reachability->_flags;
-    GDTCORLogDebug(@"Initial reachability flags determined: %d", currentFlags);
-  });
-  return currentFlags;
-}
-
-- (instancetype)init {
-  self = [super init];
-  if (self) {
-    struct sockaddr_in zeroAddress;
-    bzero(&zeroAddress, sizeof(zeroAddress));
-    zeroAddress.sin_len = sizeof(zeroAddress);
-    zeroAddress.sin_family = AF_INET;
-
-    _reachabilityQueue =
-        dispatch_queue_create("com.google.GDTCORReachability", DISPATCH_QUEUE_SERIAL);
-    _reachabilityRef = SCNetworkReachabilityCreateWithAddress(
-        kCFAllocatorDefault, (const struct sockaddr *)&zeroAddress);
-    Boolean success = SCNetworkReachabilitySetDispatchQueue(_reachabilityRef, _reachabilityQueue);
-    if (!success) {
-      GDTCORLogWarning(GDTCORMCWReachabilityFailed, @"%@", @"The reachability queue wasn't set.");
-    }
-    success = SCNetworkReachabilitySetCallback(_reachabilityRef, GDTCORReachabilityCallback, NULL);
-    if (!success) {
-      GDTCORLogWarning(GDTCORMCWReachabilityFailed, @"%@",
-                       @"The reachability callback wasn't set.");
-    }
-
-    // Get the initial set of flags.
-    dispatch_async(_reachabilityQueue, ^{
-      Boolean valid = SCNetworkReachabilityGetFlags(self->_reachabilityRef, &self->_flags);
-      if (!valid) {
-        GDTCORLogDebug(@"%@", @"Determining reachability failed.");
-        self->_flags = 0;
-      }
-    });
-  }
-  return self;
-}
-
-- (void)setCallbackFlags:(SCNetworkReachabilityFlags)flags {
-  if (_callbackFlags != flags) {
-    self->_callbackFlags = flags;
-  }
-}
-
-@end
-
-static void GDTCORReachabilityCallback(SCNetworkReachabilityRef reachability,
-                                       SCNetworkReachabilityFlags flags,
-                                       void *info) {
-  GDTCORLogDebug(@"Reachability changed, new flags: %d", flags);
-  [[GDTCORReachability sharedInstance] setCallbackFlags:flags];
-}
-
-#endif
diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORRegistrar.m b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORRegistrar.m
deleted file mode 100644
index 536da66..0000000
--- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORRegistrar.m
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * Copyright 2018 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "GDTCORLibrary/Public/GDTCORRegistrar.h"
-#import "GDTCORLibrary/Private/GDTCORRegistrar_Private.h"
-
-#import "GDTCORLibrary/Public/GDTCORConsoleLogger.h"
-
-@implementation GDTCORRegistrar {
-  /** Backing ivar for targetToUploader property. */
-  NSMutableDictionary<NSNumber *, id<GDTCORUploader>> *_targetToUploader;
-
-  /** Backing ivar for targetToPrioritizer property. */
-  NSMutableDictionary<NSNumber *, id<GDTCORPrioritizer>> *_targetToPrioritizer;
-
-  /** Backing ivar for targetToStorage property. */
-  NSMutableDictionary<NSNumber *, id<GDTCORStorageProtocol>> *_targetToStorage;
-}
-
-+ (instancetype)sharedInstance {
-  static GDTCORRegistrar *sharedInstance;
-  static dispatch_once_t onceToken;
-  dispatch_once(&onceToken, ^{
-    sharedInstance = [[GDTCORRegistrar alloc] init];
-  });
-  return sharedInstance;
-}
-
-- (instancetype)init {
-  self = [super init];
-  if (self) {
-    _registrarQueue = dispatch_queue_create("com.google.GDTCORRegistrar", DISPATCH_QUEUE_SERIAL);
-    _targetToPrioritizer = [[NSMutableDictionary alloc] init];
-    _targetToUploader = [[NSMutableDictionary alloc] init];
-    _targetToStorage = [[NSMutableDictionary alloc] init];
-  }
-  return self;
-}
-
-- (void)registerUploader:(id<GDTCORUploader>)backend target:(GDTCORTarget)target {
-  __weak GDTCORRegistrar *weakSelf = self;
-  dispatch_async(_registrarQueue, ^{
-    GDTCORRegistrar *strongSelf = weakSelf;
-    if (strongSelf) {
-      GDTCORLogDebug(@"Registered an uploader: %@ for target:%ld", backend, (long)target);
-      strongSelf->_targetToUploader[@(target)] = backend;
-    }
-  });
-}
-
-- (void)registerStorage:(id<GDTCORStorageProtocol>)storage target:(GDTCORTarget)target {
-  __weak GDTCORRegistrar *weakSelf = self;
-  dispatch_async(_registrarQueue, ^{
-    GDTCORRegistrar *strongSelf = weakSelf;
-    if (strongSelf) {
-      GDTCORLogDebug(@"Registered storage: %@ for target:%ld", storage, (long)target);
-      strongSelf->_targetToStorage[@(target)] = storage;
-    }
-  });
-}
-
-- (void)registerPrioritizer:(id<GDTCORPrioritizer>)prioritizer target:(GDTCORTarget)target {
-  __weak GDTCORRegistrar *weakSelf = self;
-  dispatch_async(_registrarQueue, ^{
-    GDTCORRegistrar *strongSelf = weakSelf;
-    if (strongSelf) {
-      GDTCORLogDebug(@"Registered a prioritizer: %@ for target:%ld", prioritizer, (long)target);
-      strongSelf->_targetToPrioritizer[@(target)] = prioritizer;
-    }
-  });
-}
-
-- (NSMutableDictionary<NSNumber *, id<GDTCORUploader>> *)targetToUploader {
-  __block NSMutableDictionary<NSNumber *, id<GDTCORUploader>> *targetToUploader;
-  __weak GDTCORRegistrar *weakSelf = self;
-  dispatch_sync(_registrarQueue, ^{
-    GDTCORRegistrar *strongSelf = weakSelf;
-    if (strongSelf) {
-      targetToUploader = strongSelf->_targetToUploader;
-    }
-  });
-  return targetToUploader;
-}
-
-- (NSMutableDictionary<NSNumber *, id<GDTCORPrioritizer>> *)targetToPrioritizer {
-  __block NSMutableDictionary<NSNumber *, id<GDTCORPrioritizer>> *targetToPrioritizer;
-  __weak GDTCORRegistrar *weakSelf = self;
-  dispatch_sync(_registrarQueue, ^{
-    GDTCORRegistrar *strongSelf = weakSelf;
-    if (strongSelf) {
-      targetToPrioritizer = strongSelf->_targetToPrioritizer;
-    }
-  });
-  return targetToPrioritizer;
-}
-
-- (NSMutableDictionary<NSNumber *, id<GDTCORStorageProtocol>> *)targetToStorage {
-  __block NSMutableDictionary<NSNumber *, id<GDTCORStorageProtocol>> *targetToStorage;
-  __weak GDTCORRegistrar *weakSelf = self;
-  dispatch_sync(_registrarQueue, ^{
-    GDTCORRegistrar *strongSelf = weakSelf;
-    if (strongSelf) {
-      targetToStorage = strongSelf->_targetToStorage;
-    }
-  });
-  return targetToStorage;
-}
-
-#pragma mark - GDTCORLifecycleProtocol
-
-- (void)appWillBackground:(nonnull GDTCORApplication *)app {
-  NSArray<id<GDTCORUploader>> *uploaders = [self.targetToUploader allValues];
-  for (id<GDTCORUploader> uploader in uploaders) {
-    if ([uploader respondsToSelector:@selector(appWillBackground:)]) {
-      [uploader appWillBackground:app];
-    }
-  }
-  NSArray<id<GDTCORPrioritizer>> *prioritizers = [self.targetToPrioritizer allValues];
-  for (id<GDTCORPrioritizer> prioritizer in prioritizers) {
-    if ([prioritizer respondsToSelector:@selector(appWillBackground:)]) {
-      [prioritizer appWillBackground:app];
-    }
-  }
-  NSArray<id<GDTCORStorageProtocol>> *storages = [self.targetToStorage allValues];
-  for (id<GDTCORStorageProtocol> storage in storages) {
-    if ([storage respondsToSelector:@selector(appWillBackground:)]) {
-      [storage appWillBackground:app];
-    }
-  }
-}
-
-- (void)appWillForeground:(nonnull GDTCORApplication *)app {
-  NSArray<id<GDTCORUploader>> *uploaders = [self.targetToUploader allValues];
-  for (id<GDTCORUploader> uploader in uploaders) {
-    if ([uploader respondsToSelector:@selector(appWillForeground:)]) {
-      [uploader appWillForeground:app];
-    }
-  }
-  NSArray<id<GDTCORPrioritizer>> *prioritizers = [self.targetToPrioritizer allValues];
-  for (id<GDTCORPrioritizer> prioritizer in prioritizers) {
-    if ([prioritizer respondsToSelector:@selector(appWillForeground:)]) {
-      [prioritizer appWillForeground:app];
-    }
-  }
-  NSArray<id<GDTCORStorageProtocol>> *storages = [self.targetToStorage allValues];
-  for (id<GDTCORStorageProtocol> storage in storages) {
-    if ([storage respondsToSelector:@selector(appWillForeground:)]) {
-      [storage appWillForeground:app];
-    }
-  }
-}
-
-- (void)appWillTerminate:(nonnull GDTCORApplication *)app {
-  NSArray<id<GDTCORUploader>> *uploaders = [self.targetToUploader allValues];
-  for (id<GDTCORUploader> uploader in uploaders) {
-    if ([uploader respondsToSelector:@selector(appWillTerminate:)]) {
-      [uploader appWillTerminate:app];
-    }
-  }
-  NSArray<id<GDTCORPrioritizer>> *prioritizers = [self.targetToPrioritizer allValues];
-  for (id<GDTCORPrioritizer> prioritizer in prioritizers) {
-    if ([prioritizer respondsToSelector:@selector(appWillTerminate:)]) {
-      [prioritizer appWillTerminate:app];
-    }
-  }
-  NSArray<id<GDTCORStorageProtocol>> *storages = [self.targetToStorage allValues];
-  for (id<GDTCORStorageProtocol> storage in storages) {
-    if ([storage respondsToSelector:@selector(appWillTerminate:)]) {
-      [storage appWillTerminate:app];
-    }
-  }
-}
-
-@end
diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORTransformer.m b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORTransformer.m
deleted file mode 100644
index 35f456e..0000000
--- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORTransformer.m
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright 2018 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "GDTCORLibrary/Private/GDTCORTransformer.h"
-#import "GDTCORLibrary/Private/GDTCORTransformer_Private.h"
-
-#import <GoogleDataTransport/GDTCORAssert.h>
-#import <GoogleDataTransport/GDTCORConsoleLogger.h>
-#import <GoogleDataTransport/GDTCOREvent.h>
-#import <GoogleDataTransport/GDTCOREventTransformer.h>
-#import <GoogleDataTransport/GDTCORLifecycle.h>
-#import <GoogleDataTransport/GDTCORStorageProtocol.h>
-
-#import "GDTCORLibrary/Private/GDTCOREvent_Private.h"
-#import "GDTCORLibrary/Private/GDTCORRegistrar_Private.h"
-
-@implementation GDTCORTransformer
-
-+ (instancetype)sharedInstance {
-  static GDTCORTransformer *eventTransformer;
-  static dispatch_once_t onceToken;
-  dispatch_once(&onceToken, ^{
-    eventTransformer = [[self alloc] init];
-  });
-  return eventTransformer;
-}
-
-- (instancetype)init {
-  self = [super init];
-  if (self) {
-    _eventWritingQueue =
-        dispatch_queue_create("com.google.GDTCORTransformer", DISPATCH_QUEUE_SERIAL);
-  }
-  return self;
-}
-
-- (void)transformEvent:(GDTCOREvent *)event
-      withTransformers:(NSArray<id<GDTCOREventTransformer>> *)transformers
-            onComplete:(void (^_Nullable)(BOOL wasWritten, NSError *_Nullable error))completion {
-  GDTCORAssert(event, @"You can't write a nil event");
-  BOOL hadOriginalCompletion = completion != nil;
-  if (!completion) {
-    completion = ^(BOOL wasWritten, NSError *_Nullable error) {
-    };
-  }
-
-  __block GDTCORBackgroundIdentifier bgID = GDTCORBackgroundIdentifierInvalid;
-  bgID = [[GDTCORApplication sharedApplication]
-      beginBackgroundTaskWithName:@"GDTTransformer"
-                expirationHandler:^{
-                  [[GDTCORApplication sharedApplication] endBackgroundTask:bgID];
-                  bgID = GDTCORBackgroundIdentifierInvalid;
-                }];
-  dispatch_async(_eventWritingQueue, ^{
-    GDTCOREvent *transformedEvent = event;
-    for (id<GDTCOREventTransformer> transformer in transformers) {
-      if ([transformer respondsToSelector:@selector(transform:)]) {
-        GDTCORLogDebug(@"Applying a transformer to event %@", event);
-        transformedEvent = [transformer transform:transformedEvent];
-        if (!transformedEvent) {
-          completion(NO, nil);
-          return;
-        }
-      } else {
-        GDTCORLogError(GDTCORMCETransformerDoesntImplementTransform,
-                       @"Transformer doesn't implement transform: %@", transformer);
-        completion(NO, nil);
-        return;
-      }
-    }
-
-    id<GDTCORStorageProtocol> storage =
-        [GDTCORRegistrar sharedInstance].targetToStorage[@(event.target)];
-
-    [storage storeEvent:transformedEvent onComplete:hadOriginalCompletion ? completion : nil];
-
-    // The work is done, cancel the background task if it's valid.
-    [[GDTCORApplication sharedApplication] endBackgroundTask:bgID];
-    bgID = GDTCORBackgroundIdentifierInvalid;
-  });
-}
-
-#pragma mark - GDTCORLifecycleProtocol
-
-- (void)appWillTerminate:(GDTCORApplication *)application {
-  // Flush the queue immediately.
-  dispatch_sync(_eventWritingQueue, ^{
-                });
-}
-
-@end
diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORTransport.m b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORTransport.m
deleted file mode 100644
index 6c6af23..0000000
--- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORTransport.m
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright 2018 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "GDTCORLibrary/Public/GDTCORTransport.h"
-#import "GDTCORLibrary/Private/GDTCORTransport_Private.h"
-
-#import <GoogleDataTransport/GDTCORAssert.h>
-#import <GoogleDataTransport/GDTCORClock.h>
-#import <GoogleDataTransport/GDTCOREvent.h>
-
-#import "GDTCORLibrary/Private/GDTCORTransformer.h"
-
-@implementation GDTCORTransport
-
-- (nullable instancetype)initWithMappingID:(NSString *)mappingID
-                              transformers:
-                                  (nullable NSArray<id<GDTCOREventTransformer>> *)transformers
-                                    target:(NSInteger)target {
-  GDTCORAssert(mappingID.length > 0, @"A mapping ID cannot be nil or empty");
-  GDTCORAssert(target > 0, @"A target cannot be negative or 0");
-  if (mappingID == nil || mappingID.length == 0 || target <= 0) {
-    return nil;
-  }
-  self = [super init];
-  if (self) {
-    _mappingID = mappingID;
-    _transformers = transformers;
-    _target = target;
-    _transformerInstance = [GDTCORTransformer sharedInstance];
-  }
-  GDTCORLogDebug(@"Transport object created. mappingID:%@ transformers:%@ target:%ld", mappingID,
-                 transformers, (long)target);
-  return self;
-}
-
-- (void)sendTelemetryEvent:(GDTCOREvent *)event
-                onComplete:
-                    (void (^_Nullable)(BOOL wasWritten, NSError *_Nullable error))completion {
-  event.qosTier = GDTCOREventQoSTelemetry;
-  [self sendEvent:event onComplete:completion];
-}
-
-- (void)sendDataEvent:(GDTCOREvent *)event
-           onComplete:(void (^_Nullable)(BOOL wasWritten, NSError *_Nullable error))completion {
-  GDTCORAssert(event.qosTier != GDTCOREventQoSTelemetry, @"Use -sendTelemetryEvent, please.");
-  [self sendEvent:event onComplete:completion];
-}
-
-- (void)sendTelemetryEvent:(GDTCOREvent *)event {
-  [self sendTelemetryEvent:event onComplete:nil];
-}
-
-- (void)sendDataEvent:(GDTCOREvent *)event {
-  [self sendDataEvent:event onComplete:nil];
-}
-
-- (GDTCOREvent *)eventForTransport {
-  return [[GDTCOREvent alloc] initWithMappingID:_mappingID target:_target];
-}
-
-#pragma mark - Private helper methods
-
-/** Sends the given event through the transport pipeline.
- *
- * @param event The event to send.
- * @param completion A block that will be called when the event has been written or dropped.
- */
-- (void)sendEvent:(GDTCOREvent *)event
-       onComplete:(void (^_Nullable)(BOOL wasWritten, NSError *_Nullable error))completion {
-  // TODO: Determine if sending an event before registration is allowed.
-  GDTCORAssert(event, @"You can't send a nil event");
-  GDTCOREvent *copiedEvent = [event copy];
-  copiedEvent.clockSnapshot = [GDTCORClock snapshot];
-  [self.transformerInstance transformEvent:copiedEvent
-                          withTransformers:_transformers
-                                onComplete:completion];
-}
-
-@end
diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORUploadCoordinator.m b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORUploadCoordinator.m
deleted file mode 100644
index 639ecb0..0000000
--- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORUploadCoordinator.m
+++ /dev/null
@@ -1,285 +0,0 @@
-/*
- * Copyright 2018 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "GDTCORLibrary/Private/GDTCORUploadCoordinator.h"
-
-#import <GoogleDataTransport/GDTCORAssert.h>
-#import <GoogleDataTransport/GDTCORClock.h>
-#import <GoogleDataTransport/GDTCORConsoleLogger.h>
-#import <GoogleDataTransport/GDTCORReachability.h>
-
-#import "GDTCORLibrary/Private/GDTCORRegistrar_Private.h"
-
-@implementation GDTCORUploadCoordinator
-
-+ (instancetype)sharedInstance {
-  static GDTCORUploadCoordinator *sharedUploader;
-  static dispatch_once_t onceToken;
-  dispatch_once(&onceToken, ^{
-    sharedUploader = [[GDTCORUploadCoordinator alloc] init];
-    [sharedUploader startTimer];
-  });
-  return sharedUploader;
-}
-
-- (instancetype)init {
-  self = [super init];
-  if (self) {
-    _coordinationQueue =
-        dispatch_queue_create("com.google.GDTCORUploadCoordinator", DISPATCH_QUEUE_SERIAL);
-    _registrar = [GDTCORRegistrar sharedInstance];
-    _timerInterval = 30 * NSEC_PER_SEC;
-    _timerLeeway = 5 * NSEC_PER_SEC;
-    _targetToInFlightPackages = [[NSMutableDictionary alloc] init];
-  }
-  return self;
-}
-
-- (void)forceUploadForTarget:(GDTCORTarget)target {
-  dispatch_async(_coordinationQueue, ^{
-    GDTCORLogDebug(@"Forcing an upload of target %ld", (long)target);
-    GDTCORUploadConditions conditions = [self uploadConditions];
-    conditions |= GDTCORUploadConditionHighPriority;
-    [self uploadTargets:@[ @(target) ] conditions:conditions];
-  });
-}
-
-#pragma mark - Private helper methods
-
-/** Starts a timer that checks whether or not events can be uploaded at regular intervals. It will
- * check the next-upload clocks of all targets to determine if an upload attempt can be made.
- */
-- (void)startTimer {
-  dispatch_sync(_coordinationQueue, ^{
-    self->_timer =
-        dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, self->_coordinationQueue);
-    dispatch_source_set_timer(self->_timer, DISPATCH_TIME_NOW, self->_timerInterval,
-                              self->_timerLeeway);
-    dispatch_source_set_event_handler(self->_timer, ^{
-      if (![[GDTCORApplication sharedApplication] isRunningInBackground]) {
-        GDTCORUploadConditions conditions = [self uploadConditions];
-        GDTCORLogDebug(@"%@", @"Upload timer fired");
-        [self uploadTargets:[self.registrar.targetToUploader allKeys] conditions:conditions];
-      }
-    });
-    GDTCORLogDebug(@"%@", @"Upload timer started");
-    dispatch_resume(self->_timer);
-  });
-}
-
-/** Stops the currently running timer. */
-- (void)stopTimer {
-  if (_timer) {
-    dispatch_source_cancel(_timer);
-  }
-}
-
-/** Triggers the uploader implementations for the given targets to upload.
- *
- * @param targets An array of targets to trigger.
- * @param conditions The set of upload conditions.
- */
-- (void)uploadTargets:(NSArray<NSNumber *> *)targets conditions:(GDTCORUploadConditions)conditions {
-  dispatch_async(_coordinationQueue, ^{
-    if ((conditions & GDTCORUploadConditionNoNetwork) == GDTCORUploadConditionNoNetwork) {
-      return;
-    }
-    for (NSNumber *target in targets) {
-      // Don't trigger uploads for targets that have an in-flight package already.
-      if (self->_targetToInFlightPackages[target]) {
-        GDTCORLogDebug(@"Target %@ will not upload, there's an upload in flight", target);
-        continue;
-      }
-      // Ask the uploader if they can upload and do so, if it can.
-      id<GDTCORUploader> uploader = self.registrar.targetToUploader[target];
-      if ([uploader readyToUploadTarget:target.intValue conditions:conditions]) {
-        id<GDTCORPrioritizer> prioritizer = self.registrar.targetToPrioritizer[target];
-        GDTCORUploadPackage *package = [prioritizer uploadPackageWithTarget:target.intValue
-                                                                 conditions:conditions];
-        if (package.events.count) {
-          self->_targetToInFlightPackages[target] = package;
-          GDTCORLogDebug(@"Package of %ld events is being handed over to an uploader",
-                         (long)package.events.count);
-          [uploader uploadPackage:package];
-        } else {
-          [package completeDelivery];
-        }
-      }
-      GDTCORLogDebug(@"Target %@ is not ready to upload", target);
-    }
-  });
-}
-
-/** Returns the registered storage for the given NSNumber wrapped GDTCORTarget.
- *
- * @param target The NSNumber wrapping of a GDTCORTarget to find the storage instance of.
- * @return The storage instance for the given target.
- */
-- (nullable id<GDTCORStorageProtocol>)storageForTarget:(NSNumber *)target {
-  id<GDTCORStorageProtocol> storage = [GDTCORRegistrar sharedInstance].targetToStorage[target];
-  GDTCORAssert(storage, @"A storage must be registered for target %@", target);
-  return storage;
-}
-
-/** Returns the current upload conditions after making determinations about the network connection.
- *
- * @return The current upload conditions.
- */
-- (GDTCORUploadConditions)uploadConditions {
-#if TARGET_OS_WATCH
-  return GDTCORUploadConditionNoNetwork;
-#else
-  SCNetworkReachabilityFlags currentFlags = [GDTCORReachability currentFlags];
-  BOOL reachable =
-      (currentFlags & kSCNetworkReachabilityFlagsReachable) == kSCNetworkReachabilityFlagsReachable;
-  BOOL connectionRequired = (currentFlags & kSCNetworkReachabilityFlagsConnectionRequired) ==
-                            kSCNetworkReachabilityFlagsConnectionRequired;
-  BOOL networkConnected = reachable && !connectionRequired;
-
-  if (!networkConnected) {
-    return GDTCORUploadConditionNoNetwork;
-  }
-
-  BOOL isWWAN = GDTCORReachabilityFlagsContainWWAN(currentFlags);
-  if (isWWAN) {
-    return GDTCORUploadConditionMobileData;
-  } else {
-    return GDTCORUploadConditionWifiData;
-  }
-#endif
-}
-
-#pragma mark - NSSecureCoding support
-
-/** The NSKeyedCoder key for the targetToInFlightPackages property. */
-static NSString *const ktargetToInFlightPackagesKey =
-    @"GDTCORUploadCoordinatortargetToInFlightPackages";
-
-+ (BOOL)supportsSecureCoding {
-  return YES;
-}
-
-- (instancetype)initWithCoder:(NSCoder *)aDecoder {
-  GDTCORUploadCoordinator *sharedCoordinator = [GDTCORUploadCoordinator sharedInstance];
-  dispatch_sync(sharedCoordinator->_coordinationQueue, ^{
-    @try {
-      NSSet *classes =
-          [NSSet setWithObjects:[NSMutableDictionary class], [GDTCORUploadPackage class], nil];
-      sharedCoordinator->_targetToInFlightPackages =
-          [aDecoder decodeObjectOfClasses:classes forKey:ktargetToInFlightPackagesKey];
-
-    } @catch (NSException *exception) {
-      sharedCoordinator->_targetToInFlightPackages = [NSMutableDictionary dictionary];
-    }
-  });
-  return sharedCoordinator;
-}
-
-- (void)encodeWithCoder:(NSCoder *)aCoder {
-  dispatch_sync(_coordinationQueue, ^{
-    // All packages that have been given to uploaders need to be tracked so that their expiration
-    // timers can be called.
-    if (self->_targetToInFlightPackages.count > 0) {
-      [aCoder encodeObject:self->_targetToInFlightPackages forKey:ktargetToInFlightPackagesKey];
-    }
-  });
-}
-
-#pragma mark - GDTCORLifecycleProtocol
-
-- (void)appWillForeground:(GDTCORApplication *)app {
-  // -startTimer is thread-safe.
-  [self startTimer];
-}
-
-- (void)appWillBackground:(GDTCORApplication *)app {
-  dispatch_sync(_coordinationQueue, ^{
-    [self stopTimer];
-  });
-}
-
-- (void)appWillTerminate:(GDTCORApplication *)application {
-  dispatch_sync(_coordinationQueue, ^{
-    [self stopTimer];
-  });
-}
-
-#pragma mark - GDTCORUploadPackageProtocol
-
-- (void)packageDelivered:(GDTCORUploadPackage *)package successful:(BOOL)successful {
-  if (!_coordinationQueue) {
-    return;
-  }
-  dispatch_async(_coordinationQueue, ^{
-    NSNumber *targetNumber = @(package.target);
-    NSMutableDictionary<NSNumber *, GDTCORUploadPackage *> *targetToInFlightPackages =
-        self->_targetToInFlightPackages;
-    GDTCORRegistrar *registrar = self->_registrar;
-    if (targetToInFlightPackages) {
-      [targetToInFlightPackages removeObjectForKey:targetNumber];
-    }
-    NSSet<GDTCOREvent *> *packageEvents = [package.events copy];
-    if (registrar) {
-      id<GDTCORPrioritizer> prioritizer = registrar.targetToPrioritizer[targetNumber];
-      if (!prioritizer) {
-        GDTCORLogError(GDTCORMCEPrioritizerError,
-                       @"A prioritizer should be registered for this target: %@", targetNumber);
-      }
-      if ([prioritizer respondsToSelector:@selector(packageDelivered:successful:)]) {
-        [prioritizer packageDelivered:[package copy] successful:successful];
-      }
-    }
-    if (successful && packageEvents.count) {
-      NSMutableSet *eventIDs = [[NSMutableSet alloc] init];
-      for (GDTCOREvent *event in packageEvents) {
-        NSNumber *eventID = event.eventID;
-        if (eventID != nil) {
-          [eventIDs addObject:eventID];
-        } else {
-          GDTCORLogDebug(@"An event was missing its ID: %@", event);
-        }
-      }
-      [[self storageForTarget:@(package.target)] removeEvents:eventIDs];
-    }
-  });
-}
-
-- (void)packageExpired:(GDTCORUploadPackage *)package {
-  if (!_coordinationQueue) {
-    return;
-  }
-  dispatch_async(_coordinationQueue, ^{
-    NSNumber *targetNumber = @(package.target);
-    NSMutableDictionary<NSNumber *, GDTCORUploadPackage *> *targetToInFlightPackages =
-        self->_targetToInFlightPackages;
-    GDTCORRegistrar *registrar = self->_registrar;
-    if (targetToInFlightPackages) {
-      [targetToInFlightPackages removeObjectForKey:targetNumber];
-    }
-    if (registrar) {
-      id<GDTCORPrioritizer> prioritizer = registrar.targetToPrioritizer[targetNumber];
-      id<GDTCORUploader> uploader = registrar.targetToUploader[targetNumber];
-      if ([prioritizer respondsToSelector:@selector(packageExpired:)]) {
-        [prioritizer packageExpired:package];
-      }
-      if ([uploader respondsToSelector:@selector(packageExpired:)]) {
-        [uploader packageExpired:package];
-      }
-    }
-  });
-}
-
-@end
diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORUploadPackage.m b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORUploadPackage.m
deleted file mode 100644
index 38b7a7c..0000000
--- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORUploadPackage.m
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "GDTCORLibrary/Public/GDTCORUploadPackage.h"
-
-#import <GoogleDataTransport/GDTCORClock.h>
-#import <GoogleDataTransport/GDTCORConsoleLogger.h>
-
-#import "GDTCORLibrary/Private/GDTCORRegistrar_Private.h"
-#import "GDTCORLibrary/Private/GDTCORUploadCoordinator.h"
-#import "GDTCORLibrary/Private/GDTCORUploadPackage_Private.h"
-
-/** A class that holds a weak reference to an upload package, for use by the package's NSTimer. */
-@interface GDTCORUploadPackageTimerHolder : NSObject
-
-/** The upload package. */
-@property(weak, nonatomic) GDTCORUploadPackage *package;
-
-@end
-
-@implementation GDTCORUploadPackageTimerHolder
-
-/** Calls checkIfPackageIsExpired on the package if non-nil. Invalidates if the package is nil.
- *
- * @param timer The timer instance calling this method.
- */
-- (void)timerFired:(NSTimer *)timer {
-  if (_package) {
-    [_package checkIfPackageIsExpired];
-  } else {
-    [timer invalidate];
-  }
-}
-
-@end
-
-@implementation GDTCORUploadPackage {
-  /** If YES, the package's -completeDelivery method has been called. */
-  BOOL _isDelivered;
-
-  /** If YES, is being handled by the handler. */
-  BOOL _isHandled;
-
-  /** A timer that will regularly check to see whether this package has expired or not. */
-  NSTimer *_expirationTimer;
-}
-
-- (instancetype)initWithTarget:(GDTCORTarget)target {
-  self = [super init];
-  if (self) {
-    _target = target;
-    _storage = [GDTCORRegistrar sharedInstance].targetToStorage[@(target)];
-    _deliverByTime = [GDTCORClock clockSnapshotInTheFuture:180000];
-    _handler = [GDTCORUploadCoordinator sharedInstance];
-    GDTCORUploadPackageTimerHolder *holder = [[GDTCORUploadPackageTimerHolder alloc] init];
-    holder.package = self;
-    _expirationTimer = [NSTimer scheduledTimerWithTimeInterval:5.0
-                                                        target:holder
-                                                      selector:@selector(timerFired:)
-                                                      userInfo:nil
-                                                       repeats:YES];
-  }
-  GDTCORLogDebug(@"Upload package created %@", self);
-  return self;
-}
-
-- (instancetype)copy {
-  GDTCORUploadPackage *newPackage = [[GDTCORUploadPackage alloc] init];
-  newPackage->_target = _target;
-  newPackage->_storage = _storage;
-  newPackage->_deliverByTime = _deliverByTime;
-  newPackage->_handler = _handler;
-  GDTCORUploadPackageTimerHolder *holder = [[GDTCORUploadPackageTimerHolder alloc] init];
-  holder.package = newPackage;
-  newPackage->_expirationTimer = [NSTimer scheduledTimerWithTimeInterval:5.0
-                                                                  target:holder
-                                                                selector:@selector(timerFired:)
-                                                                userInfo:nil
-                                                                 repeats:YES];
-  newPackage->_events = [_events copy];
-  GDTCORLogDebug(@"Copying UploadPackage %@ to %@", self, newPackage);
-  return newPackage;
-}
-
-- (NSUInteger)hash {
-  return [_events hash];
-}
-
-- (BOOL)isEqual:(id)object {
-  return [self hash] == [object hash];
-}
-
-- (void)dealloc {
-  [_expirationTimer invalidate];
-}
-
-- (void)completeDelivery {
-  if (_isDelivered) {
-    GDTCORLogError(GDTCORMCEDeliverTwice, @"%@",
-                   @"It's an API violation to call -completeDelivery twice.");
-  }
-  _isDelivered = YES;
-  [_expirationTimer invalidate];
-  if (!_isHandled && _handler &&
-      [_handler respondsToSelector:@selector(packageDelivered:successful:)]) {
-    _isHandled = YES;
-    [_handler packageDelivered:[self copy] successful:YES];
-  }
-  GDTCORLogDebug(@"Upload package delivered: %@", self);
-}
-
-- (void)retryDeliveryInTheFuture {
-  [_expirationTimer invalidate];
-  if (!_isHandled && _handler &&
-      [_handler respondsToSelector:@selector(packageDelivered:successful:)]) {
-    _isHandled = YES;
-    [_handler packageDelivered:[self copy] successful:NO];
-  }
-  GDTCORLogDebug(@"Upload package will retry in the future: %@", self);
-}
-
-- (void)checkIfPackageIsExpired {
-  if ([[GDTCORClock snapshot] isAfter:_deliverByTime]) {
-    [_expirationTimer invalidate];
-    if (_handler && [_handler respondsToSelector:@selector(packageExpired:)]) {
-      _isHandled = YES;
-      GDTCORLogDebug(@"Upload package expired: %@", self);
-      [_handler packageExpired:self];
-    }
-  }
-}
-
-#pragma mark - NSSecureCoding
-
-/** The keyed archiver key for the events property. */
-static NSString *const kEventsKey = @"GDTCORUploadPackageEventsKey";
-
-/** The keyed archiver key for the _isHandled property. */
-static NSString *const kDeliverByTimeKey = @"GDTCORUploadPackageDeliveryByTimeKey";
-
-/** The keyed archiver key for the _isHandled ivar. */
-static NSString *const kIsHandledKey = @"GDTCORUploadPackageIsHandledKey";
-
-/** The keyed archiver key for the handler property. */
-static NSString *const kHandlerKey = @"GDTCORUploadPackageHandlerKey";
-
-/** The keyed archiver key for the target property. */
-static NSString *const kTargetKey = @"GDTCORUploadPackageTargetKey";
-
-+ (BOOL)supportsSecureCoding {
-  return YES;
-}
-
-- (void)encodeWithCoder:(nonnull NSCoder *)aCoder {
-  [aCoder encodeObject:_events forKey:kEventsKey];
-  [aCoder encodeObject:_deliverByTime forKey:kDeliverByTimeKey];
-  [aCoder encodeBool:_isHandled forKey:kIsHandledKey];
-  [aCoder encodeObject:_handler forKey:kHandlerKey];
-  [aCoder encodeInteger:_target forKey:kTargetKey];
-}
-
-- (nullable instancetype)initWithCoder:(nonnull NSCoder *)aDecoder {
-  // Sets a global translation mapping to decode GDTCORStoredEvent objects encoded as instances of
-  // GDTCOREvent instead.
-  [NSKeyedUnarchiver setClass:[GDTCOREvent class] forClassName:@"GDTCORStoredEvent"];
-
-  GDTCORTarget target = [aDecoder decodeIntegerForKey:kTargetKey];
-  self = [self initWithTarget:target];
-  if (self) {
-    NSSet *classes = [NSSet setWithObjects:[NSSet class], [GDTCOREvent class], nil];
-    _events = [aDecoder decodeObjectOfClasses:classes forKey:kEventsKey];
-    _deliverByTime = [aDecoder decodeObjectOfClass:[GDTCORClock class] forKey:kDeliverByTimeKey];
-    _isHandled = [aDecoder decodeBoolForKey:kIsHandledKey];
-    // _handler isn't technically NSSecureCoding, because we don't know the class of this object.
-    // but it gets decoded anyway.
-  }
-  return self;
-}
-
-@end
diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORDataFuture.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORDataFuture.h
deleted file mode 100644
index 685cf2b..0000000
--- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORDataFuture.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-/** This class represents a future data object, determined at instantiation time. */
-@interface GDTCORDataFuture : NSObject <NSSecureCoding>
-
-/** If not nil, this data future was instantiated with this file URL. */
-@property(nullable, readonly, nonatomic) NSURL *fileURL;
-
-/** Initializes an instance with the given the fileURL.
- *
- * @param fileURL The fileURL containing the data to return in -data.
- * @return An instance of this class.
- */
-- (instancetype)initWithFileURL:(NSURL *)fileURL;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCOREvent_Private.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCOREvent_Private.h
deleted file mode 100644
index 485d6bb..0000000
--- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCOREvent_Private.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2018 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <GoogleDataTransport/GDTCOREvent.h>
-
-#import <GoogleDataTransport/GDTCORClock.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface GDTCOREvent ()
-
-/** The unique ID of the event. This property is for testing only. */
-@property(nonatomic, readwrite) NSNumber *eventID;
-
-/** The GDT relative file path of the event. */
-@property(nullable, nonatomic, readonly) NSString *GDTFilePath;
-
-/** Writes [dataObject transportBytes] to the given URL, populates fileURL with the filename, then
- * nils the dataObject property. This method should not be called twice on the same event.
- *
- * @param filePath The GDTCORRootDirectory-relative path that dataObject will be written to.
- * @param error If populated, the error encountered during writing to disk.
- * @return YES if writing dataObject to disk was successful, NO otherwise.
- */
-- (BOOL)writeToGDTPath:(NSString *)filePath error:(NSError **)error;
-
-/** Generates incrementing event IDs, stored in a file in the app's cache.
- *
- * @return An event ID that is incremented based on a number in a file stored in the app cache.
- */
-+ (NSNumber *)nextEventID;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORFlatFileStorage.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORFlatFileStorage.h
deleted file mode 100644
index 837c3ea..0000000
--- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORFlatFileStorage.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright 2018 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#import <GoogleDataTransport/GDTCORLifecycle.h>
-#import <GoogleDataTransport/GDTCORStorageProtocol.h>
-
-@class GDTCOREvent;
-@class GDTCORUploadCoordinator;
-
-NS_ASSUME_NONNULL_BEGIN
-
-/** Manages the storage of events. This class is thread-safe. */
-@interface GDTCORFlatFileStorage
-    : NSObject <NSSecureCoding, GDTCORStorageProtocol, GDTCORLifecycleProtocol>
-
-/** The queue on which all storage work will occur. */
-@property(nonatomic) dispatch_queue_t storageQueue;
-
-/** A map of targets to a set of stored events. */
-@property(nonatomic)
-    NSMutableDictionary<NSNumber *, NSMutableSet<GDTCOREvent *> *> *targetToEventSet;
-
-/** All the events that have been stored. */
-@property(readonly, nonatomic) NSMutableDictionary<NSNumber *, GDTCOREvent *> *storedEvents;
-
-/** The upload coordinator instance used by this storage instance. */
-@property(nonatomic) GDTCORUploadCoordinator *uploadCoordinator;
-
-/** Creates and/or returns the storage singleton.
- *
- * @return The storage singleton.
- */
-+ (instancetype)sharedInstance;
-
-/** Returns the path to the keyed archive of the singleton. This is where the singleton is saved
- * to disk during certain app lifecycle events.
- *
- * @return File path to serialized singleton.
- */
-+ (NSString *)archivePath;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORReachability_Private.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORReachability_Private.h
deleted file mode 100644
index d577dbb..0000000
--- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORReachability_Private.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "GDTCORLibrary/Public/GDTCORReachability.h"
-
-@interface GDTCORReachability ()
-
-#if !TARGET_OS_WATCH
-/** Allows manually setting the flags for testing purposes. */
-@property(nonatomic, readwrite) SCNetworkReachabilityFlags flags;
-#endif
-
-/** Creates/returns the singleton instance of this class.
- *
- * @return The singleton instance of this class.
- */
-+ (instancetype)sharedInstance;
-
-@end
diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORRegistrar_Private.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORRegistrar_Private.h
deleted file mode 100644
index 8b29839..0000000
--- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORRegistrar_Private.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright 2018 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <GoogleDataTransport/GDTCORRegistrar.h>
-
-@interface GDTCORRegistrar ()
-
-NS_ASSUME_NONNULL_BEGIN
-
-/** The concurrent queue on which all registration occurs. */
-@property(nonatomic, readonly) dispatch_queue_t registrarQueue;
-
-/** A map of targets to backend implementations. */
-@property(atomic, readonly) NSMutableDictionary<NSNumber *, id<GDTCORUploader>> *targetToUploader;
-
-/** A map of targets to prioritizer implementations. */
-@property(atomic, readonly)
-    NSMutableDictionary<NSNumber *, id<GDTCORPrioritizer>> *targetToPrioritizer;
-
-/** A map of targets to storage instances. */
-@property(atomic, readonly)
-    NSMutableDictionary<NSNumber *, id<GDTCORStorageProtocol>> *targetToStorage;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransformer.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransformer.h
deleted file mode 100644
index e2dbff1..0000000
--- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransformer.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright 2018 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#import <GoogleDataTransport/GDTCORLifecycle.h>
-
-@class GDTCOREvent;
-
-@protocol GDTCOREventTransformer;
-
-NS_ASSUME_NONNULL_BEGIN
-
-/** Manages the transforming of events. It's desirable for this to be its own class
- * because running all events through a single instance ensures that transformers are thread-safe.
- * Having a per-transport queue to run on isn't sufficient because transformer objects could
- * maintain state (or at least, there's nothing to stop them from doing that) and the same instances
- * may be used across multiple instances.
- */
-@interface GDTCORTransformer : NSObject <GDTCORLifecycleProtocol>
-
-/** Instantiates or returns the event transformer singleton.
- *
- * @return The singleton instance of the event transformer.
- */
-+ (instancetype)sharedInstance;
-
-/** Writes the result of applying the given transformers' -transform method on the given event.
- *
- * @note If the app is suspended, a background task will be created to complete work in-progress,
- * but this method will not send any further events until the app is resumed.
- *
- * @param event The event to apply transformers on.
- * @param transformers The list of transformers to apply.
- * @param completion A block to run when an event was written to disk or dropped.
- */
-- (void)transformEvent:(GDTCOREvent *)event
-      withTransformers:(nullable NSArray<id<GDTCOREventTransformer>> *)transformers
-            onComplete:(void (^_Nullable)(BOOL wasWritten, NSError *_Nullable error))completion;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransformer_Private.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransformer_Private.h
deleted file mode 100644
index 4adcf93..0000000
--- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransformer_Private.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright 2018 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "GDTCORLibrary/Private/GDTCORTransformer.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface GDTCORTransformer ()
-
-/** The queue on which all work will occur. */
-@property(nonatomic) dispatch_queue_t eventWritingQueue;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransport_Private.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransport_Private.h
deleted file mode 100644
index 71f73a6..0000000
--- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransport_Private.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <GoogleDataTransport/GDTCORTransport.h>
-
-@class GDTCORTransformer;
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface GDTCORTransport ()
-
-/** The mapping identifier that the target backend will use to map the transport bytes to proto. */
-@property(nonatomic) NSString *mappingID;
-
-/** The transformers that will operate on events sent by this transport. */
-@property(nonatomic) NSArray<id<GDTCOREventTransformer>> *transformers;
-
-/** The target backend of this transport. */
-@property(nonatomic) NSInteger target;
-
-/** The transformer instance to used to transform events. Allows injecting a fake during testing. */
-@property(nonatomic) GDTCORTransformer *transformerInstance;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadCoordinator.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadCoordinator.h
deleted file mode 100644
index b678ef2..0000000
--- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadCoordinator.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright 2018 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#import <GoogleDataTransport/GDTCORLifecycle.h>
-#import <GoogleDataTransport/GDTCORRegistrar.h>
-
-#import "GDTCORLibrary/Private/GDTCORUploadPackage_Private.h"
-
-@class GDTCORClock;
-
-NS_ASSUME_NONNULL_BEGIN
-
-/** This class connects storage and uploader implementations, providing events to an uploader
- * and informing the storage what events were successfully uploaded or not.
- */
-@interface GDTCORUploadCoordinator
-    : NSObject <NSSecureCoding, GDTCORLifecycleProtocol, GDTCORUploadPackageProtocol>
-
-/** The queue on which all upload coordination will occur. Also used by a dispatch timer. */
-/** Creates and/or returrns the singleton.
- *
- * @return The singleton instance of this class.
- */
-+ (instancetype)sharedInstance;
-
-/** The queue on which all upload coordination will occur. */
-@property(nonatomic, readonly) dispatch_queue_t coordinationQueue;
-
-/** A timer that will causes regular checks for events to upload. */
-@property(nonatomic, readonly) dispatch_source_t timer;
-
-/** The interval the timer will fire. */
-@property(nonatomic, readonly) uint64_t timerInterval;
-
-/** Some leeway given to libdispatch for the timer interval event. */
-@property(nonatomic, readonly) uint64_t timerLeeway;
-
-/** The map of targets to in-flight packages. */
-@property(nonatomic, readonly)
-    NSMutableDictionary<NSNumber *, GDTCORUploadPackage *> *targetToInFlightPackages;
-
-/** The registrar object the coordinator will use. Generally used for testing. */
-@property(nonatomic) GDTCORRegistrar *registrar;
-
-/** Forces the backend specified by the target to upload the provided set of events. This should
- * only ever happen when the QoS tier of an event requires it.
- *
- * @param target The target that should force an upload.
- */
-- (void)forceUploadForTarget:(GDTCORTarget)target;
-
-/** Starts the upload timer. */
-- (void)startTimer;
-
-/** Stops the upload timer from running. */
-- (void)stopTimer;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadPackage_Private.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadPackage_Private.h
deleted file mode 100644
index 1ab6432..0000000
--- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadPackage_Private.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <GoogleDataTransport/GDTCORUploadPackage.h>
-
-@interface GDTCORUploadPackage ()
-
-/** The storage object this upload package will use to resolve event hashes to files. */
-@property(nonatomic) id<GDTCORStorageProtocol> storage;
-
-/** A handler that will receive callbacks for certain events. */
-@property(nonatomic) id<NSSecureCoding, GDTCORUploadPackageProtocol> handler;
-
-/** Checks if the package is expired and calls -packageExpired: on the handler if necessary. */
-- (void)checkIfPackageIsExpired;
-
-@end
diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORAssert.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORAssert.h
deleted file mode 100644
index c0f9712..0000000
--- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORAssert.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#import <GoogleDataTransport/GDTCORConsoleLogger.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-/** A block type that could be run instead of normal assertion logging. No return type, no params.
- */
-typedef void (^GDTCORAssertionBlock)(void);
-
-/** Returns the result of executing a soft-linked method present in unit tests that allows a block
- * to be run instead of normal assertion logging. This helps ameliorate issues with catching
- * exceptions that occur on a dispatch_queue.
- *
- * @return A block that can be run instead of normal assert printing.
- */
-FOUNDATION_EXPORT GDTCORAssertionBlock _Nullable GDTCORAssertionBlockToRunInstead(void);
-
-#if defined(NS_BLOCK_ASSERTIONS)
-
-#define GDTCORAssert(condition, ...) \
-  do {                               \
-  } while (0);
-
-#define GDTCORFatalAssert(condition, ...) \
-  do {                                    \
-  } while (0);
-
-#else  // defined(NS_BLOCK_ASSERTIONS)
-
-/** Asserts using a console log, unless a block was specified to be run instead.
- *
- * @param condition The condition you'd expect to be YES.
- */
-#define GDTCORAssert(condition, format, ...)                                     \
-  do {                                                                           \
-    __PRAGMA_PUSH_NO_EXTRA_ARG_WARNINGS                                          \
-    if (__builtin_expect(!(condition), 0)) {                                     \
-      GDTCORAssertionBlock assertionBlock = GDTCORAssertionBlockToRunInstead();  \
-      if (assertionBlock) {                                                      \
-        assertionBlock();                                                        \
-      } else {                                                                   \
-        NSString *__assert_file__ = [NSString stringWithUTF8String:__FILE__];    \
-        __assert_file__ = __assert_file__ ? __assert_file__ : @"<Unknown File>"; \
-        GDTCORLogAssert(NO, __assert_file__, __LINE__, format, ##__VA_ARGS__);   \
-        __PRAGMA_POP_NO_EXTRA_ARG_WARNINGS                                       \
-      }                                                                          \
-    }                                                                            \
-  } while (0);
-
-/** Asserts by logging to the console and throwing an exception if NS_BLOCK_ASSERTIONS is not
- * defined.
- *
- * @param condition The condition you'd expect to be YES.
- */
-#define GDTCORFatalAssert(condition, format, ...)                                          \
-  do {                                                                                     \
-    __PRAGMA_PUSH_NO_EXTRA_ARG_WARNINGS                                                    \
-    if (__builtin_expect(!(condition), 0)) {                                               \
-      GDTCORAssertionBlock assertionBlock = GDTCORAssertionBlockToRunInstead();            \
-      if (assertionBlock) {                                                                \
-        assertionBlock();                                                                  \
-      } else {                                                                             \
-        NSString *__assert_file__ = [NSString stringWithUTF8String:__FILE__];              \
-        __assert_file__ = __assert_file__ ? __assert_file__ : @"<Unknown File>";           \
-        GDTCORLogAssert(YES, __assert_file__, __LINE__, format, ##__VA_ARGS__);            \
-        [[NSAssertionHandler currentHandler] handleFailureInMethod:_cmd                    \
-                                                            object:self                    \
-                                                              file:__assert_file__         \
-                                                        lineNumber:__LINE__                \
-                                                       description:format, ##__VA_ARGS__]; \
-        __PRAGMA_POP_NO_EXTRA_ARG_WARNINGS                                                 \
-      }                                                                                    \
-    }                                                                                      \
-  } while (0);
-
-#endif  // defined(NS_BLOCK_ASSERTIONS)
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORClock.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORClock.h
deleted file mode 100644
index 01de21a..0000000
--- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORClock.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright 2018 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-/** This class manages the device clock and produces snapshots of the current time. */
-@interface GDTCORClock : NSObject <NSSecureCoding>
-
-/** The wallclock time, UTC, in milliseconds. */
-@property(nonatomic, readonly) int64_t timeMillis;
-
-/** The offset from UTC in seconds. */
-@property(nonatomic, readonly) int64_t timezoneOffsetSeconds;
-
-/** The kernel boot time when this clock was created. */
-@property(nonatomic, readonly) int64_t kernelBootTime;
-
-/** The device uptime when this clock was created. */
-@property(nonatomic, readonly) int64_t uptime;
-
-/** Creates a GDTCORClock object using the current time and offsets.
- *
- * @return A new GDTCORClock object representing the current time state.
- */
-+ (instancetype)snapshot;
-
-/** Creates a GDTCORClock object representing a time in the future, relative to now.
- *
- * @param millisInTheFuture The millis in the future from now this clock should represent.
- * @return An instance representing a future time.
- */
-+ (instancetype)clockSnapshotInTheFuture:(uint64_t)millisInTheFuture;
-
-/** Compares one clock with another, returns YES if the caller is after the parameter.
- *
- * @return YES if the calling clock's time is after the given clock's time.
- */
-- (BOOL)isAfter:(GDTCORClock *)otherClock;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORConsoleLogger.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORConsoleLogger.h
deleted file mode 100644
index d306f18..0000000
--- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORConsoleLogger.h
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Copyright 2018 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-/** The current logging level. This value and higher will be printed. Declared as volatile to make
- * getting and setting atomic.
- */
-FOUNDATION_EXPORT volatile NSInteger GDTCORConsoleLoggerLoggingLevel;
-
-/** A  list of logging levels that GDT supports. */
-typedef NS_ENUM(NSInteger, GDTCORLoggingLevel) {
-
-  /** Causes all logs to be printed. */
-  GDTCORLoggingLevelDebug = 1,
-
-  /** Causes all non-debug logs to be printed. */
-  GDTCORLoggingLevelVerbose = 2,
-
-  /** Causes warnings and errors to be printed. */
-  GDTCORLoggingLevelWarnings = 3,
-
-  /** Causes errors to be printed. This is the default value. */
-  GDTCORLoggingLevelErrors = 4
-};
-
-/** A list of message codes to print in the logger that help to correspond printed messages with
- * code locations.
- *
- * Prefixes:
- * - MCD => MessageCodeDebug
- * - MCW => MessageCodeWarning
- * - MCE => MessageCodeError
- */
-typedef NS_ENUM(NSInteger, GDTCORMessageCode) {
-
-  /** For debug logs. */
-  GDTCORMCDDebugLog = 0,
-
-  /** For warning messages concerning transportBytes: not being implemented by a data object. */
-  GDTCORMCWDataObjectMissingBytesImpl = 1,
-
-  /** For warning messages concerning a failed event upload. */
-  GDTCORMCWUploadFailed = 2,
-
-  /** For warning messages concerning a forced event upload. */
-  GDTCORMCWForcedUpload = 3,
-
-  /** For warning messages concerning a failed reachability call. */
-  GDTCORMCWReachabilityFailed = 4,
-
-  /** For warning messages concerning a database warning. */
-  GDTCORMCWDatabaseWarning = 5,
-
-  /** For warning messages concerning the reading of a event file. */
-  GDTCORMCWFileReadError = 6,
-
-  /** For error messages concerning transform: not being implemented by an event transformer. */
-  GDTCORMCETransformerDoesntImplementTransform = 1000,
-
-  /** For error messages concerning the creation of a directory failing. */
-  GDTCORMCEDirectoryCreationError = 1001,
-
-  /** For error messages concerning the writing of a event file. */
-  GDTCORMCEFileWriteError = 1002,
-
-  /** For error messages concerning the lack of a prioritizer for a given backend. */
-  GDTCORMCEPrioritizerError = 1003,
-
-  /** For error messages concerning a package delivery API violation. */
-  GDTCORMCEDeliverTwice = 1004,
-
-  /** For error messages concerning an error in an implementation of -transportBytes. */
-  GDTCORMCETransportBytesError = 1005,
-
-  /** For general purpose error messages in a dependency. */
-  GDTCORMCEGeneralError = 1006,
-
-  /** For fatal errors. Please go to https://github.com/firebase/firebase-ios-sdk/issues and open
-   * an issue if you encounter an error with this code.
-   */
-  GDTCORMCEFatalAssertion = 1007,
-
-  /** For error messages concerning the reading of a event file. */
-  GDTCORMCEFileReadError = 1008,
-
-  /** For errors related to running sqlite. */
-  GDTCORMCEDatabaseError = 1009,
-};
-
-/** Prints the given code and format string to the console.
- *
- * @param code The message code describing the nature of the log.
- * @param logLevel The log level of this log.
- * @param format The format string.
- */
-FOUNDATION_EXPORT
-void GDTCORLog(GDTCORMessageCode code, GDTCORLoggingLevel logLevel, NSString *_Nonnull format, ...)
-    NS_FORMAT_FUNCTION(3, 4);
-
-/** Prints an assert log to the console.
- *
- * @param wasFatal Send YES if the assertion should be fatal, NO otherwise.
- * @param file The file in which the failure occurred.
- * @param line The line number of the failure.
- * @param format The format string.
- */
-FOUNDATION_EXPORT void GDTCORLogAssert(BOOL wasFatal,
-                                       NSString *_Nonnull file,
-                                       NSInteger line,
-                                       NSString *_Nullable format,
-                                       ...) NS_FORMAT_FUNCTION(4, 5);
-
-/** Returns the string that represents some message code.
- *
- * @param code The code to convert to a string.
- * @return The string representing the message code.
- */
-FOUNDATION_EXPORT NSString *_Nonnull GDTCORMessageCodeEnumToString(GDTCORMessageCode code);
-
-#define GDTCORLogDebug(MESSAGE_FORMAT, ...) \
-  GDTCORLog(GDTCORMCDDebugLog, GDTCORLoggingLevelDebug, MESSAGE_FORMAT, __VA_ARGS__);
-
-// A define to wrap GULLogWarning with slightly more convenient usage.
-#define GDTCORLogWarning(MESSAGE_CODE, MESSAGE_FORMAT, ...) \
-  GDTCORLog(MESSAGE_CODE, GDTCORLoggingLevelWarnings, MESSAGE_FORMAT, __VA_ARGS__);
-
-// A define to wrap GULLogError with slightly more convenient usage and a failing assert.
-#define GDTCORLogError(MESSAGE_CODE, MESSAGE_FORMAT, ...) \
-  GDTCORLog(MESSAGE_CODE, GDTCORLoggingLevelErrors, MESSAGE_FORMAT, __VA_ARGS__);
diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCOREvent.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCOREvent.h
deleted file mode 100644
index 4d6ffce..0000000
--- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCOREvent.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright 2018 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#import <GoogleDataTransport/GDTCOREventDataObject.h>
-
-@class GDTCORClock;
-
-NS_ASSUME_NONNULL_BEGIN
-
-/** The different possible quality of service specifiers. High values indicate high priority. */
-typedef NS_ENUM(NSInteger, GDTCOREventQoS) {
-  /** The QoS tier wasn't set, and won't ever be sent. */
-  GDTCOREventQoSUnknown = 0,
-
-  /** This event is internal telemetry data that should not be sent on its own if possible. */
-  GDTCOREventQoSTelemetry = 1,
-
-  /** This event should be sent, but in a batch only roughly once per day. */
-  GDTCOREventQoSDaily = 2,
-
-  /** This event should be sent when requested by the uploader. */
-  GDTCOREventQosDefault = 3,
-
-  /** This event should be sent immediately along with any other data that can be batched. */
-  GDTCOREventQoSFast = 4,
-
-  /** This event should only be uploaded on wifi. */
-  GDTCOREventQoSWifiOnly = 5,
-};
-
-@interface GDTCOREvent : NSObject <NSSecureCoding>
-
-/** The unique ID of the event. */
-@property(nonatomic, readonly) NSNumber *eventID;
-
-/** The mapping identifier, to allow backends to map the transport bytes to a proto. */
-@property(readonly, nonatomic) NSString *mappingID;
-
-/** The identifier for the backend this event will eventually be sent to. */
-@property(readonly, nonatomic) NSInteger target;
-
-/** The data object encapsulated in the transport of your choice, as long as it implements
- * the GDTCOREventDataObject protocol. */
-@property(nullable, nonatomic) id<GDTCOREventDataObject> dataObject;
-
-/** The quality of service tier this event belongs to. */
-@property(nonatomic) GDTCOREventQoS qosTier;
-
-/** The clock snapshot at the time of the event. */
-@property(nonatomic) GDTCORClock *clockSnapshot;
-
-/** The resulting file URL when [dataObject -transportBytes] has been saved to disk.*/
-@property(nullable, readonly, nonatomic) NSURL *fileURL;
-
-/** Bytes that can be used by a prioritizer or uploader later on. It's the prioritizer or uploader's
- * responsibility to serialize and deserialize these bytes.
- */
-@property(nullable, nonatomic) NSData *customBytes;
-
-// Please use the designated initializer.
-- (instancetype)init NS_UNAVAILABLE;
-
-/** Initializes an instance using the given mappingID.
- *
- * @param mappingID The mapping identifier.
- * @param target The event's target identifier.
- * @return An instance of this class.
- */
-- (nullable instancetype)initWithMappingID:(NSString *)mappingID
-                                    target:(NSInteger)target NS_DESIGNATED_INITIALIZER;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCOREventDataObject.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCOREventDataObject.h
deleted file mode 100644
index 34ef624..0000000
--- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCOREventDataObject.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2018 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-/** This protocol defines the common interface that event protos should implement regardless of the
- * underlying transport technology (protobuf, nanopb, etc).
- */
-@protocol GDTCOREventDataObject <NSObject>
-
-@required
-
-/** Returns the serialized proto bytes of the implementing event proto.
- *
- * @return the serialized proto bytes of the implementing event proto.
- */
-- (NSData *)transportBytes;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCOREventTransformer.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCOREventTransformer.h
deleted file mode 100644
index 29f9592..0000000
--- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCOREventTransformer.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2018 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@class GDTCOREvent;
-
-NS_ASSUME_NONNULL_BEGIN
-
-/** Defines the API that event transformers must adopt. */
-@protocol GDTCOREventTransformer <NSObject>
-
-@required
-
-/** Transforms an event by applying some logic to it. Events returned can be nil, for example, in
- *  instances where the event should be sampled.
- *
- * @param event The event to transform.
- * @return A transformed event, or nil if the transformation dropped the event.
- */
-- (nullable GDTCOREvent *)transform:(GDTCOREvent *)event;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORLifecycle.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORLifecycle.h
deleted file mode 100644
index a08a456..0000000
--- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORLifecycle.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#import <GoogleDataTransport/GDTCORPlatform.h>
-
-@class GDTCOREvent;
-
-NS_ASSUME_NONNULL_BEGIN
-
-/** A protocol defining the lifecycle events objects in the library must respond to immediately. */
-@protocol GDTCORLifecycleProtocol <NSObject>
-
-@optional
-
-/** Indicates an imminent app termination in the rare occurrence when -applicationWillTerminate: has
- * been called.
- *
- * @param app The GDTCORApplication instance.
- */
-- (void)appWillTerminate:(GDTCORApplication *)app;
-
-/** Indicates that the app is moving to background and eventual suspension or the current UIScene is
- * deactivating.
- *
- * @param app The GDTCORApplication instance.
- */
-- (void)appWillBackground:(GDTCORApplication *)app;
-
-/** Indicates that the app is resuming operation or a UIScene is activating.
- *
- * @param app The GDTCORApplication instance.
- */
-- (void)appWillForeground:(GDTCORApplication *)app;
-
-@end
-
-/** This class manages the library's response to app lifecycle events.
- *
- * When backgrounding, the library doesn't stop processing events, it's just that several background
- * tasks will end up being created for every event that's sent, and the stateful objects of the
- * library (GDTCORStorage and GDTCORUploadCoordinator instances) will deserialize themselves from
- * and to disk before and after every operation, respectively.
- */
-@interface GDTCORLifecycle : NSObject <GDTCORApplicationDelegate>
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORPlatform.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORPlatform.h
deleted file mode 100644
index f44f39f..0000000
--- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORPlatform.h
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#if !TARGET_OS_WATCH
-#import <SystemConfiguration/SystemConfiguration.h>
-#endif
-#if TARGET_OS_IOS || TARGET_OS_TV
-#import <UIKit/UIKit.h>
-#elif TARGET_OS_OSX
-#import <AppKit/AppKit.h>
-#endif  // TARGET_OS_IOS || TARGET_OS_TV
-
-#if TARGET_OS_IOS
-#import <CoreTelephony/CTTelephonyNetworkInfo.h>
-#endif
-
-NS_ASSUME_NONNULL_BEGIN
-
-/** The GoogleDataTransport library version. */
-FOUNDATION_EXPORT NSString *const kGDTCORVersion;
-
-/** A notification sent out if the app is backgrounding. */
-FOUNDATION_EXPORT NSString *const kGDTCORApplicationDidEnterBackgroundNotification;
-
-/** A notification sent out if the app is foregrounding. */
-FOUNDATION_EXPORT NSString *const kGDTCORApplicationWillEnterForegroundNotification;
-
-/** A notification sent out if the app is terminating. */
-FOUNDATION_EXPORT NSString *const kGDTCORApplicationWillTerminateNotification;
-
-/** The different possible network connection type. */
-typedef NS_ENUM(NSInteger, GDTCORNetworkType) {
-  GDTCORNetworkTypeUNKNOWN = 0,
-  GDTCORNetworkTypeWIFI = 1,
-  GDTCORNetworkTypeMobile = 2,
-};
-
-/** The different possible network connection mobile subtype. */
-typedef NS_ENUM(NSInteger, GDTCORNetworkMobileSubtype) {
-  GDTCORNetworkMobileSubtypeUNKNOWN = 0,
-  GDTCORNetworkMobileSubtypeGPRS = 1,
-  GDTCORNetworkMobileSubtypeEdge = 2,
-  GDTCORNetworkMobileSubtypeWCDMA = 3,
-  GDTCORNetworkMobileSubtypeHSDPA = 4,
-  GDTCORNetworkMobileSubtypeHSUPA = 5,
-  GDTCORNetworkMobileSubtypeCDMA1x = 6,
-  GDTCORNetworkMobileSubtypeCDMAEVDORev0 = 7,
-  GDTCORNetworkMobileSubtypeCDMAEVDORevA = 8,
-  GDTCORNetworkMobileSubtypeCDMAEVDORevB = 9,
-  GDTCORNetworkMobileSubtypeHRPD = 10,
-  GDTCORNetworkMobileSubtypeLTE = 11,
-};
-
-/** Returns a URL to the root directory under which all GDT-associated data must be saved.
- *
- * @return A URL to the root directory under which all GDT-associated data must be saved.
- */
-NSURL *GDTCORRootDirectory(void);
-
-#if !TARGET_OS_WATCH
-/** Compares flags with the WWAN reachability flag, if available, and returns YES if present.
- *
- * @param flags The set of reachability flags.
- * @return YES if the WWAN flag is set, NO otherwise.
- */
-BOOL GDTCORReachabilityFlagsContainWWAN(SCNetworkReachabilityFlags flags);
-#endif
-
-/** Generates an enum message GDTCORNetworkType representing network connection type.
- *
- * @return A GDTCORNetworkType representing network connection type.
- */
-GDTCORNetworkType GDTCORNetworkTypeMessage(void);
-
-/** Generates an enum message GDTCORNetworkMobileSubtype representing network connection mobile
- * subtype.
- *
- * @return A GDTCORNetworkMobileSubtype representing network connection mobile subtype.
- */
-GDTCORNetworkMobileSubtype GDTCORNetworkMobileSubTypeMessage(void);
-
-/** Writes the given object to the given fileURL and populates the given error if it fails.
- *
- * @param obj The object to encode.
- * @param filePath The path to write the object to. Can be nil if you just need the data.
- * @param error The error to populate if something goes wrong.
- * @return The data of the archive. If error is nil, it's been written to disk.
- */
-NSData *_Nullable GDTCOREncodeArchive(id<NSSecureCoding> obj,
-                                      NSString *_Nullable filePath,
-                                      NSError *_Nullable *error);
-
-/** Decodes an object of the given class from the given archive path or data and populates the given
- * error if it fails.
- *
- * @param archiveClass The class of the archive's root object.
- * @param archivePath The path to the archived data. Don't use with the archiveData param.
- * @param archiveData The data to decode. Don't use with the archivePath param.
- * @param error The error to populate if something goes wrong.
- */
-id<NSSecureCoding> _Nullable GDTCORDecodeArchive(Class archiveClass,
-                                                 NSString *_Nullable archivePath,
-                                                 NSData *_Nullable archiveData,
-                                                 NSError *_Nullable *error);
-
-/** A typedef identify background identifiers. */
-typedef volatile NSUInteger GDTCORBackgroundIdentifier;
-
-/** A background task's invalid sentinel value. */
-FOUNDATION_EXPORT const GDTCORBackgroundIdentifier GDTCORBackgroundIdentifierInvalid;
-
-#if TARGET_OS_IOS || TARGET_OS_TV
-/** A protocol that wraps UIApplicationDelegate or NSObject protocol, depending on the platform. */
-@protocol GDTCORApplicationDelegate <UIApplicationDelegate>
-#elif TARGET_OS_OSX
-@protocol GDTCORApplicationDelegate <NSApplicationDelegate>
-#else
-@protocol GDTCORApplicationDelegate <NSObject>
-#endif  // TARGET_OS_IOS || TARGET_OS_TV
-
-@end
-
-/** A cross-platform application class. */
-@interface GDTCORApplication : NSObject <GDTCORApplicationDelegate>
-
-/** Flag to determine if the application is running in the background. */
-@property(atomic, readonly) BOOL isRunningInBackground;
-
-/** Creates and/or returns the shared application instance.
- *
- * @return The shared application instance.
- */
-+ (nullable GDTCORApplication *)sharedApplication;
-
-/** Creates a background task with the returned identifier if on a suitable platform.
- *
- * @name name The name of the task, useful for debugging which background tasks are running.
- * @param handler The handler block that is called if the background task expires.
- * @return An identifier for the background task, or GDTCORBackgroundIdentifierInvalid if one
- * couldn't be created.
- */
-- (GDTCORBackgroundIdentifier)beginBackgroundTaskWithName:(NSString *)name
-                                        expirationHandler:(void (^__nullable)(void))handler;
-
-/** Ends the background task if the identifier is valid.
- *
- * @param bgID The background task to end.
- */
-- (void)endBackgroundTask:(GDTCORBackgroundIdentifier)bgID;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORPrioritizer.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORPrioritizer.h
deleted file mode 100644
index d1f6754..0000000
--- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORPrioritizer.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright 2018 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#import <GoogleDataTransport/GDTCOREvent.h>
-#import <GoogleDataTransport/GDTCORLifecycle.h>
-#import <GoogleDataTransport/GDTCORUploadPackage.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-/** Options that define a set of upload conditions. This is used to help minimize end user data
- * consumption impact.
- */
-typedef NS_OPTIONS(NSInteger, GDTCORUploadConditions) {
-
-  /** An upload shouldn't be attempted, because there's no network. */
-  GDTCORUploadConditionNoNetwork = 1 << 0,
-
-  /** An upload would likely use mobile data. */
-  GDTCORUploadConditionMobileData = 1 << 1,
-
-  /** An upload would likely use wifi data. */
-  GDTCORUploadConditionWifiData = 1 << 2,
-
-  /** An upload uses some sort of network connection, but it's unclear which. */
-  GDTCORUploadConditionUnclearConnection = 1 << 3,
-
-  /** A high priority event has occurred. */
-  GDTCORUploadConditionHighPriority = 1 << 4,
-};
-
-/** This protocol defines the common interface of event prioritization. Prioritizers are
- * stateful objects that prioritize events upon insertion into storage and remain prepared to return
- * a set of filenames to the storage system.
- */
-@protocol GDTCORPrioritizer <NSObject, GDTCORLifecycleProtocol, GDTCORUploadPackageProtocol>
-
-@required
-
-/** Accepts an event and uses the event metadata to make choices on how to prioritize the event.
- * This method exists as a way to help prioritize which events should be sent, which is dependent on
- * the request proto structure of your backend.
- *
- * @param event The event to prioritize.
- */
-- (void)prioritizeEvent:(GDTCOREvent *)event;
-
-/** Returns a set of events to upload given a set of conditions.
- *
- * @param target The target to create an upload package for.
- * @param conditions A bit mask specifying the current upload conditions.
- * @return An object to be used by the uploader to determine file URLs to upload with respect to the
- * current conditions.
- */
-- (GDTCORUploadPackage *)uploadPackageWithTarget:(GDTCORTarget)target
-                                      conditions:(GDTCORUploadConditions)conditions;
-
-@optional
-
-/** Saves the state of the prioritizer. */
-- (void)saveState;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORReachability.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORReachability.h
deleted file mode 100644
index 7879b59..0000000
--- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORReachability.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#if !TARGET_OS_WATCH
-#import <SystemConfiguration/SCNetworkReachability.h>
-#endif
-
-NS_ASSUME_NONNULL_BEGIN
-
-/** This class helps determine upload conditions by determining connectivity. */
-@interface GDTCORReachability : NSObject
-#if !TARGET_OS_WATCH
-/** The current set flags indicating network conditions */
-+ (SCNetworkReachabilityFlags)currentFlags;
-#endif
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORRegistrar.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORRegistrar.h
deleted file mode 100644
index 63f82a7..0000000
--- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORRegistrar.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright 2018 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#import <GoogleDataTransport/GDTCORPrioritizer.h>
-#import <GoogleDataTransport/GDTCORStorageProtocol.h>
-#import <GoogleDataTransport/GDTCORTargets.h>
-#import <GoogleDataTransport/GDTCORUploader.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-/** Manages the registration of targets with the transport SDK. */
-@interface GDTCORRegistrar : NSObject <GDTCORLifecycleProtocol>
-
-/** Creates and/or returns the singleton instance.
- *
- * @return The singleton instance of this class.
- */
-+ (instancetype)sharedInstance;
-
-/** Registers a backend implementation with the GoogleDataTransport infrastructure.
- *
- * @param backend The backend object to register.
- * @param target The target this backend object will be responsible for.
- */
-- (void)registerUploader:(id<GDTCORUploader>)backend target:(GDTCORTarget)target;
-
-/** Registers a storage implementation with the GoogleDataTransport infrastructure.
- *
- * @param storage The storage instance to be associated with this uploader and target.
- * @param target The target this backend object will be responsible for.
- */
-- (void)registerStorage:(id<GDTCORStorageProtocol>)storage target:(GDTCORTarget)target;
-
-/** Registers a event prioritizer implementation with the GoogleDataTransport infrastructure.
- *
- * @param prioritizer The prioritizer object to register.
- * @param target The target this prioritizer object will be responsible for.
- */
-- (void)registerPrioritizer:(id<GDTCORPrioritizer>)prioritizer target:(GDTCORTarget)target;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORStorageProtocol.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORStorageProtocol.h
deleted file mode 100644
index 99e9344..0000000
--- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORStorageProtocol.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2020 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#import <GoogleDataTransport/GDTCORLifecycle.h>
-
-@class GDTCOREvent;
-
-NS_ASSUME_NONNULL_BEGIN
-
-/** Defines the interface a storage subsystem is expected to implement. */
-@protocol GDTCORStorageProtocol <NSObject, GDTCORLifecycleProtocol>
-
-/** Stores an event and calls onComplete with a non-nil error if anything went wrong.
- *
- * @param event The event to store
- * @param completion The completion block to call after an attempt to store the event has been made.
- */
-- (void)storeEvent:(GDTCOREvent *)event
-        onComplete:(void (^_Nullable)(BOOL wasWritten, NSError *_Nullable error))completion;
-
-/** Removes the events from storage. */
-- (void)removeEvents:(NSSet<NSNumber *> *)eventIDs;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORTargets.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORTargets.h
deleted file mode 100644
index 5db8852..0000000
--- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORTargets.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-/** The list of targets supported by the shared transport infrastructure. If adding a new target,
- * please use the previous value +1.
- */
-typedef NS_ENUM(NSInteger, GDTCORTarget) {
-
-  /** A target only used in testing. */
-  kGDTCORTargetTest = 999,
-
-  /** The CCT target. */
-  kGDTCORTargetCCT = 1000,
-
-  /** The FLL target. */
-  kGDTCORTargetFLL = 1001,
-
-  /** The CSH target. The CSH target is a special-purpose backend. Please do not use it without
-   * permission.
-   */
-  kGDTCORTargetCSH = 1002
-};
diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORTransport.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORTransport.h
deleted file mode 100644
index 445ff72..0000000
--- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORTransport.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright 2018 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#import <GoogleDataTransport/GDTCOREventTransformer.h>
-
-@class GDTCOREvent;
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface GDTCORTransport : NSObject
-
-// Please use the designated initializer.
-- (instancetype)init NS_UNAVAILABLE;
-
-/** Initializes a new transport that will send events to the given target backend.
- *
- * @param mappingID The mapping identifier used by the backend to map the data object transport
- * bytes to a proto.
- * @param transformers A list of transformers to be applied to events that are sent.
- * @param target The target backend of this transport.
- * @return A transport that will send events.
- */
-- (nullable instancetype)initWithMappingID:(NSString *)mappingID
-                              transformers:
-                                  (nullable NSArray<id<GDTCOREventTransformer>> *)transformers
-                                    target:(NSInteger)target NS_DESIGNATED_INITIALIZER;
-
-/** Copies and sends an internal telemetry event. Events sent using this API are lower in priority,
- * and sometimes won't be sent on their own.
- *
- * @note This will convert the event's data object to data and release the original event.
- *
- * @param event The event to send.
- * @param completion A block that will be called when the event has been written or dropped.
- */
-- (void)sendTelemetryEvent:(GDTCOREvent *)event
-                onComplete:(void (^_Nullable)(BOOL wasWritten, NSError *_Nullable error))completion;
-
-/** Copies and sends an internal telemetry event. Events sent using this API are lower in priority,
- * and sometimes won't be sent on their own.
- *
- * @note This will convert the event's data object to data and release the original event.
- *
- * @param event The event to send.
- */
-- (void)sendTelemetryEvent:(GDTCOREvent *)event;
-
-/** Copies and sends an SDK service data event. Events send using this API are higher in priority,
- * and will cause a network request at some point in the relative near future.
- *
- * @note This will convert the event's data object to data and release the original event.
- *
- * @param event The event to send.
- * @param completion A block that will be called when the event has been written or dropped.
- */
-- (void)sendDataEvent:(GDTCOREvent *)event
-           onComplete:(void (^_Nullable)(BOOL wasWritten, NSError *_Nullable error))completion;
-
-/** Copies and sends an SDK service data event. Events send using this API are higher in priority,
- * and will cause a network request at some point in the relative near future.
- *
- * @note This will convert the event's data object to data and release the original event.
- *
- * @param event The event to send.
- */
-- (void)sendDataEvent:(GDTCOREvent *)event;
-
-/** Creates an event for use by this transport.
- *
- * @return An event that is suited for use by this transport.
- */
-- (GDTCOREvent *)eventForTransport;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORUploadPackage.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORUploadPackage.h
deleted file mode 100644
index 4f1d9da..0000000
--- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORUploadPackage.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import <GoogleDataTransport/GDTCORTargets.h>
-
-@class GDTCORClock;
-@class GDTCOREvent;
-@class GDTCORUploadPackage;
-
-/** A protocol that allows a handler to respond to package lifecycle events. */
-@protocol GDTCORUploadPackageProtocol <NSObject>
-
-@optional
-
-/** Indicates that the package has expired.
- *
- * @note Package expiration will only be checked every 5 seconds.
- *
- * @param package The package that has expired.
- */
-- (void)packageExpired:(GDTCORUploadPackage *)package;
-
-/** Indicates that the package was successfully delivered.
- *
- * @param package The package that was delivered.
- */
-- (void)packageDelivered:(GDTCORUploadPackage *)package successful:(BOOL)successful;
-
-@end
-
-/** This class is a container that's handed off to uploaders. */
-@interface GDTCORUploadPackage : NSObject <NSSecureCoding>
-
-/** The set of stored events in this upload package. */
-@property(nonatomic) NSSet<GDTCOREvent *> *events;
-
-/** The expiration time. If [[GDTCORClock snapshot] isAfter:deliverByTime] this package has expired.
- *
- * @note By default, the expiration time will be 3 minutes from creation.
- */
-@property(nonatomic) GDTCORClock *deliverByTime;
-
-/** The target of this package. */
-@property(nonatomic, readonly) GDTCORTarget target;
-
-/** Initializes a package instance.
- *
- * @param target The target/destination of this package.
- * @return An instance of this class.
- */
-- (instancetype)initWithTarget:(GDTCORTarget)target;
-
-/** Completes delivery of the package.
- *
- * @note This *needs* to be called by an uploader for the package to not expire.
- */
-- (void)completeDelivery;
-
-/** Sends the package back, indicating that delivery should be attempted again in the future. */
-- (void)retryDeliveryInTheFuture;
-
-@end
diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORUploader.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORUploader.h
deleted file mode 100644
index cadee47..0000000
--- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORUploader.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2018 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#import <GoogleDataTransport/GDTCORClock.h>
-#import <GoogleDataTransport/GDTCORLifecycle.h>
-#import <GoogleDataTransport/GDTCORPrioritizer.h>
-#import <GoogleDataTransport/GDTCORTargets.h>
-#import <GoogleDataTransport/GDTCORUploadPackage.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-/** This protocol defines the common interface for uploader implementations. */
-@protocol GDTCORUploader <NSObject, GDTCORLifecycleProtocol, GDTCORUploadPackageProtocol>
-
-@required
-
-/** Returns YES if the uploader can make an upload attempt, NO otherwise.
- *
- * @param target The target being checked.
- * @param conditions The conditions that the upload attempt is likely to occur under.
- * @return YES if the uploader can make an upload attempt, NO otherwise.
- */
-- (BOOL)readyToUploadTarget:(GDTCORTarget)target conditions:(GDTCORUploadConditions)conditions;
-
-/** Uploads events to the backend using this specific backend's chosen format.
- *
- * @param package The event package to upload. Make sure to call -completeDelivery.
- */
-- (void)uploadPackage:(GDTCORUploadPackage *)package;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport.h
deleted file mode 100644
index a02451a..0000000
--- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright 2018 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "GDTCORClock.h"
-#import "GDTCORConsoleLogger.h"
-#import "GDTCOREvent.h"
-#import "GDTCOREventDataObject.h"
-#import "GDTCOREventTransformer.h"
-#import "GDTCORLifecycle.h"
-#import "GDTCORPrioritizer.h"
-#import "GDTCORRegistrar.h"
-#import "GDTCORTargets.h"
-#import "GDTCORTransport.h"
-#import "GDTCORUploadPackage.h"
-#import "GDTCORUploader.h"
diff --git a/assign5/openTok/Pods/GoogleDataTransport/LICENSE b/assign5/openTok/Pods/GoogleDataTransport/LICENSE
deleted file mode 100644
index d645695..0000000
--- a/assign5/openTok/Pods/GoogleDataTransport/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
diff --git a/assign5/openTok/Pods/GoogleDataTransport/README.md b/assign5/openTok/Pods/GoogleDataTransport/README.md
deleted file mode 100644
index b04a270..0000000
--- a/assign5/openTok/Pods/GoogleDataTransport/README.md
+++ /dev/null
@@ -1,282 +0,0 @@
-# Firebase iOS Open Source Development
- [![Actions Status][gh-auth-badge]][gh-actions]
- [![Actions Status][gh-core-badge]][gh-actions]
- [![Actions Status][gh-datatransport-badge]][gh-actions]
- [![Actions Status][gh-dynamiclinks-badge]][gh-actions]
- [![Actions Status][gh-firebasepod-badge]][gh-actions]
- [![Actions Status][gh-firestore-badge]][gh-actions]
- [![Actions Status][gh-interop-badge]][gh-actions]
- [![Actions Status][gh-messaging-badge]][gh-actions]
- [![Actions Status][gh-storage-badge]][gh-actions]
- [![Actions Status][gh-symbolcollision-badge]][gh-actions]
- [![Actions Status][gh-zip-badge]][gh-actions]
- [![Travis](https://travis-ci.org/firebase/firebase-ios-sdk.svg?branch=master)](https://travis-ci.org/firebase/firebase-ios-sdk)
-
-This repository contains all Firebase iOS SDK source except FirebaseAnalytics,
-FirebasePerformance, and FirebaseML.
-
-The repository also includes GoogleUtilities source. The
-[GoogleUtilities](GoogleUtilities/README.md) pod is
-a set of utilities used by Firebase and other Google products.
-
-Firebase is an app development platform with tools to help you build, grow and
-monetize your app. More information about Firebase can be found at
-[https://firebase.google.com](https://firebase.google.com).
-
-## Installation
-
-See the three subsections for details about three different installation methods.
-1. [Standard pod install](README.md#standard-pod-install)
-1. [Installing from the GitHub repo](README.md#installing-from-github)
-1. [Experimental Carthage](README.md#carthage-ios-only)
-
-### Standard pod install
-
-Go to
-[https://firebase.google.com/docs/ios/setup](https://firebase.google.com/docs/ios/setup).
-
-### Installing from GitHub
-
-For releases starting with 5.0.0, the source for each release is also deployed
-to CocoaPods master and available via standard
-[CocoaPods Podfile syntax](https://guides.cocoapods.org/syntax/podfile.html#pod).
-
-These instructions can be used to access the Firebase repo at other branches,
-tags, or commits.
-
-#### Background
-
-See
-[the Podfile Syntax Reference](https://guides.cocoapods.org/syntax/podfile.html#pod)
-for instructions and options about overriding pod source locations.
-
-#### Accessing Firebase Source Snapshots
-
-All of the official releases are tagged in this repo and available via CocoaPods. To access a local
-source snapshot or unreleased branch, use Podfile directives like the following:
-
-To access FirebaseFirestore via a branch:
-```
-pod 'FirebaseCore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master'
-pod 'FirebaseFirestore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master'
-```
-
-To access FirebaseMessaging via a checked out version of the firebase-ios-sdk repo do:
-
-```
-pod 'FirebaseCore', :path => '/path/to/firebase-ios-sdk'
-pod 'FirebaseMessaging', :path => '/path/to/firebase-ios-sdk'
-```
-
-### Carthage (iOS only)
-
-Instructions for the experimental Carthage distribution are at
-[Carthage](Carthage.md).
-
-### Rome
-
-Instructions for installing binary frameworks via
-[Rome](https://github.com/CocoaPods/Rome) are at [Rome](Rome.md).
-
-### Using Firebase from a Framework or a library
-
-[Using Firebase from a Framework or a library](docs/firebase_in_libraries.md)
-
-## Development
-
-To develop Firebase software in this repository, ensure that you have at least
-the following software:
-
-  * Xcode 10.1 (or later)
-  * CocoaPods 1.7.2 (or later)
-  * [CocoaPods generate](https://github.com/square/cocoapods-generate)
-
-For the pod that you want to develop:
-
-`pod gen Firebase{name here}.podspec --local-sources=./ --auto-open --platforms=ios`
-
-Note: If the CocoaPods cache is out of date, you may need to run
-`pod repo update` before the `pod gen` command.
-
-Note: Set the `--platforms` option to `macos` or `tvos` to develop/test for
-those platforms. Since 10.2, Xcode does not properly handle multi-platform
-CocoaPods workspaces.
-
-Firestore has a self contained Xcode project. See
-[Firestore/README.md](Firestore/README.md).
-
-### Development for Catalyst
-* `pod gen {name here}.podspec --local-sources=./ --auto-open --platforms=ios`
-* Check the Mac box in the App-iOS Build Settings
-* Sign the App in the Settings Signing & Capabilities tab
-* Click Pods in the Project Manager
-* Add Signing to the iOS host app and unit test targets
-* Select the Unit-unit scheme
-* Run it to build and test
-
-### Adding a New Firebase Pod
-
-See [AddNewPod.md](AddNewPod.md).
-
-### Code Formatting
-
-To ensure that the code is formatted consistently, run the script
-[./scripts/style.sh](https://github.com/firebase/firebase-ios-sdk/blob/master/scripts/style.sh)
-before creating a PR.
-
-Travis will verify that any code changes are done in a style compliant way. Install
-`clang-format` and `swiftformat`.
-These commands will get the right versions:
-
-```
-brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/c6f1cbd/Formula/clang-format.rb
-brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/c13eda8/Formula/swiftformat.rb
-```
-
-Note: if you already have a newer version of these installed you may need to
-`brew switch` to this version.
-
-To update this section, find the versions of clang-format and swiftformat.rb to
-match the versions in the CI failure logs
-[here](https://github.com/Homebrew/homebrew-core/tree/master/Formula).
-
-### Running Unit Tests
-
-Select a scheme and press Command-u to build a component and run its unit tests.
-
-#### Viewing Code Coverage (Deprecated)
-
-First, make sure that [xcov](https://github.com/nakiostudio/xcov) is installed with `gem install xcov`.
-
-After running the `AllUnitTests_iOS` scheme in Xcode, execute
-`xcov --workspace Firebase.xcworkspace --scheme AllUnitTests_iOS --output_directory xcov_output`
-at Example/ in the terminal. This will aggregate the coverage, and you can run `open xcov_output/index.html` to see the results.
-
-### Running Sample Apps
-In order to run the sample apps and integration tests, you'll need valid
-`GoogleService-Info.plist` files for those samples. The Firebase Xcode project contains dummy plist
-files without real values, but can be replaced with real plist files. To get your own
-`GoogleService-Info.plist` files:
-
-1. Go to the [Firebase Console](https://console.firebase.google.com/)
-2. Create a new Firebase project, if you don't already have one
-3. For each sample app you want to test, create a new Firebase app with the sample app's bundle
-identifier (e.g. `com.google.Database-Example`)
-4. Download the resulting `GoogleService-Info.plist` and replace the appropriate dummy plist file
-(e.g. in [Example/Database/App/](Example/Database/App/));
-
-Some sample apps like Firebase Messaging ([Example/Messaging/App](Example/Messaging/App)) require
-special Apple capabilities, and you will have to change the sample app to use a unique bundle
-identifier that you can control in your own Apple Developer account.
-
-## Specific Component Instructions
-See the sections below for any special instructions for those components.
-
-### Firebase Auth
-
-If you're doing specific Firebase Auth development, see
-[the Auth Sample README](FirebaseAuth/Tests/Sample/README.md) for instructions about
-building and running the FirebaseAuth pod along with various samples and tests.
-
-### Firebase Database
-
-To run the Database Integration tests, make your database authentication rules
-[public](https://firebase.google.com/docs/database/security/quickstart).
-
-### Firebase Storage
-
-To run the Storage Integration tests, follow the instructions in
-[FIRStorageIntegrationTests.m](FirebaseStorage/Tests/Integration/FIRStorageIntegrationTests.m).
-
-#### Push Notifications
-
-Push notifications can only be delivered to specially provisioned App IDs in the developer portal.
-In order to actually test receiving push notifications, you will need to:
-
-1. Change the bundle identifier of the sample app to something you own in your Apple Developer
-account, and enable that App ID for push notifications.
-2. You'll also need to
-[upload your APNs Provider Authentication Key or certificate to the Firebase Console](https://firebase.google.com/docs/cloud-messaging/ios/certs)
-at **Project Settings > Cloud Messaging > [Your Firebase App]**.
-3. Ensure your iOS device is added to your Apple Developer portal as a test device.
-
-#### iOS Simulator
-
-The iOS Simulator cannot register for remote notifications, and will not receive push notifications.
-In order to receive push notifications, you'll have to follow the steps above and run the app on a
-physical device.
-
-## Community Supported Efforts
-
-We've seen an amazing amount of interest and contributions to improve the Firebase SDKs, and we are
-very grateful!  We'd like to empower as many developers as we can to be able to use Firebase and
-participate in the Firebase community.
-
-### tvOS, macOS, watchOS and Catalyst
-Thanks to contributions from the community, many of Firebase SDKs now compile, run unit tests, and work on
-tvOS, macOS, watchOS and Catalyst.
-
-For tvOS, checkout the [Sample](Example/tvOSSample).
-For watchOS, currently only Messaging and Storage (and their dependencies) have limited support. Checkout the
-[Independent Watch App Sample](Example/watchOSSample).
-
-Keep in mind that macOS, tvOS, watchOS and Catalyst are not officially supported by Firebase, and this
-repository is actively developed primarily for iOS. While we can catch basic unit test issues with
-Travis, there may be some changes where the SDK no longer works as expected on macOS, tvOS or watchOS. If you
-encounter this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues).
-
-During app setup in the console, you may get to a step that mentions something like "Checking if the app
-has communicated with our servers". This relies on Analytics and will not work on macOS/tvOS/watchOS/Catalyst.
-**It's safe to ignore the message and continue**, the rest of the SDKs will work as expected.
-
-To install, add a subset of the following to the Podfile:
-
-```
-pod 'Firebase/ABTesting'     # No watchOS support yet
-pod 'Firebase/Auth'          # No watchOS support yet
-pod 'Firebase/Crashlytics'   # No watchOS support yet
-pod 'Firebase/Database'      # No watchOS support yet
-pod 'Firebase/Firestore'     # No watchOS support yet
-pod 'Firebase/Functions'     # No watchOS support yet
-pod 'Firebase/Messaging'
-pod 'Firebase/RemoteConfig'  # No watchOS support yet
-pod 'Firebase/Storage'
-```
-
-#### Additional Catalyst Notes
-
-* FirebaseAuth and FirebaseMessaging require adding `Keychain Sharing Capability`
-to Build Settings.
-* FirebaseFirestore requires signing the
-[gRPC Resource target](https://github.com/firebase/firebase-ios-sdk/issues/3500#issuecomment-518741681).
-
-## Roadmap
-
-See [Roadmap](ROADMAP.md) for more about the Firebase iOS SDK Open Source
-plans and directions.
-
-## Contributing
-
-See [Contributing](CONTRIBUTING.md) for more information on contributing to the Firebase
-iOS SDK.
-
-## License
-
-The contents of this repository is licensed under the
-[Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0).
-
-Your use of Firebase is governed by the
-[Terms of Service for Firebase Services](https://firebase.google.com/terms/).
-
-[gh-actions]: https://github.com/firebase/firebase-ios-sdk/actions
-[gh-auth-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/auth/badge.svg
-[gh-core-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/core/badge.svg
-[gh-datatransport-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/datatransport/badge.svg
-[gh-dynamiclinks-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/dynamiclinks/badge.svg
-[gh-firebasepod-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firebasepod/badge.svg
-[gh-firestore-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firestore/badge.svg
-[gh-interop-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/interop/badge.svg
-[gh-messaging-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/messaging/badge.svg
-[gh-storage-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/storage/badge.svg
-[gh-symbolcollision-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/symbolcollision/badge.svg
-[gh-zip-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/zip/badge.svg
diff --git a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTCompressionHelper.m b/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTCompressionHelper.m
deleted file mode 100644
index 9e3745f..0000000
--- a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTCompressionHelper.m
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright 2020 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "GDTCCTLibrary/Private/GDTCCTCompressionHelper.h"
-
-#import <zlib.h>
-
-@implementation GDTCCTCompressionHelper
-
-+ (nullable NSData *)gzippedData:(NSData *)data {
-#if defined(__LP64__) && __LP64__
-  // Don't support > 32bit length for 64 bit, see note in header.
-  if (data.length > UINT_MAX) {
-    return nil;
-  }
-#endif
-
-  const uint kChunkSize = 1024;
-
-  const void *bytes = [data bytes];
-  NSUInteger length = [data length];
-
-  int level = Z_DEFAULT_COMPRESSION;
-  if (!bytes || !length) {
-    return nil;
-  }
-
-  z_stream strm;
-  bzero(&strm, sizeof(z_stream));
-
-  int memLevel = 8;          // Default.
-  int windowBits = 15 + 16;  // Enable gzip header instead of zlib header.
-
-  int retCode;
-  if (deflateInit2(&strm, level, Z_DEFLATED, windowBits, memLevel, Z_DEFAULT_STRATEGY) != Z_OK) {
-    return nil;
-  }
-
-  // Hint the size at 1/4 the input size.
-  NSMutableData *result = [NSMutableData dataWithCapacity:(length / 4)];
-  unsigned char output[kChunkSize];
-
-  // Setup the input.
-  strm.avail_in = (unsigned int)length;
-  strm.next_in = (unsigned char *)bytes;
-
-  // Collect the data.
-  do {
-    // update what we're passing in
-    strm.avail_out = kChunkSize;
-    strm.next_out = output;
-    retCode = deflate(&strm, Z_FINISH);
-    if ((retCode != Z_OK) && (retCode != Z_STREAM_END)) {
-      deflateEnd(&strm);
-      return nil;
-    }
-    // Collect what we got.
-    unsigned gotBack = kChunkSize - strm.avail_out;
-    if (gotBack > 0) {
-      [result appendBytes:output length:gotBack];
-    }
-
-  } while (retCode == Z_OK);
-
-  // If the loop exits, it used all input and the stream ended.
-  NSAssert(strm.avail_in == 0,
-           @"Should have finished deflating without using all input, %u bytes left", strm.avail_in);
-  NSAssert(retCode == Z_STREAM_END,
-           @"thought we finished deflate w/o getting a result of stream end, code %d", retCode);
-
-  // Clean up.
-  deflateEnd(&strm);
-
-  return result;
-}
-
-+ (BOOL)isGzipped:(NSData *)data {
-  const UInt8 *bytes = (const UInt8 *)data.bytes;
-  return (data.length >= 2 && bytes[0] == 0x1f && bytes[1] == 0x8b);
-}
-
-@end
diff --git a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTNanopbHelpers.m b/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTNanopbHelpers.m
deleted file mode 100644
index 4b63c61..0000000
--- a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTNanopbHelpers.m
+++ /dev/null
@@ -1,270 +0,0 @@
-/*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "GDTCCTLibrary/Private/GDTCCTNanopbHelpers.h"
-
-#if TARGET_OS_IOS || TARGET_OS_TV
-#import <UIKit/UIKit.h>
-#elif TARGET_OS_OSX
-#import <AppKit/AppKit.h>
-#endif  // TARGET_OS_IOS || TARGET_OS_TV
-
-#import <GoogleDataTransport/GDTCORClock.h>
-#import <GoogleDataTransport/GDTCORConsoleLogger.h>
-#import <GoogleDataTransport/GDTCOREvent.h>
-#import <GoogleDataTransport/GDTCORPlatform.h>
-
-#import <nanopb/pb.h>
-#import <nanopb/pb_decode.h>
-#import <nanopb/pb_encode.h>
-
-#import "GDTCCTLibrary/Private/GDTCOREvent+NetworkConnectionInfo.h"
-
-#pragma mark - General purpose encoders
-
-pb_bytes_array_t *GDTCCTEncodeString(NSString *string) {
-  NSData *stringBytes = [string dataUsingEncoding:NSUTF8StringEncoding];
-  return GDTCCTEncodeData(stringBytes);
-}
-
-pb_bytes_array_t *GDTCCTEncodeData(NSData *data) {
-  pb_bytes_array_t *pbBytesArray = calloc(1, PB_BYTES_ARRAY_T_ALLOCSIZE(data.length));
-  if (pbBytesArray != NULL) {
-    [data getBytes:pbBytesArray->bytes length:data.length];
-    pbBytesArray->size = (pb_size_t)data.length;
-  }
-  return pbBytesArray;
-}
-
-#pragma mark - CCT object constructors
-
-NSData *_Nullable GDTCCTEncodeBatchedLogRequest(gdt_cct_BatchedLogRequest *batchedLogRequest) {
-  pb_ostream_t sizestream = PB_OSTREAM_SIZING;
-  // Encode 1 time to determine the size.
-  if (!pb_encode(&sizestream, gdt_cct_BatchedLogRequest_fields, batchedLogRequest)) {
-    GDTCORLogError(GDTCORMCEGeneralError, @"Error in nanopb encoding for size: %s",
-                   PB_GET_ERROR(&sizestream));
-  }
-
-  // Encode a 2nd time to actually get the bytes from it.
-  size_t bufferSize = sizestream.bytes_written;
-  CFMutableDataRef dataRef = CFDataCreateMutable(CFAllocatorGetDefault(), bufferSize);
-  CFDataSetLength(dataRef, bufferSize);
-  pb_ostream_t ostream = pb_ostream_from_buffer((void *)CFDataGetBytePtr(dataRef), bufferSize);
-  if (!pb_encode(&ostream, gdt_cct_BatchedLogRequest_fields, batchedLogRequest)) {
-    GDTCORLogError(GDTCORMCEGeneralError, @"Error in nanopb encoding for bytes: %s",
-                   PB_GET_ERROR(&ostream));
-  }
-
-  return CFBridgingRelease(dataRef);
-}
-
-gdt_cct_BatchedLogRequest GDTCCTConstructBatchedLogRequest(
-    NSDictionary<NSString *, NSSet<GDTCOREvent *> *> *logMappingIDToLogSet) {
-  gdt_cct_BatchedLogRequest batchedLogRequest = gdt_cct_BatchedLogRequest_init_default;
-  NSUInteger numberOfLogRequests = logMappingIDToLogSet.count;
-  gdt_cct_LogRequest *logRequests = calloc(numberOfLogRequests, sizeof(gdt_cct_LogRequest));
-  if (logRequests == NULL) {
-    return batchedLogRequest;
-  }
-
-  __block int i = 0;
-  [logMappingIDToLogSet enumerateKeysAndObjectsUsingBlock:^(NSString *_Nonnull logMappingID,
-                                                            NSSet<GDTCOREvent *> *_Nonnull logSet,
-                                                            BOOL *_Nonnull stop) {
-    int32_t logSource = [logMappingID intValue];
-    gdt_cct_LogRequest logRequest = GDTCCTConstructLogRequest(logSource, logSet);
-    logRequests[i] = logRequest;
-    i++;
-  }];
-
-  batchedLogRequest.log_request = logRequests;
-  batchedLogRequest.log_request_count = (pb_size_t)numberOfLogRequests;
-  return batchedLogRequest;
-}
-
-gdt_cct_LogRequest GDTCCTConstructLogRequest(int32_t logSource,
-                                             NSSet<GDTCOREvent *> *_Nonnull logSet) {
-  if (logSet.count == 0) {
-    GDTCORLogError(GDTCORMCEGeneralError, @"%@",
-                   @"An empty event set can't be serialized to proto.");
-    gdt_cct_LogRequest logRequest = gdt_cct_LogRequest_init_default;
-    return logRequest;
-  }
-  gdt_cct_LogRequest logRequest = gdt_cct_LogRequest_init_default;
-  logRequest.log_source = logSource;
-  logRequest.has_log_source = 1;
-  logRequest.client_info = GDTCCTConstructClientInfo();
-  logRequest.has_client_info = 1;
-  logRequest.log_event = calloc(logSet.count, sizeof(gdt_cct_LogEvent));
-  if (logRequest.log_event == NULL) {
-    return logRequest;
-  }
-  int i = 0;
-  for (GDTCOREvent *log in logSet) {
-    gdt_cct_LogEvent logEvent = GDTCCTConstructLogEvent(log);
-    logRequest.log_event[i] = logEvent;
-    i++;
-  }
-  logRequest.log_event_count = (pb_size_t)logSet.count;
-
-  GDTCORClock *currentTime = [GDTCORClock snapshot];
-  logRequest.request_time_ms = currentTime.timeMillis;
-  logRequest.has_request_time_ms = 1;
-  logRequest.request_uptime_ms = currentTime.uptime;
-  logRequest.has_request_uptime_ms = 1;
-
-  return logRequest;
-}
-
-gdt_cct_LogEvent GDTCCTConstructLogEvent(GDTCOREvent *event) {
-  gdt_cct_LogEvent logEvent = gdt_cct_LogEvent_init_default;
-  logEvent.event_time_ms = event.clockSnapshot.timeMillis;
-  logEvent.has_event_time_ms = 1;
-  logEvent.event_uptime_ms = event.clockSnapshot.uptime;
-  logEvent.has_event_uptime_ms = 1;
-  logEvent.timezone_offset_seconds = event.clockSnapshot.timezoneOffsetSeconds;
-  logEvent.has_timezone_offset_seconds = 1;
-  if (event.customBytes) {
-    NSData *networkConnectionInfoData = event.networkConnectionInfoData;
-    if (networkConnectionInfoData) {
-      [networkConnectionInfoData getBytes:&logEvent.network_connection_info
-                                   length:networkConnectionInfoData.length];
-      logEvent.has_network_connection_info = 1;
-    }
-  }
-  NSError *error;
-  NSData *extensionBytes;
-  if (event.fileURL) {
-    extensionBytes = [NSData dataWithContentsOfFile:event.fileURL.path options:0 error:&error];
-  } else {
-    GDTCORLogError(GDTCORMCEFileReadError, @"%@", @"An event's fileURL property was nil.");
-    return logEvent;
-  }
-  if (error) {
-    GDTCORLogWarning(GDTCORMCWFileReadError,
-                     @"There was an error reading extension bytes from disk: %@", error);
-    return logEvent;
-  }
-  logEvent.source_extension = GDTCCTEncodeData(extensionBytes);  // read bytes from the file.
-  return logEvent;
-}
-
-gdt_cct_ClientInfo GDTCCTConstructClientInfo() {
-  gdt_cct_ClientInfo clientInfo = gdt_cct_ClientInfo_init_default;
-  clientInfo.client_type = gdt_cct_ClientInfo_ClientType_IOS_FIREBASE;
-  clientInfo.has_client_type = 1;
-#if TARGET_OS_IOS || TARGET_OS_TV
-  clientInfo.ios_client_info = GDTCCTConstructiOSClientInfo();
-  clientInfo.has_ios_client_info = 1;
-#elif TARGET_OS_OSX
-  // TODO(mikehaney24): Expand the proto to include macOS client info.
-#endif
-  return clientInfo;
-}
-
-gdt_cct_IosClientInfo GDTCCTConstructiOSClientInfo() {
-  gdt_cct_IosClientInfo iOSClientInfo = gdt_cct_IosClientInfo_init_default;
-#if TARGET_OS_IOS || TARGET_OS_TV
-  UIDevice *device = [UIDevice currentDevice];
-  NSBundle *bundle = [NSBundle mainBundle];
-  NSLocale *locale = [NSLocale currentLocale];
-  iOSClientInfo.os_full_version = GDTCCTEncodeString(device.systemVersion);
-  NSArray *versionComponents = [device.systemVersion componentsSeparatedByString:@"."];
-  iOSClientInfo.os_major_version = GDTCCTEncodeString(versionComponents[0]);
-  NSString *version = [bundle objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey];
-  if (version) {
-    iOSClientInfo.application_build = GDTCCTEncodeString(version);
-  }
-  NSString *countryCode = [locale objectForKey:NSLocaleCountryCode];
-  if (countryCode) {
-    iOSClientInfo.country = GDTCCTEncodeString([locale objectForKey:NSLocaleCountryCode]);
-  }
-  iOSClientInfo.model = GDTCCTEncodeString(device.model);
-  NSString *languageCode = bundle.preferredLocalizations.firstObject;
-  iOSClientInfo.language_code =
-      languageCode ? GDTCCTEncodeString(languageCode) : GDTCCTEncodeString(@"en");
-  iOSClientInfo.application_bundle_id = GDTCCTEncodeString(bundle.bundleIdentifier);
-#endif
-  return iOSClientInfo;
-}
-
-NSData *GDTCCTConstructNetworkConnectionInfoData() {
-  gdt_cct_NetworkConnectionInfo networkConnectionInfo = gdt_cct_NetworkConnectionInfo_init_default;
-  NSInteger currentNetworkType = GDTCORNetworkTypeMessage();
-  if (currentNetworkType) {
-    networkConnectionInfo.has_network_type = 1;
-    if (currentNetworkType == GDTCORNetworkTypeMobile) {
-      networkConnectionInfo.network_type = gdt_cct_NetworkConnectionInfo_NetworkType_MOBILE;
-      networkConnectionInfo.mobile_subtype = GDTCCTNetworkConnectionInfoNetworkMobileSubtype();
-      if (networkConnectionInfo.mobile_subtype !=
-          gdt_cct_NetworkConnectionInfo_MobileSubtype_UNKNOWN_MOBILE_SUBTYPE) {
-        networkConnectionInfo.has_mobile_subtype = 1;
-      }
-    } else {
-      networkConnectionInfo.network_type = gdt_cct_NetworkConnectionInfo_NetworkType_WIFI;
-    }
-  }
-  NSData *networkConnectionInfoData = [NSData dataWithBytes:&networkConnectionInfo
-                                                     length:sizeof(networkConnectionInfo)];
-  return networkConnectionInfoData;
-}
-
-gdt_cct_NetworkConnectionInfo_MobileSubtype GDTCCTNetworkConnectionInfoNetworkMobileSubtype() {
-  NSNumber *networkMobileSubtypeMessage = @(GDTCORNetworkMobileSubTypeMessage());
-  if (!networkMobileSubtypeMessage.intValue) {
-    return gdt_cct_NetworkConnectionInfo_MobileSubtype_UNKNOWN_MOBILE_SUBTYPE;
-  }
-  static NSDictionary<NSNumber *, NSNumber *> *MessageToNetworkSubTypeMessage;
-  static dispatch_once_t onceToken;
-  dispatch_once(&onceToken, ^{
-    MessageToNetworkSubTypeMessage = @{
-      @(GDTCORNetworkMobileSubtypeGPRS) : @(gdt_cct_NetworkConnectionInfo_MobileSubtype_GPRS),
-      @(GDTCORNetworkMobileSubtypeEdge) : @(gdt_cct_NetworkConnectionInfo_MobileSubtype_EDGE),
-      @(GDTCORNetworkMobileSubtypeWCDMA) :
-          @(gdt_cct_NetworkConnectionInfo_MobileSubtype_UNKNOWN_MOBILE_SUBTYPE),
-      @(GDTCORNetworkMobileSubtypeHSDPA) : @(gdt_cct_NetworkConnectionInfo_MobileSubtype_HSDPA),
-      @(GDTCORNetworkMobileSubtypeHSUPA) : @(gdt_cct_NetworkConnectionInfo_MobileSubtype_HSUPA),
-      @(GDTCORNetworkMobileSubtypeCDMA1x) : @(gdt_cct_NetworkConnectionInfo_MobileSubtype_CDMA),
-      @(GDTCORNetworkMobileSubtypeCDMAEVDORev0) :
-          @(gdt_cct_NetworkConnectionInfo_MobileSubtype_EVDO_0),
-      @(GDTCORNetworkMobileSubtypeCDMAEVDORevA) :
-          @(gdt_cct_NetworkConnectionInfo_MobileSubtype_EVDO_A),
-      @(GDTCORNetworkMobileSubtypeCDMAEVDORevB) :
-          @(gdt_cct_NetworkConnectionInfo_MobileSubtype_EVDO_B),
-      @(GDTCORNetworkMobileSubtypeHRPD) : @(gdt_cct_NetworkConnectionInfo_MobileSubtype_EHRPD),
-      @(GDTCORNetworkMobileSubtypeLTE) : @(gdt_cct_NetworkConnectionInfo_MobileSubtype_LTE),
-    };
-  });
-  NSNumber *networkMobileSubtype = MessageToNetworkSubTypeMessage[networkMobileSubtypeMessage];
-  return networkMobileSubtype.intValue;
-}
-
-#pragma mark - CCT Object decoders
-
-gdt_cct_LogResponse GDTCCTDecodeLogResponse(NSData *data, NSError **error) {
-  gdt_cct_LogResponse response = gdt_cct_LogResponse_init_default;
-  pb_istream_t istream = pb_istream_from_buffer([data bytes], [data length]);
-  if (!pb_decode(&istream, gdt_cct_LogResponse_fields, &response)) {
-    NSString *nanopb_error = [NSString stringWithFormat:@"%s", PB_GET_ERROR(&istream)];
-    NSDictionary *userInfo = @{@"nanopb error:" : nanopb_error};
-    if (error != NULL) {
-      *error = [NSError errorWithDomain:NSURLErrorDomain code:-1 userInfo:userInfo];
-    }
-    response = (gdt_cct_LogResponse)gdt_cct_LogResponse_init_default;
-  }
-  return response;
-}
diff --git a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTPrioritizer.m b/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTPrioritizer.m
deleted file mode 100644
index 224e34c..0000000
--- a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTPrioritizer.m
+++ /dev/null
@@ -1,426 +0,0 @@
-/*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "GDTCCTLibrary/Private/GDTCCTPrioritizer.h"
-
-#import <GoogleDataTransport/GDTCORConsoleLogger.h>
-#import <GoogleDataTransport/GDTCOREvent.h>
-#import <GoogleDataTransport/GDTCORPlatform.h>
-#import <GoogleDataTransport/GDTCORRegistrar.h>
-#import <GoogleDataTransport/GDTCORTargets.h>
-
-#import "GDTCCTLibrary/Private/GDTCCTNanopbHelpers.h"
-#import "GDTCCTLibrary/Private/GDTCOREvent+NetworkConnectionInfo.h"
-
-const static int64_t kMillisPerDay = 8.64e+7;
-
-/** Creates and/or returns a singleton NSString that is the NSCoding file location.
- *
- * @return The NSCoding file path.
- */
-static NSString *ArchivePath() {
-  static NSString *archivePath;
-  static dispatch_once_t onceToken;
-  dispatch_once(&onceToken, ^{
-    archivePath = [GDTCORRootDirectory() URLByAppendingPathComponent:@"GDTCCTPrioritizer"].path;
-  });
-  return archivePath;
-}
-
-/** This class extension is for declaring private properties. */
-@interface GDTCCTPrioritizer ()
-
-/** All CCT events that have been processed by this prioritizer. */
-@property(nonatomic) NSMutableSet<GDTCOREvent *> *CCTEvents;
-
-/** All FLL events that have been processed by this prioritizer. */
-@property(nonatomic) NSMutableSet<GDTCOREvent *> *FLLEvents;
-
-/** All CSH events that have been processed by this prioritizer. */
-@property(nonatomic) NSMutableSet<GDTCOREvent *> *CSHEvents;
-
-@end
-
-@implementation GDTCCTPrioritizer
-
-+ (void)load {
-  GDTCCTPrioritizer *prioritizer = [GDTCCTPrioritizer sharedInstance];
-  [[GDTCORRegistrar sharedInstance] registerPrioritizer:prioritizer target:kGDTCORTargetCCT];
-  [[GDTCORRegistrar sharedInstance] registerPrioritizer:prioritizer target:kGDTCORTargetFLL];
-  [[GDTCORRegistrar sharedInstance] registerPrioritizer:prioritizer target:kGDTCORTargetCSH];
-}
-
-+ (BOOL)supportsSecureCoding {
-  return YES;
-}
-
-+ (instancetype)sharedInstance {
-  static GDTCCTPrioritizer *sharedInstance;
-  static dispatch_once_t onceToken;
-  dispatch_once(&onceToken, ^{
-    sharedInstance = [[GDTCCTPrioritizer alloc] init];
-  });
-  return sharedInstance;
-}
-
-- (instancetype)init {
-  self = [super init];
-  if (self) {
-    _queue = dispatch_queue_create("com.google.GDTCCTPrioritizer", DISPATCH_QUEUE_SERIAL);
-    _CCTEvents = [[NSMutableSet alloc] init];
-    _FLLEvents = [[NSMutableSet alloc] init];
-    _CSHEvents = [[NSMutableSet alloc] init];
-  }
-  return self;
-}
-
-- (nullable NSSet *)eventsForTarget:(GDTCORTarget)target {
-  __block NSSet *events;
-  dispatch_sync(_queue, ^{
-    switch (target) {
-      case kGDTCORTargetCCT:
-        events = [self->_CCTEvents copy];
-        break;
-
-      case kGDTCORTargetFLL:
-        events = [self->_FLLEvents copy];
-        break;
-
-      case kGDTCORTargetCSH:
-        events = [self->_CSHEvents copy];
-        break;
-
-      default:
-        break;
-    }
-  });
-  return events;
-}
-
-#pragma mark - GDTCORPrioritizer Protocol
-
-- (void)prioritizeEvent:(GDTCOREvent *)event {
-  if (event.needsNetworkConnectionInfoPopulated) {
-    event.networkConnectionInfoData = GDTCCTConstructNetworkConnectionInfoData();
-  }
-  dispatch_async(_queue, ^{
-    switch (event.target) {
-      case kGDTCORTargetCCT:
-        [self.CCTEvents addObject:event];
-        break;
-
-      case kGDTCORTargetFLL:
-        [self.FLLEvents addObject:event];
-        break;
-
-      case kGDTCORTargetCSH:
-        [self.CSHEvents addObject:event];
-        break;
-
-      default:
-        GDTCORLogDebug(@"GDTCCTPrioritizer doesn't support target %ld", (long)event.target);
-        break;
-    }
-  });
-}
-
-- (GDTCORUploadPackage *)uploadPackageWithTarget:(GDTCORTarget)target
-                                      conditions:(GDTCORUploadConditions)conditions {
-  GDTCORUploadPackage *package = [[GDTCORUploadPackage alloc] initWithTarget:target];
-  dispatch_sync(_queue, ^{
-    NSSet<GDTCOREvent *> *eventsThatWillBeSent = [self eventsForTarget:target
-                                                            conditions:conditions];
-    package.events = eventsThatWillBeSent;
-  });
-  GDTCORLogDebug(@"CCT: %lu events are in the upload package", (unsigned long)package.events.count);
-  return package;
-}
-
-#pragma mark - Private helper methods
-
-/** The different possible quality of service specifiers. High values indicate high priority. */
-typedef NS_ENUM(NSInteger, GDTCCTQoSTier) {
-  /** The QoS tier wasn't set, and won't ever be sent. */
-  GDTCCTQoSDefault = 0,
-
-  /** This event is internal telemetry data that should not be sent on its own if possible. */
-  GDTCCTQoSTelemetry = 1,
-
-  /** This event should be sent, but in a batch only roughly once per day. */
-  GDTCCTQoSDaily = 2,
-
-  /** This event should only be uploaded on wifi. */
-  GDTCCTQoSWifiOnly = 5,
-};
-
-- (void)saveState {
-  dispatch_sync(_queue, ^{
-    NSError *error;
-    GDTCOREncodeArchive(self, ArchivePath(), &error);
-    if (error) {
-      GDTCORLogDebug(@"Serializing GDTCCTPrioritizer to an archive failed: %@", error);
-    }
-  });
-  GDTCORLogDebug(@"GDTCCTPrioritizer saved state to %@ as requested by GDT.", ArchivePath());
-}
-
-/** Converts a GDTCOREventQoS to a GDTCCTQoS tier.
- *
- * @param qosTier The GDTCOREventQoS value.
- * @return A static NSNumber that represents the CCT QoS tier.
- */
-FOUNDATION_STATIC_INLINE
-NSNumber *GDTCCTQosTierFromGDTCOREventQosTier(GDTCOREventQoS qosTier) {
-  switch (qosTier) {
-    case GDTCOREventQoSWifiOnly:
-      return @(GDTCCTQoSWifiOnly);
-      break;
-
-    case GDTCOREventQoSTelemetry:
-      // falls through.
-    case GDTCOREventQoSDaily:
-      return @(GDTCCTQoSDaily);
-      break;
-
-    default:
-      return @(GDTCCTQoSDefault);
-      break;
-  }
-}
-
-/** Constructs a set of events for upload to CCT, FLL, or CSH backends. These backends are
- * request-proto and batching compatible, so they construct event batches the same way.
- *
- * @param conditions The set of conditions the upload package should be made under.
- * @param target The target backend.
- * @return A set of events for the target.
- */
-- (NSSet<GDTCOREvent *> *)eventsForTarget:(GDTCORTarget)target
-                               conditions:(GDTCORUploadConditions)conditions {
-  GDTCORClock __strong **timeOfLastDailyUpload = NULL;
-  NSSet<GDTCOREvent *> *eventsToFilter;
-  switch (target) {
-    case kGDTCORTargetCCT:
-      eventsToFilter = self.CCTEvents;
-      timeOfLastDailyUpload = &self->_CCTTimeOfLastDailyUpload;
-      break;
-
-    case kGDTCORTargetFLL:
-      eventsToFilter = self.FLLEvents;
-      timeOfLastDailyUpload = &self->_FLLOfLastDailyUpload;
-      break;
-
-    case kGDTCORTargetCSH:
-      // This backend doesn't batch and uploads all events as soon as possible without respect to
-      // any upload condition.
-      return self.CSHEvents;
-      break;
-
-    default:
-      // Return an empty set.
-      return [[NSSet alloc] init];
-      break;
-  }
-
-  NSMutableSet<GDTCOREvent *> *eventsThatWillBeSent = [[NSMutableSet alloc] init];
-  // A high priority event effectively flushes all events to be sent.
-  if ((conditions & GDTCORUploadConditionHighPriority) == GDTCORUploadConditionHighPriority) {
-    GDTCORLogDebug(@"%@", @"CCT: A high priority event is flushing all events.");
-    return eventsToFilter;
-  }
-
-  // If on wifi, upload logs that are ok to send on wifi.
-  if ((conditions & GDTCORUploadConditionWifiData) == GDTCORUploadConditionWifiData) {
-    [eventsThatWillBeSent unionSet:[self logEventsOkToSendOnWifi:eventsToFilter]];
-    GDTCORLogDebug(@"%@", @"CCT: events ok to send on wifi are being added to the upload package");
-  } else {
-    [eventsThatWillBeSent unionSet:[self logEventsOkToSendOnMobileData:eventsToFilter]];
-    GDTCORLogDebug(@"%@",
-                   @"CCT: events ok to send on mobile are being added to the upload package");
-  }
-
-  // If it's been > 24h since the last daily upload, upload logs with the daily QoS.
-  if (*timeOfLastDailyUpload) {
-    int64_t millisSinceLastUpload =
-        [GDTCORClock snapshot].timeMillis - (*timeOfLastDailyUpload).timeMillis;
-    if (millisSinceLastUpload > kMillisPerDay) {
-      [eventsThatWillBeSent unionSet:[self logEventsOkToSendDaily:eventsToFilter]];
-      GDTCORLogDebug(@"%@", @"CCT: events ok to send daily are being added to the upload package");
-    }
-  } else {
-    *timeOfLastDailyUpload = [GDTCORClock snapshot];
-    [eventsThatWillBeSent unionSet:[self logEventsOkToSendDaily:eventsToFilter]];
-    GDTCORLogDebug(@"%@", @"CCT: events ok to send daily are being added to the upload package");
-  }
-  return eventsThatWillBeSent;
-}
-
-/** Returns a set of logs that are ok to upload whilst on mobile data.
- *
- * @note This should be called from a thread safe method.
- * @return A set of logs that are ok to upload whilst on mobile data.
- */
-- (NSSet<GDTCOREvent *> *)logEventsOkToSendOnMobileData:(NSSet<GDTCOREvent *> *)events {
-  return [events objectsPassingTest:^BOOL(GDTCOREvent *_Nonnull event, BOOL *_Nonnull stop) {
-    return [GDTCCTQosTierFromGDTCOREventQosTier(event.qosTier) isEqual:@(GDTCCTQoSDefault)];
-  }];
-}
-
-/** Returns a set of logs that are ok to upload whilst on wifi.
- *
- * @note This should be called from a thread safe method.
- * @return A set of logs that are ok to upload whilst on wifi.
- */
-- (NSSet<GDTCOREvent *> *)logEventsOkToSendOnWifi:(NSSet<GDTCOREvent *> *)events {
-  return [events objectsPassingTest:^BOOL(GDTCOREvent *_Nonnull event, BOOL *_Nonnull stop) {
-    NSNumber *qosTier = GDTCCTQosTierFromGDTCOREventQosTier(event.qosTier);
-    return [qosTier isEqual:@(GDTCCTQoSDefault)] || [qosTier isEqual:@(GDTCCTQoSWifiOnly)] ||
-           [qosTier isEqual:@(GDTCCTQoSDaily)];
-  }];
-}
-
-/** Returns a set of logs that only should have a single upload attempt per day.
- *
- * @note This should be called from a thread safe method.
- * @return A set of logs that are ok to upload only once per day.
- */
-- (NSSet<GDTCOREvent *> *)logEventsOkToSendDaily:(NSSet<GDTCOREvent *> *)events {
-  return [events objectsPassingTest:^BOOL(GDTCOREvent *_Nonnull event, BOOL *_Nonnull stop) {
-    return [GDTCCTQosTierFromGDTCOREventQosTier(event.qosTier) isEqual:@(GDTCCTQoSDaily)];
-  }];
-}
-
-#pragma mark - NSSecureCoding
-
-/** NSSecureCoding key for the CCTEvents property. */
-static NSString *const GDTCCTUploaderCCTEventsKey = @"GDTCCTUploaderCCTEventsKey";
-
-/** NSSecureCoding key for the CCTEvents property. */
-static NSString *const GDTCCTUploaderFLLEventsKey = @"GDTCCTUploaderFLLEventsKey";
-
-/** NSSecureCoding key for the CCTEvents property. */
-static NSString *const GDTCCTUploaderCSHEventsKey = @"GDTCCTUploaderCSHEventsKey";
-
-- (instancetype)initWithCoder:(NSCoder *)coder {
-  GDTCCTPrioritizer *sharedInstance = [GDTCCTPrioritizer sharedInstance];
-  if (sharedInstance) {
-    NSSet *classes = [NSSet setWithObjects:[NSMutableSet class], [GDTCOREvent class], nil];
-    NSMutableSet *decodedCCTEvents = [coder decodeObjectOfClasses:classes
-                                                           forKey:GDTCCTUploaderCCTEventsKey];
-    if (decodedCCTEvents) {
-      sharedInstance->_CCTEvents = decodedCCTEvents;
-    }
-    NSMutableSet *decodedFLLEvents = [coder decodeObjectOfClasses:classes
-                                                           forKey:GDTCCTUploaderFLLEventsKey];
-    if (decodedFLLEvents) {
-      sharedInstance->_FLLEvents = decodedFLLEvents;
-    }
-    NSMutableSet *decodedCSHEvents = [coder decodeObjectOfClasses:classes
-                                                           forKey:GDTCCTUploaderCSHEventsKey];
-    if (decodedCSHEvents) {
-      sharedInstance->_CSHEvents = decodedCSHEvents;
-    }
-  }
-  return sharedInstance;
-}
-
-- (void)encodeWithCoder:(NSCoder *)coder {
-  GDTCCTPrioritizer *sharedInstance = [GDTCCTPrioritizer sharedInstance];
-  if (!sharedInstance) {
-    return;
-  }
-  NSMutableSet<GDTCOREvent *> *CCTEvents = sharedInstance->_CCTEvents;
-  if (CCTEvents) {
-    [coder encodeObject:CCTEvents forKey:GDTCCTUploaderCCTEventsKey];
-  }
-  NSMutableSet<GDTCOREvent *> *FLLEvents = sharedInstance->_FLLEvents;
-  if (FLLEvents) {
-    [coder encodeObject:FLLEvents forKey:GDTCCTUploaderFLLEventsKey];
-  }
-  NSMutableSet<GDTCOREvent *> *CSHEvents = sharedInstance->_CSHEvents;
-  if (CSHEvents) {
-    [coder encodeObject:CSHEvents forKey:GDTCCTUploaderCSHEventsKey];
-  }
-}
-
-#pragma mark - GDTCORLifecycleProtocol
-
-- (void)appWillForeground:(GDTCORApplication *)app {
-  dispatch_async(_queue, ^{
-    NSError *error;
-    GDTCORDecodeArchive([GDTCCTPrioritizer class], ArchivePath(), nil, &error);
-    if (error) {
-      GDTCORLogDebug(@"Deserializing GDTCCTPrioritizer from an archive failed: %@", error);
-    }
-  });
-}
-
-- (void)appWillBackground:(GDTCORApplication *)app {
-  dispatch_async(_queue, ^{
-    // Immediately request a background task to run until the end of the current queue of work, and
-    // cancel it once the work is done.
-    __block GDTCORBackgroundIdentifier bgID =
-        [app beginBackgroundTaskWithName:@"GDTStorage"
-                       expirationHandler:^{
-                         [app endBackgroundTask:bgID];
-                         bgID = GDTCORBackgroundIdentifierInvalid;
-                       }];
-    NSError *error;
-    GDTCOREncodeArchive(self, ArchivePath(), &error);
-    if (error) {
-      GDTCORLogDebug(@"Serializing GDTCCTPrioritizer to an archive failed: %@", error);
-    }
-
-    // End the background task if it's still valid.
-    [app endBackgroundTask:bgID];
-    bgID = GDTCORBackgroundIdentifierInvalid;
-  });
-}
-
-- (void)appWillTerminate:(GDTCORApplication *)application {
-  dispatch_sync(_queue, ^{
-    NSError *error;
-    GDTCOREncodeArchive(self, ArchivePath(), &error);
-    if (error) {
-      GDTCORLogDebug(@"Serializing GDTCCTPrioritizer to an archive failed: %@", error);
-    }
-  });
-}
-
-#pragma mark - GDTCORUploadPackageProtocol
-
-- (void)packageDelivered:(GDTCORUploadPackage *)package successful:(BOOL)successful {
-  // If sending the package wasn't successful, we should keep track of these events.
-  if (!successful) {
-    return;
-  }
-
-  dispatch_async(_queue, ^{
-    NSSet<GDTCOREvent *> *events = [package.events copy];
-    for (GDTCOREvent *event in events) {
-      // We don't know what collection the event was contained in, so attempt removal from all.
-      [self.CCTEvents removeObject:event];
-      [self.FLLEvents removeObject:event];
-      [self.CSHEvents removeObject:event];
-    }
-  });
-}
-
-- (void)packageExpired:(GDTCORUploadPackage *)package {
-  [self packageDelivered:package successful:YES];
-}
-
-@end
diff --git a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTUploader.m b/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTUploader.m
deleted file mode 100644
index f50c9bf..0000000
--- a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTUploader.m
+++ /dev/null
@@ -1,441 +0,0 @@
-/*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "GDTCCTLibrary/Private/GDTCCTUploader.h"
-
-#import <GoogleDataTransport/GDTCORConsoleLogger.h>
-#import <GoogleDataTransport/GDTCORPlatform.h>
-#import <GoogleDataTransport/GDTCORRegistrar.h>
-
-#import <nanopb/pb.h>
-#import <nanopb/pb_decode.h>
-#import <nanopb/pb_encode.h>
-
-#import "GDTCCTLibrary/Private/GDTCCTCompressionHelper.h"
-#import "GDTCCTLibrary/Private/GDTCCTNanopbHelpers.h"
-#import "GDTCCTLibrary/Private/GDTCCTPrioritizer.h"
-
-#import "GDTCCTLibrary/Protogen/nanopb/cct.nanopb.h"
-
-#ifdef GDTCCTSUPPORT_VERSION
-#define STR(x) STR_EXPAND(x)
-#define STR_EXPAND(x) #x
-static NSString *const kGDTCCTSupportSDKVersion = @STR(GDTCCTSUPPORT_VERSION);
-#else
-static NSString *const kGDTCCTSupportSDKVersion = @"UNKNOWN";
-#endif  // GDTCCTSUPPORT_VERSION
-
-#if !NDEBUG
-NSNotificationName const GDTCCTUploadCompleteNotification = @"com.GDTCCTUploader.UploadComplete";
-#endif  // #if !NDEBUG
-
-@interface GDTCCTUploader () <NSURLSessionDelegate>
-
-// Redeclared as readwrite.
-@property(nullable, nonatomic, readwrite) NSURLSessionUploadTask *currentTask;
-
-@end
-
-@implementation GDTCCTUploader
-
-+ (void)load {
-  GDTCCTUploader *uploader = [GDTCCTUploader sharedInstance];
-  [[GDTCORRegistrar sharedInstance] registerUploader:uploader target:kGDTCORTargetCCT];
-  [[GDTCORRegistrar sharedInstance] registerUploader:uploader target:kGDTCORTargetFLL];
-  [[GDTCORRegistrar sharedInstance] registerUploader:uploader target:kGDTCORTargetCSH];
-}
-
-+ (instancetype)sharedInstance {
-  static GDTCCTUploader *sharedInstance;
-  static dispatch_once_t onceToken;
-  dispatch_once(&onceToken, ^{
-    sharedInstance = [[GDTCCTUploader alloc] init];
-  });
-  return sharedInstance;
-}
-
-- (instancetype)init {
-  self = [super init];
-  if (self) {
-    _uploaderQueue = dispatch_queue_create("com.google.GDTCCTUploader", DISPATCH_QUEUE_SERIAL);
-    NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
-    _uploaderSession = [NSURLSession sessionWithConfiguration:config
-                                                     delegate:self
-                                                delegateQueue:nil];
-  }
-  return self;
-}
-
-/**
- *
- */
-- (nullable NSURL *)serverURLForTarget:(GDTCORTarget)target {
-  // These strings should be interleaved to construct the real URL. This is just to (hopefully)
-  // fool github URL scanning bots.
-  static NSURL *CCTServerURL;
-  static dispatch_once_t CCTOnceToken;
-  dispatch_once(&CCTOnceToken, ^{
-    const char *p1 = "hts/frbslgiggolai.o/0clgbth";
-    const char *p2 = "tp:/ieaeogn.ogepscmvc/o/ac";
-    const char URL[54] = {p1[0],  p2[0],  p1[1],  p2[1],  p1[2],  p2[2],  p1[3],  p2[3],  p1[4],
-                          p2[4],  p1[5],  p2[5],  p1[6],  p2[6],  p1[7],  p2[7],  p1[8],  p2[8],
-                          p1[9],  p2[9],  p1[10], p2[10], p1[11], p2[11], p1[12], p2[12], p1[13],
-                          p2[13], p1[14], p2[14], p1[15], p2[15], p1[16], p2[16], p1[17], p2[17],
-                          p1[18], p2[18], p1[19], p2[19], p1[20], p2[20], p1[21], p2[21], p1[22],
-                          p2[22], p1[23], p2[23], p1[24], p2[24], p1[25], p2[25], p1[26], '\0'};
-    CCTServerURL = [NSURL URLWithString:[NSString stringWithUTF8String:URL]];
-  });
-
-  static NSURL *FLLServerURL;
-  static dispatch_once_t FLLOnceToken;
-  dispatch_once(&FLLOnceToken, ^{
-    const char *p1 = "hts/frbslgigp.ogepscmv/ieo/eaybtho";
-    const char *p2 = "tp:/ieaeogn-agolai.o/1frlglgc/aclg";
-    const char URL[69] = {p1[0],  p2[0],  p1[1],  p2[1],  p1[2],  p2[2],  p1[3],  p2[3],  p1[4],
-                          p2[4],  p1[5],  p2[5],  p1[6],  p2[6],  p1[7],  p2[7],  p1[8],  p2[8],
-                          p1[9],  p2[9],  p1[10], p2[10], p1[11], p2[11], p1[12], p2[12], p1[13],
-                          p2[13], p1[14], p2[14], p1[15], p2[15], p1[16], p2[16], p1[17], p2[17],
-                          p1[18], p2[18], p1[19], p2[19], p1[20], p2[20], p1[21], p2[21], p1[22],
-                          p2[22], p1[23], p2[23], p1[24], p2[24], p1[25], p2[25], p1[26], p2[26],
-                          p1[27], p2[27], p1[28], p2[28], p1[29], p2[29], p1[30], p2[30], p1[31],
-                          p2[31], p1[32], p2[32], p1[33], p2[33], '\0'};
-    FLLServerURL = [NSURL URLWithString:[NSString stringWithUTF8String:URL]];
-  });
-
-  static NSURL *CSHServerURL;
-  static dispatch_once_t CSHOnceToken;
-  dispatch_once(&CSHOnceToken, ^{
-    // These strings should be interleaved to construct the real URL. This is just to (hopefully)
-    // fool github URL scanning bots.
-    const char *p1 = "hts/cahyiseot-agolai.o/1frlglgc/aclg";
-    const char *p2 = "tp:/rsltcrprsp.ogepscmv/ieo/eaybtho";
-    const char URL[72] = {p1[0],  p2[0],  p1[1],  p2[1],  p1[2],  p2[2],  p1[3],  p2[3],  p1[4],
-                          p2[4],  p1[5],  p2[5],  p1[6],  p2[6],  p1[7],  p2[7],  p1[8],  p2[8],
-                          p1[9],  p2[9],  p1[10], p2[10], p1[11], p2[11], p1[12], p2[12], p1[13],
-                          p2[13], p1[14], p2[14], p1[15], p2[15], p1[16], p2[16], p1[17], p2[17],
-                          p1[18], p2[18], p1[19], p2[19], p1[20], p2[20], p1[21], p2[21], p1[22],
-                          p2[22], p1[23], p2[23], p1[24], p2[24], p1[25], p2[25], p1[26], p2[26],
-                          p1[27], p2[27], p1[28], p2[28], p1[29], p2[29], p1[30], p2[30], p1[31],
-                          p2[31], p1[32], p2[32], p1[33], p2[33], p1[34], p2[34], p1[35], '\0'};
-    CSHServerURL = [NSURL URLWithString:[NSString stringWithUTF8String:URL]];
-  });
-
-#if !NDEBUG
-  if (_testServerURL) {
-    return _testServerURL;
-  }
-#endif  // !NDEBUG
-
-  switch (target) {
-    case kGDTCORTargetCCT:
-      return CCTServerURL;
-
-    case kGDTCORTargetFLL:
-      return FLLServerURL;
-
-    case kGDTCORTargetCSH:
-      return CSHServerURL;
-
-    default:
-      GDTCORLogDebug(@"GDTCCTUploader doesn't support target %ld", (long)target);
-      return nil;
-      break;
-  }
-}
-
-- (NSString *)FLLAndCSHAPIKey {
-  static NSString *defaultServerKey;
-  static dispatch_once_t onceToken;
-  dispatch_once(&onceToken, ^{
-    // These strings should be interleaved to construct the real key.
-    const char *p1 = "AzSBG0honD6A-PxV5nBc";
-    const char *p2 = "Iay44Iwtu2vV0AOrz1C";
-    const char defaultKey[40] = {p1[0],  p2[0],  p1[1],  p2[1],  p1[2],  p2[2],  p1[3],  p2[3],
-                                 p1[4],  p2[4],  p1[5],  p2[5],  p1[6],  p2[6],  p1[7],  p2[7],
-                                 p1[8],  p2[8],  p1[9],  p2[9],  p1[10], p2[10], p1[11], p2[11],
-                                 p1[12], p2[12], p1[13], p2[13], p1[14], p2[14], p1[15], p2[15],
-                                 p1[16], p2[16], p1[17], p2[17], p1[18], p2[18], p1[19], '\0'};
-    defaultServerKey = [NSString stringWithUTF8String:defaultKey];
-  });
-  return defaultServerKey;
-}
-
-- (void)uploadPackage:(GDTCORUploadPackage *)package {
-  __block GDTCORBackgroundIdentifier bgID = GDTCORBackgroundIdentifierInvalid;
-  bgID = [[GDTCORApplication sharedApplication]
-      beginBackgroundTaskWithName:@"GDTCCTUploader-upload"
-                expirationHandler:^{
-                  if (bgID != GDTCORBackgroundIdentifierInvalid) {
-                    // Cancel the upload and complete delivery.
-                    [self.currentTask cancel];
-                    [self.currentUploadPackage completeDelivery];
-
-                    // End the background task.
-                    [[GDTCORApplication sharedApplication] endBackgroundTask:bgID];
-                  }
-                }];
-
-  dispatch_async(_uploaderQueue, ^{
-    if (self->_currentTask || self->_currentUploadPackage) {
-      GDTCORLogWarning(GDTCORMCWUploadFailed, @"%@",
-                       @"An upload shouldn't be initiated with another in progress.");
-      return;
-    }
-    GDTCORTarget target = package.target;
-    id completionHandler = ^(NSData *_Nullable data, NSURLResponse *_Nullable response,
-                             NSError *_Nullable error) {
-      GDTCORLogDebug(@"%@", @"CCT: request completed");
-      if (error) {
-        GDTCORLogWarning(GDTCORMCWUploadFailed, @"There was an error uploading events: %@", error);
-      }
-      NSError *decodingError;
-      GDTCORClock *futureUploadTime;
-      if (data) {
-        gdt_cct_LogResponse logResponse = GDTCCTDecodeLogResponse(data, &decodingError);
-        if (!decodingError && logResponse.has_next_request_wait_millis) {
-          GDTCORLogDebug(
-              @"CCT: The backend responded asking to not upload for %lld millis from now.",
-              logResponse.next_request_wait_millis);
-          futureUploadTime =
-              [GDTCORClock clockSnapshotInTheFuture:logResponse.next_request_wait_millis];
-        } else if (decodingError) {
-          GDTCORLogDebug(@"There was a response decoding error: %@", decodingError);
-        }
-        pb_release(gdt_cct_LogResponse_fields, &logResponse);
-      }
-      if (!futureUploadTime) {
-        GDTCORLogDebug(@"%@", @"CCT: The backend response failed to parse, so the next request "
-                              @"won't occur until 15 minutes from now");
-        // 15 minutes from now.
-        futureUploadTime = [GDTCORClock clockSnapshotInTheFuture:15 * 60 * 1000];
-      }
-      switch (target) {
-        case kGDTCORTargetCCT:
-          self->_CCTNextUploadTime = futureUploadTime;
-          break;
-
-        case kGDTCORTargetFLL:
-          // Falls through.
-        case kGDTCORTargetCSH:
-          self->_FLLNextUploadTime = futureUploadTime;
-        default:
-          break;
-      }
-
-      // Only retry if one of these codes is returned, or there was an error.
-      if (error || ((NSHTTPURLResponse *)response).statusCode == 429 ||
-          ((NSHTTPURLResponse *)response).statusCode == 503) {
-        [package retryDeliveryInTheFuture];
-      } else {
-#if !NDEBUG
-        // Post a notification when in DEBUG mode to state how many packages were uploaded. Useful
-        // for validation during tests.
-        [[NSNotificationCenter defaultCenter] postNotificationName:GDTCCTUploadCompleteNotification
-                                                            object:@(package.events.count)];
-#endif  // #if !NDEBUG
-        GDTCORLogDebug(@"%@", @"CCT: package delivered");
-        [package completeDelivery];
-      }
-
-      // End the background task if there was one.
-      if (bgID != GDTCORBackgroundIdentifierInvalid) {
-        [[GDTCORApplication sharedApplication] endBackgroundTask:bgID];
-        bgID = GDTCORBackgroundIdentifierInvalid;
-      }
-      self.currentTask = nil;
-      self.currentUploadPackage = nil;
-    };
-    self->_currentUploadPackage = package;
-    NSData *requestProtoData =
-        [self constructRequestProtoFromPackage:(GDTCORUploadPackage *)package];
-    NSData *gzippedData = [GDTCCTCompressionHelper gzippedData:requestProtoData];
-    BOOL usingGzipData = gzippedData != nil && gzippedData.length < requestProtoData.length;
-    NSData *dataToSend = usingGzipData ? gzippedData : requestProtoData;
-    NSURLRequest *request = [self constructRequestForTarget:target data:dataToSend];
-    GDTCORLogDebug(@"CTT: request created: %@", request);
-    self.currentTask = [self.uploaderSession uploadTaskWithRequest:request
-                                                          fromData:dataToSend
-                                                 completionHandler:completionHandler];
-    GDTCORLogDebug(@"%@", @"CCT: The upload task is about to begin.");
-    [self.currentTask resume];
-  });
-}
-
-- (BOOL)readyToUploadTarget:(GDTCORTarget)target conditions:(GDTCORUploadConditions)conditions {
-  __block BOOL result = NO;
-  NSSet *CSHEvents = [[GDTCCTPrioritizer sharedInstance] eventsForTarget:kGDTCORTargetCSH];
-  dispatch_sync(_uploaderQueue, ^{
-    if (target == kGDTCORTargetCSH) {
-      result = CSHEvents.count > 0;
-      return;
-    }
-
-    if (self->_currentUploadPackage) {
-      result = NO;
-      GDTCORLogDebug(@"%@", @"CCT: can't upload because a package is in flight");
-      return;
-    }
-    if (self->_currentTask) {
-      result = NO;
-      GDTCORLogDebug(@"%@", @"CCT: can't upload because a task is in progress");
-      return;
-    }
-    if ((conditions & GDTCORUploadConditionHighPriority) == GDTCORUploadConditionHighPriority) {
-      result = YES;
-      GDTCORLogDebug(@"%@", @"CCT: a high priority event is allowing an upload");
-      return;
-    }
-    switch (target) {
-      case kGDTCORTargetCCT:
-        if (self->_CCTNextUploadTime) {
-          result = [[GDTCORClock snapshot] isAfter:self->_CCTNextUploadTime];
-        }
-        break;
-
-      case kGDTCORTargetFLL:
-        if (self->_FLLNextUploadTime) {
-          result = [[GDTCORClock snapshot] isAfter:self->_FLLNextUploadTime];
-        }
-        break;
-
-      default:
-        // The CSH backend should be handled above.
-        break;
-    }
-    if (result) {
-      GDTCORLogDebug(@"CCT: can upload to target %ld because the request wait time has transpired",
-                     (long)target);
-    } else {
-      GDTCORLogDebug(@"CCT: can't upload to target %ld because the backend asked to wait",
-                     (long)target);
-    }
-    result = YES;
-    GDTCORLogDebug(@"CCT: can upload to target %ld because nothing is preventing it", (long)target);
-  });
-  return result;
-}
-
-#pragma mark - Private helper methods
-
-/** Constructs data given an upload package.
- *
- * @param package The upload package used to construct the request proto bytes.
- * @return Proto bytes representing a gdt_cct_LogRequest object.
- */
-- (nonnull NSData *)constructRequestProtoFromPackage:(GDTCORUploadPackage *)package {
-  // Segment the log events by log type.
-  NSMutableDictionary<NSString *, NSMutableSet<GDTCOREvent *> *> *logMappingIDToLogSet =
-      [[NSMutableDictionary alloc] init];
-  [package.events enumerateObjectsUsingBlock:^(GDTCOREvent *_Nonnull event, BOOL *_Nonnull stop) {
-    NSMutableSet *logSet = logMappingIDToLogSet[event.mappingID];
-    logSet = logSet ? logSet : [[NSMutableSet alloc] init];
-    [logSet addObject:event];
-    logMappingIDToLogSet[event.mappingID] = logSet;
-  }];
-
-  gdt_cct_BatchedLogRequest batchedLogRequest =
-      GDTCCTConstructBatchedLogRequest(logMappingIDToLogSet);
-
-  NSData *data = GDTCCTEncodeBatchedLogRequest(&batchedLogRequest);
-  pb_release(gdt_cct_BatchedLogRequest_fields, &batchedLogRequest);
-  return data ? data : [[NSData alloc] init];
-}
-
-/** Constructs a request to FLL given a URL and request body data.
- *
- * @param target The target backend to send the request to.
- * @param data The request body data.
- * @return A new NSURLRequest ready to be sent to FLL.
- */
-- (NSURLRequest *)constructRequestForTarget:(GDTCORTarget)target data:(NSData *)data {
-  NSURL *URL = [self serverURLForTarget:target];
-  NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];
-  NSString *targetString;
-  switch (target) {
-    case kGDTCORTargetCCT:
-      targetString = @"cct";
-      break;
-
-    case kGDTCORTargetFLL:
-      targetString = @"fll";
-      break;
-
-    case kGDTCORTargetCSH:
-      targetString = @"csh";
-      break;
-
-    default:
-      targetString = @"unknown";
-      break;
-  }
-  NSString *userAgent =
-      [NSString stringWithFormat:@"datatransport/%@ %@support/%@ apple/", kGDTCORVersion,
-                                 targetString, kGDTCCTSupportSDKVersion];
-  if (target == kGDTCORTargetFLL || target == kGDTCORTargetCSH) {
-    [request setValue:[self FLLAndCSHAPIKey] forHTTPHeaderField:@"X-Goog-Api-Key"];
-  }
-  if ([GDTCCTCompressionHelper isGzipped:data]) {
-    [request setValue:@"gzip" forHTTPHeaderField:@"Content-Encoding"];
-  }
-  [request setValue:@"application/x-protobuf" forHTTPHeaderField:@"Content-Type"];
-  [request setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"];
-  [request setValue:userAgent forHTTPHeaderField:@"User-Agent"];
-  request.HTTPMethod = @"POST";
-  [request setHTTPBody:data];
-  return request;
-}
-
-#pragma mark - GDTCORUploadPackageProtocol
-
-- (void)packageExpired:(GDTCORUploadPackage *)package {
-  dispatch_async(_uploaderQueue, ^{
-    [self.currentTask cancel];
-    self.currentTask = nil;
-    self.currentUploadPackage = nil;
-  });
-}
-
-#pragma mark - GDTCORLifecycleProtocol
-
-- (void)appWillTerminate:(GDTCORApplication *)application {
-  dispatch_sync(_uploaderQueue, ^{
-    [self.currentTask cancel];
-    [self.currentUploadPackage completeDelivery];
-  });
-}
-
-#pragma mark - NSURLSessionDelegate
-
-- (void)URLSession:(NSURLSession *)session
-                          task:(NSURLSessionTask *)task
-    willPerformHTTPRedirection:(NSHTTPURLResponse *)response
-                    newRequest:(NSURLRequest *)request
-             completionHandler:(void (^)(NSURLRequest *_Nullable))completionHandler {
-  if (!completionHandler) {
-    return;
-  }
-  if (response.statusCode == 302 || response.statusCode == 301) {
-    if ([request.URL isEqual:[self serverURLForTarget:kGDTCORTargetFLL]]) {
-      NSURLRequest *newRequest = [self constructRequestForTarget:kGDTCORTargetCCT
-                                                            data:task.originalRequest.HTTPBody];
-      completionHandler(newRequest);
-    }
-  } else {
-    completionHandler(request);
-  }
-}
-
-@end
diff --git a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCOREvent+NetworkConnectionInfo.m b/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCOREvent+NetworkConnectionInfo.m
deleted file mode 100644
index 4337f43..0000000
--- a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCOREvent+NetworkConnectionInfo.m
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright 2020 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "GDTCCTLibrary/Private/GDTCOREvent+NetworkConnectionInfo.h"
-
-#import <GoogleDataTransport/GDTCORConsoleLogger.h>
-
-NSString *const GDTCCTNeedsNetworkConnectionInfo = @"needs_network_connection_info";
-
-NSString *const GDTCCTNetworkConnectionInfo = @"network_connection_info";
-
-@implementation GDTCOREvent (CCTNetworkConnectionInfo)
-
-- (void)setNeedsNetworkConnectionInfoPopulated:(BOOL)needsNetworkConnectionInfoPopulated {
-  if (!needsNetworkConnectionInfoPopulated) {
-    self.customBytes = nil;
-  } else {
-    @try {
-      NSError *error;
-      self.customBytes =
-          [NSJSONSerialization dataWithJSONObject:@{GDTCCTNeedsNetworkConnectionInfo : @YES}
-                                          options:0
-                                            error:&error];
-    } @catch (NSException *exception) {
-      GDTCORLogDebug(@"Error when setting the event for needs_network_connection_info: %@",
-                     exception);
-    }
-  }
-}
-
-- (BOOL)needsNetworkConnectionInfoPopulated {
-  if (self.customBytes) {
-    @try {
-      NSError *error;
-      NSDictionary *bytesDict = [NSJSONSerialization JSONObjectWithData:self.customBytes
-                                                                options:0
-                                                                  error:&error];
-      return bytesDict && !error && [bytesDict[GDTCCTNeedsNetworkConnectionInfo] boolValue];
-    } @catch (NSException *exception) {
-      GDTCORLogDebug(@"Error when checking the event for needs_network_connection_info: %@",
-                     exception);
-    }
-  }
-  return NO;
-}
-
-- (void)setNetworkConnectionInfoData:(NSData *)networkConnectionInfoData {
-  @try {
-    NSError *error;
-    NSString *dataString = [networkConnectionInfoData base64EncodedStringWithOptions:0];
-    if (dataString) {
-      self.customBytes =
-          [NSJSONSerialization dataWithJSONObject:@{GDTCCTNetworkConnectionInfo : dataString}
-                                          options:0
-                                            error:&error];
-      if (error) {
-        self.customBytes = nil;
-        GDTCORLogDebug(@"Error when setting an event's network_connection_info: %@", error);
-      }
-    }
-  } @catch (NSException *exception) {
-    GDTCORLogDebug(@"Error when setting an event's network_connection_info: %@", exception);
-  }
-}
-
-- (nullable NSData *)networkConnectionInfoData {
-  if (self.customBytes) {
-    @try {
-      NSError *error;
-      NSDictionary *bytesDict = [NSJSONSerialization JSONObjectWithData:self.customBytes
-                                                                options:0
-                                                                  error:&error];
-      NSString *base64Data = bytesDict[GDTCCTNetworkConnectionInfo];
-      NSData *networkConnectionInfoData = [[NSData alloc] initWithBase64EncodedString:base64Data
-                                                                              options:0];
-      if (error) {
-        GDTCORLogDebug(@"Error when getting an event's network_connection_info: %@", error);
-        return nil;
-      } else {
-        return networkConnectionInfoData;
-      }
-    } @catch (NSException *exception) {
-      GDTCORLogDebug(@"Error when getting an event's network_connection_info: %@", exception);
-    }
-  }
-  return nil;
-}
-
-@end
diff --git a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTCompressionHelper.h b/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTCompressionHelper.h
deleted file mode 100644
index 08d0a4b..0000000
--- a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTCompressionHelper.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright 2020 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-/** A class with methods to help with gzipped data. */
-@interface GDTCCTCompressionHelper : NSObject
-
-/** Compresses the given data and returns a new data object.
- *
- * @note Reduced version from GULNSData+zlib.m of GoogleUtilities.
- * @return Compressed data, or nil if there was an error.
- */
-+ (nullable NSData *)gzippedData:(NSData *)data;
-
-/** Returns YES if the data looks like it was gzip compressed by checking for the gzip magic number.
- *
- * @note: From https://en.wikipedia.org/wiki/Gzip, gzip's magic number is 1f 8b.
- * @return YES if the data appears gzipped, NO otherwise.
- */
-+ (BOOL)isGzipped:(NSData *)data;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTNanopbHelpers.h b/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTNanopbHelpers.h
deleted file mode 100644
index 8051f0e..0000000
--- a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTNanopbHelpers.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#import <GoogleDataTransport/GDTCOREvent.h>
-#import <GoogleDataTransport/GDTCORReachability.h>
-
-#import "GDTCCTLibrary/Protogen/nanopb/cct.nanopb.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-#pragma mark - General purpose encoders
-
-/** Converts an NSString* to a pb_bytes_array_t*.
- *
- * @note calloc is called in this method. Ensure that pb_release is called on this or the parent.
- *
- * @param string The string to convert.
- * @return A newly allocated array of bytes representing the UTF8 encoding of the string.
- */
-pb_bytes_array_t *GDTCCTEncodeString(NSString *string);
-
-/** Converts an NSData to a pb_bytes_array_t*.
- *
- * @note calloc is called in this method. Ensure that pb_release is called on this or the parent.
- *
- * @param data The data to convert.
- * @return A newly allocated array of bytes with [data bytes] copied into it.
- */
-pb_bytes_array_t *GDTCCTEncodeData(NSData *data);
-
-#pragma mark - CCT object constructors
-
-/** Encodes a batched log request.
- *
- * @note Ensure that pb_release is called on the batchedLogRequest param.
- *
- * @param batchedLogRequest A pointer to the log batch to encode to bytes.
- * @return An NSData object representing the bytes of the log request batch.
- */
-FOUNDATION_EXPORT
-NSData *GDTCCTEncodeBatchedLogRequest(gdt_cct_BatchedLogRequest *batchedLogRequest);
-
-/** Constructs a gdt_cct_BatchedLogRequest given sets of events segemented by mapping ID.
- *
- * @note calloc is called in this method. Ensure that pb_release is called on this or the parent.
- *
- * @param logMappingIDToLogSet A map of mapping IDs to sets of events to convert into a batch.
- * @return A newly created gdt_cct_BatchedLogRequest.
- */
-FOUNDATION_EXPORT
-gdt_cct_BatchedLogRequest GDTCCTConstructBatchedLogRequest(
-    NSDictionary<NSString *, NSSet<GDTCOREvent *> *> *logMappingIDToLogSet);
-
-/** Constructs a log request given a log source and a set of events.
- *
- * @note calloc is called in this method. Ensure that pb_release is called on this or the parent.
- * @param logSource The CCT log source to put into the log request.
- * @param logSet The set of events to send in this log request.
- */
-FOUNDATION_EXPORT
-gdt_cct_LogRequest GDTCCTConstructLogRequest(int32_t logSource, NSSet<GDTCOREvent *> *logSet);
-
-/** Constructs a gdt_cct_LogEvent given a GDTCOREvent*.
- *
- * @param event The GDTCOREvent to convert.
- * @return The new gdt_cct_LogEvent object.
- */
-FOUNDATION_EXPORT
-gdt_cct_LogEvent GDTCCTConstructLogEvent(GDTCOREvent *event);
-
-/** Constructs a gdt_cct_ClientInfo representing the client device.
- *
- * @return The new gdt_cct_ClientInfo object.
- */
-FOUNDATION_EXPORT
-gdt_cct_ClientInfo GDTCCTConstructClientInfo(void);
-
-/** Constructs a gdt_cct_IosClientInfo representing the client device.
- *
- * @return The new gdt_cct_IosClientInfo object.
- */
-FOUNDATION_EXPORT
-gdt_cct_IosClientInfo GDTCCTConstructiOSClientInfo(void);
-
-/** Constructs the data of a gdt_cct_NetworkConnectionInfo representing the client nework connection
- * information.
- *
- * @return The data of a gdt_cct_NetworkConnectionInfo object.
- */
-FOUNDATION_EXPORT
-NSData *GDTCCTConstructNetworkConnectionInfoData(void);
-
-/** Return a gdt_cct_NetworkConnectionInfo_MobileSubtype representing the client
- *
- * @return The gdt_cct_NetworkConnectionInfo_MobileSubtype.
- */
-FOUNDATION_EXPORT
-gdt_cct_NetworkConnectionInfo_MobileSubtype GDTCCTNetworkConnectionInfoNetworkMobileSubtype(void);
-
-#pragma mark - CCT object decoders
-
-/** Decodes a gdt_cct_LogResponse given proto bytes.
- *
- * @note calloc is called in this method. Ensure that pb_release is called on the return value.
- *
- * @param data The proto bytes of the gdt_cct_LogResponse.
- * @param error An error that will be populated if something went wrong during decoding.
- * @return A newly allocated gdt_cct_LogResponse from the data, if the bytes decoded properly.
- */
-FOUNDATION_EXPORT
-gdt_cct_LogResponse GDTCCTDecodeLogResponse(NSData *data, NSError **error);
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTPrioritizer.h b/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTPrioritizer.h
deleted file mode 100644
index 7b7921b..0000000
--- a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTPrioritizer.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#import <GoogleDataTransport/GDTCORClock.h>
-#import <GoogleDataTransport/GDTCOREvent.h>
-#import <GoogleDataTransport/GDTCORPrioritizer.h>
-#import <GoogleDataTransport/GDTCORTargets.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-/** Manages the prioritization of events from GoogleDataTransport. */
-@interface GDTCCTPrioritizer : NSObject <NSSecureCoding, GDTCORPrioritizer>
-
-/** The queue on which this prioritizer operates. */
-@property(nonatomic) dispatch_queue_t queue;
-
-/** The most recent attempted upload of CCT daily uploaded logs. */
-@property(nonatomic) GDTCORClock *CCTTimeOfLastDailyUpload;
-
-/** The most recent attempted upload of FLL daily uploaded logs*/
-@property(nonatomic) GDTCORClock *FLLOfLastDailyUpload;
-
-/** Creates and/or returns the singleton instance of this class.
- *
- * @return The singleton instance of this class.
- */
-+ (instancetype)sharedInstance;
-
-/** Returns a set of events that have been prioritized for the given target.
- *
- * @param target The target to check. CCT, FLL, and CSH are currently supported by this class.
- * @return The set of events prioritized so far.
- */
-- (nullable NSSet *)eventsForTarget:(GDTCORTarget)target;
-
-NS_ASSUME_NONNULL_END
-
-@end
diff --git a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTUploader.h b/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTUploader.h
deleted file mode 100644
index cdc322d..0000000
--- a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTUploader.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#import <GoogleDataTransport/GDTCORUploader.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-#if !NDEBUG
-/** A notification fired when uploading is complete, detailing the number of events uploaded. */
-extern NSNotificationName const GDTCCTUploadCompleteNotification;
-#endif  // #if !NDEBUG
-
-/** Class capable of uploading events to the CCT backend. */
-@interface GDTCCTUploader : NSObject <GDTCORUploader>
-
-/** The queue on which all CCT uploading will occur. */
-@property(nonatomic, readonly) dispatch_queue_t uploaderQueue;
-
-/** The URL session that will attempt upload. */
-@property(nonatomic, readonly) NSURLSession *uploaderSession;
-
-/** The current upload task. */
-@property(nullable, nonatomic, readonly) NSURLSessionUploadTask *currentTask;
-
-/** Current upload package. */
-@property(nullable, nonatomic) GDTCORUploadPackage *currentUploadPackage;
-
-/** The next upload time for the CCT target. */
-@property(nullable, nonatomic) GDTCORClock *CCTNextUploadTime;
-
-/** The next upload time for the FLL target. */
-@property(nullable, nonatomic) GDTCORClock *FLLNextUploadTime;
-
-#if !NDEBUG
-/** An upload URL used across all targets. For testing only. */
-@property(nullable, nonatomic) NSURL *testServerURL;
-
-#endif  // !NDEBUG
-
-/** Creates and/or returns the singleton instance of this class.
- *
- * @return The singleton instance of this class.
- */
-+ (instancetype)sharedInstance;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCOREvent+NetworkConnectionInfo.h b/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCOREvent+NetworkConnectionInfo.h
deleted file mode 100644
index 1c1512d..0000000
--- a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCOREvent+NetworkConnectionInfo.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright 2020 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <GoogleDataTransport/GDTCOREvent.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-/** A string sets in customBytes as a key paired to @YES if current event needs to
- * populate network connection info data, @NO otherwise.
- */
-FOUNDATION_EXPORT NSString *const GDTCCTNeedsNetworkConnectionInfo;
-
-/** A string sets in customBytes as a key paired to the network connection info data
- * of current event.
- */
-FOUNDATION_EXPORT NSString *const GDTCCTNetworkConnectionInfo;
-
-/** A category that uses the customBytes property of a GDTCOREvent to store network connection info.
- */
-@interface GDTCOREvent (CCTNetworkConnectionInfo)
-
-/** If YES, needs the network connection info field set during prioritization.
- * @note Uses the GDTCOREvent customBytes property.
- */
-@property(nonatomic) BOOL needsNetworkConnectionInfoPopulated;
-
-/** The network connection info as collected at the time of the event.
- * @note Uses the GDTCOREvent customBytes property.
- */
-@property(nullable, nonatomic) NSData *networkConnectionInfoData;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.c b/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.c
deleted file mode 100644
index 95846e6..0000000
--- a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.c
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* Automatically generated nanopb constant definitions */
-/* Generated by nanopb-0.3.9.3 */
-
-#include "cct.nanopb.h"
-
-/* @@protoc_insertion_point(includes) */
-#if PB_PROTO_HEADER_VERSION != 30
-#error Regenerate this file with the current version of nanopb generator.
-#endif
-
-const gdt_cct_NetworkConnectionInfo_NetworkType gdt_cct_NetworkConnectionInfo_network_type_default = gdt_cct_NetworkConnectionInfo_NetworkType_NONE;
-const gdt_cct_NetworkConnectionInfo_MobileSubtype gdt_cct_NetworkConnectionInfo_mobile_subtype_default = gdt_cct_NetworkConnectionInfo_MobileSubtype_UNKNOWN_MOBILE_SUBTYPE;
-const gdt_cct_QosTierConfiguration_QosTier gdt_cct_LogRequest_qos_tier_default = gdt_cct_QosTierConfiguration_QosTier_DEFAULT;
-const int32_t gdt_cct_QosTierConfiguration_log_source_default = 0;
-
-
-const pb_field_t gdt_cct_LogEvent_fields[7] = {
-    PB_FIELD(  1, INT64   , OPTIONAL, STATIC  , FIRST, gdt_cct_LogEvent, event_time_ms, event_time_ms, 0),
-    PB_FIELD(  6, BYTES   , OPTIONAL, POINTER , OTHER, gdt_cct_LogEvent, source_extension, event_time_ms, 0),
-    PB_FIELD( 11, INT32   , OPTIONAL, STATIC  , OTHER, gdt_cct_LogEvent, event_code, source_extension, 0),
-    PB_FIELD( 15, SINT64  , OPTIONAL, STATIC  , OTHER, gdt_cct_LogEvent, timezone_offset_seconds, event_code, 0),
-    PB_FIELD( 17, INT64   , OPTIONAL, STATIC  , OTHER, gdt_cct_LogEvent, event_uptime_ms, timezone_offset_seconds, 0),
-    PB_FIELD( 23, MESSAGE , OPTIONAL, STATIC  , OTHER, gdt_cct_LogEvent, network_connection_info, event_uptime_ms, &gdt_cct_NetworkConnectionInfo_fields),
-    PB_LAST_FIELD
-};
-
-const pb_field_t gdt_cct_NetworkConnectionInfo_fields[3] = {
-    PB_FIELD(  1, ENUM    , OPTIONAL, STATIC  , FIRST, gdt_cct_NetworkConnectionInfo, network_type, network_type, &gdt_cct_NetworkConnectionInfo_network_type_default),
-    PB_FIELD(  2, UENUM   , OPTIONAL, STATIC  , OTHER, gdt_cct_NetworkConnectionInfo, mobile_subtype, network_type, &gdt_cct_NetworkConnectionInfo_mobile_subtype_default),
-    PB_LAST_FIELD
-};
-
-const pb_field_t gdt_cct_IosClientInfo_fields[8] = {
-    PB_FIELD(  3, BYTES   , OPTIONAL, POINTER , FIRST, gdt_cct_IosClientInfo, os_major_version, os_major_version, 0),
-    PB_FIELD(  4, BYTES   , OPTIONAL, POINTER , OTHER, gdt_cct_IosClientInfo, os_full_version, os_major_version, 0),
-    PB_FIELD(  5, BYTES   , OPTIONAL, POINTER , OTHER, gdt_cct_IosClientInfo, application_build, os_full_version, 0),
-    PB_FIELD(  6, BYTES   , OPTIONAL, POINTER , OTHER, gdt_cct_IosClientInfo, country, application_build, 0),
-    PB_FIELD(  7, BYTES   , OPTIONAL, POINTER , OTHER, gdt_cct_IosClientInfo, model, country, 0),
-    PB_FIELD(  8, BYTES   , OPTIONAL, POINTER , OTHER, gdt_cct_IosClientInfo, language_code, model, 0),
-    PB_FIELD( 11, BYTES   , OPTIONAL, POINTER , OTHER, gdt_cct_IosClientInfo, application_bundle_id, language_code, 0),
-    PB_LAST_FIELD
-};
-
-const pb_field_t gdt_cct_ClientInfo_fields[3] = {
-    PB_FIELD(  1, UENUM   , OPTIONAL, STATIC  , FIRST, gdt_cct_ClientInfo, client_type, client_type, 0),
-    PB_FIELD(  4, MESSAGE , OPTIONAL, STATIC  , OTHER, gdt_cct_ClientInfo, ios_client_info, client_type, &gdt_cct_IosClientInfo_fields),
-    PB_LAST_FIELD
-};
-
-const pb_field_t gdt_cct_BatchedLogRequest_fields[2] = {
-    PB_FIELD(  1, MESSAGE , REPEATED, POINTER , FIRST, gdt_cct_BatchedLogRequest, log_request, log_request, &gdt_cct_LogRequest_fields),
-    PB_LAST_FIELD
-};
-
-const pb_field_t gdt_cct_LogRequest_fields[7] = {
-    PB_FIELD(  1, MESSAGE , OPTIONAL, STATIC  , FIRST, gdt_cct_LogRequest, client_info, client_info, &gdt_cct_ClientInfo_fields),
-    PB_FIELD(  2, INT32   , OPTIONAL, STATIC  , OTHER, gdt_cct_LogRequest, log_source, client_info, 0),
-    PB_FIELD(  3, MESSAGE , REPEATED, POINTER , OTHER, gdt_cct_LogRequest, log_event, log_source, &gdt_cct_LogEvent_fields),
-    PB_FIELD(  4, INT64   , OPTIONAL, STATIC  , OTHER, gdt_cct_LogRequest, request_time_ms, log_event, 0),
-    PB_FIELD(  8, INT64   , OPTIONAL, STATIC  , OTHER, gdt_cct_LogRequest, request_uptime_ms, request_time_ms, 0),
-    PB_FIELD(  9, UENUM   , OPTIONAL, STATIC  , OTHER, gdt_cct_LogRequest, qos_tier, request_uptime_ms, &gdt_cct_LogRequest_qos_tier_default),
-    PB_LAST_FIELD
-};
-
-const pb_field_t gdt_cct_QosTierConfiguration_fields[3] = {
-    PB_FIELD(  2, UENUM   , OPTIONAL, STATIC  , FIRST, gdt_cct_QosTierConfiguration, qos_tier, qos_tier, 0),
-    PB_FIELD(  3, INT32   , OPTIONAL, STATIC  , OTHER, gdt_cct_QosTierConfiguration, log_source, qos_tier, &gdt_cct_QosTierConfiguration_log_source_default),
-    PB_LAST_FIELD
-};
-
-const pb_field_t gdt_cct_QosTiersOverride_fields[3] = {
-    PB_FIELD(  1, MESSAGE , REPEATED, POINTER , FIRST, gdt_cct_QosTiersOverride, qos_tier_configuration, qos_tier_configuration, &gdt_cct_QosTierConfiguration_fields),
-    PB_FIELD(  2, INT64   , OPTIONAL, STATIC  , OTHER, gdt_cct_QosTiersOverride, qos_tier_fingerprint, qos_tier_configuration, 0),
-    PB_LAST_FIELD
-};
-
-const pb_field_t gdt_cct_LogResponse_fields[3] = {
-    PB_FIELD(  1, INT64   , OPTIONAL, STATIC  , FIRST, gdt_cct_LogResponse, next_request_wait_millis, next_request_wait_millis, 0),
-    PB_FIELD(  3, MESSAGE , OPTIONAL, STATIC  , OTHER, gdt_cct_LogResponse, qos_tier, next_request_wait_millis, &gdt_cct_QosTiersOverride_fields),
-    PB_LAST_FIELD
-};
-
-
-
-
-
-
-/* Check that field information fits in pb_field_t */
-#if !defined(PB_FIELD_32BIT)
-/* If you get an error here, it means that you need to define PB_FIELD_32BIT
- * compile-time option. You can do that in pb.h or on compiler command line.
- * 
- * The reason you need to do this is that some of your messages contain tag
- * numbers or field sizes that are larger than what can fit in 8 or 16 bit
- * field descriptors.
- */
-PB_STATIC_ASSERT((pb_membersize(gdt_cct_LogEvent, network_connection_info) < 65536 && pb_membersize(gdt_cct_ClientInfo, ios_client_info) < 65536 && pb_membersize(gdt_cct_LogRequest, client_info) < 65536 && pb_membersize(gdt_cct_LogResponse, qos_tier) < 65536), YOU_MUST_DEFINE_PB_FIELD_32BIT_FOR_MESSAGES_gdt_cct_LogEvent_gdt_cct_NetworkConnectionInfo_gdt_cct_IosClientInfo_gdt_cct_ClientInfo_gdt_cct_BatchedLogRequest_gdt_cct_LogRequest_gdt_cct_QosTierConfiguration_gdt_cct_QosTiersOverride_gdt_cct_LogResponse)
-#endif
-
-#if !defined(PB_FIELD_16BIT) && !defined(PB_FIELD_32BIT)
-/* If you get an error here, it means that you need to define PB_FIELD_16BIT
- * compile-time option. You can do that in pb.h or on compiler command line.
- * 
- * The reason you need to do this is that some of your messages contain tag
- * numbers or field sizes that are larger than what can fit in the default
- * 8 bit descriptors.
- */
-PB_STATIC_ASSERT((pb_membersize(gdt_cct_LogEvent, network_connection_info) < 256 && pb_membersize(gdt_cct_ClientInfo, ios_client_info) < 256 && pb_membersize(gdt_cct_LogRequest, client_info) < 256 && pb_membersize(gdt_cct_LogResponse, qos_tier) < 256), YOU_MUST_DEFINE_PB_FIELD_16BIT_FOR_MESSAGES_gdt_cct_LogEvent_gdt_cct_NetworkConnectionInfo_gdt_cct_IosClientInfo_gdt_cct_ClientInfo_gdt_cct_BatchedLogRequest_gdt_cct_LogRequest_gdt_cct_QosTierConfiguration_gdt_cct_QosTiersOverride_gdt_cct_LogResponse)
-#endif
-
-
-/* @@protoc_insertion_point(eof) */
diff --git a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.h b/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.h
deleted file mode 100644
index a6d4cfb..0000000
--- a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.h
+++ /dev/null
@@ -1,281 +0,0 @@
-/*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* Automatically generated nanopb header */
-/* Generated by nanopb-0.3.9.3 */
-
-#ifndef PB_GDT_CCT_CCT_NANOPB_H_INCLUDED
-#define PB_GDT_CCT_CCT_NANOPB_H_INCLUDED
-#include <nanopb/pb.h>
-
-/* @@protoc_insertion_point(includes) */
-#if PB_PROTO_HEADER_VERSION != 30
-#error Regenerate this file with the current version of nanopb generator.
-#endif
-
-
-/* Enum definitions */
-typedef enum _gdt_cct_NetworkConnectionInfo_NetworkType {
-    gdt_cct_NetworkConnectionInfo_NetworkType_NONE = -1,
-    gdt_cct_NetworkConnectionInfo_NetworkType_MOBILE = 0,
-    gdt_cct_NetworkConnectionInfo_NetworkType_WIFI = 1,
-    gdt_cct_NetworkConnectionInfo_NetworkType_MOBILE_MMS = 2,
-    gdt_cct_NetworkConnectionInfo_NetworkType_MOBILE_SUPL = 3,
-    gdt_cct_NetworkConnectionInfo_NetworkType_MOBILE_DUN = 4,
-    gdt_cct_NetworkConnectionInfo_NetworkType_MOBILE_HIPRI = 5,
-    gdt_cct_NetworkConnectionInfo_NetworkType_WIMAX = 6,
-    gdt_cct_NetworkConnectionInfo_NetworkType_BLUETOOTH = 7,
-    gdt_cct_NetworkConnectionInfo_NetworkType_DUMMY = 8,
-    gdt_cct_NetworkConnectionInfo_NetworkType_ETHERNET = 9,
-    gdt_cct_NetworkConnectionInfo_NetworkType_MOBILE_FOTA = 10,
-    gdt_cct_NetworkConnectionInfo_NetworkType_MOBILE_IMS = 11,
-    gdt_cct_NetworkConnectionInfo_NetworkType_MOBILE_CBS = 12,
-    gdt_cct_NetworkConnectionInfo_NetworkType_WIFI_P2P = 13,
-    gdt_cct_NetworkConnectionInfo_NetworkType_MOBILE_IA = 14,
-    gdt_cct_NetworkConnectionInfo_NetworkType_MOBILE_EMERGENCY = 15,
-    gdt_cct_NetworkConnectionInfo_NetworkType_PROXY = 16,
-    gdt_cct_NetworkConnectionInfo_NetworkType_VPN = 17
-} gdt_cct_NetworkConnectionInfo_NetworkType;
-#define _gdt_cct_NetworkConnectionInfo_NetworkType_MIN gdt_cct_NetworkConnectionInfo_NetworkType_NONE
-#define _gdt_cct_NetworkConnectionInfo_NetworkType_MAX gdt_cct_NetworkConnectionInfo_NetworkType_VPN
-#define _gdt_cct_NetworkConnectionInfo_NetworkType_ARRAYSIZE ((gdt_cct_NetworkConnectionInfo_NetworkType)(gdt_cct_NetworkConnectionInfo_NetworkType_VPN+1))
-
-typedef enum _gdt_cct_NetworkConnectionInfo_MobileSubtype {
-    gdt_cct_NetworkConnectionInfo_MobileSubtype_UNKNOWN_MOBILE_SUBTYPE = 0,
-    gdt_cct_NetworkConnectionInfo_MobileSubtype_GPRS = 1,
-    gdt_cct_NetworkConnectionInfo_MobileSubtype_EDGE = 2,
-    gdt_cct_NetworkConnectionInfo_MobileSubtype_UMTS = 3,
-    gdt_cct_NetworkConnectionInfo_MobileSubtype_CDMA = 4,
-    gdt_cct_NetworkConnectionInfo_MobileSubtype_EVDO_0 = 5,
-    gdt_cct_NetworkConnectionInfo_MobileSubtype_EVDO_A = 6,
-    gdt_cct_NetworkConnectionInfo_MobileSubtype_RTT = 7,
-    gdt_cct_NetworkConnectionInfo_MobileSubtype_HSDPA = 8,
-    gdt_cct_NetworkConnectionInfo_MobileSubtype_HSUPA = 9,
-    gdt_cct_NetworkConnectionInfo_MobileSubtype_HSPA = 10,
-    gdt_cct_NetworkConnectionInfo_MobileSubtype_IDEN = 11,
-    gdt_cct_NetworkConnectionInfo_MobileSubtype_EVDO_B = 12,
-    gdt_cct_NetworkConnectionInfo_MobileSubtype_LTE = 13,
-    gdt_cct_NetworkConnectionInfo_MobileSubtype_EHRPD = 14,
-    gdt_cct_NetworkConnectionInfo_MobileSubtype_HSPAP = 15,
-    gdt_cct_NetworkConnectionInfo_MobileSubtype_GSM = 16,
-    gdt_cct_NetworkConnectionInfo_MobileSubtype_TD_SCDMA = 17,
-    gdt_cct_NetworkConnectionInfo_MobileSubtype_IWLAN = 18,
-    gdt_cct_NetworkConnectionInfo_MobileSubtype_LTE_CA = 19,
-    gdt_cct_NetworkConnectionInfo_MobileSubtype_COMBINED = 100
-} gdt_cct_NetworkConnectionInfo_MobileSubtype;
-#define _gdt_cct_NetworkConnectionInfo_MobileSubtype_MIN gdt_cct_NetworkConnectionInfo_MobileSubtype_UNKNOWN_MOBILE_SUBTYPE
-#define _gdt_cct_NetworkConnectionInfo_MobileSubtype_MAX gdt_cct_NetworkConnectionInfo_MobileSubtype_COMBINED
-#define _gdt_cct_NetworkConnectionInfo_MobileSubtype_ARRAYSIZE ((gdt_cct_NetworkConnectionInfo_MobileSubtype)(gdt_cct_NetworkConnectionInfo_MobileSubtype_COMBINED+1))
-
-typedef enum _gdt_cct_ClientInfo_ClientType {
-    gdt_cct_ClientInfo_ClientType_CLIENT_UNKNOWN = 0,
-    gdt_cct_ClientInfo_ClientType_IOS_FIREBASE = 15
-} gdt_cct_ClientInfo_ClientType;
-#define _gdt_cct_ClientInfo_ClientType_MIN gdt_cct_ClientInfo_ClientType_CLIENT_UNKNOWN
-#define _gdt_cct_ClientInfo_ClientType_MAX gdt_cct_ClientInfo_ClientType_IOS_FIREBASE
-#define _gdt_cct_ClientInfo_ClientType_ARRAYSIZE ((gdt_cct_ClientInfo_ClientType)(gdt_cct_ClientInfo_ClientType_IOS_FIREBASE+1))
-
-typedef enum _gdt_cct_QosTierConfiguration_QosTier {
-    gdt_cct_QosTierConfiguration_QosTier_DEFAULT = 0,
-    gdt_cct_QosTierConfiguration_QosTier_UNMETERED_ONLY = 1,
-    gdt_cct_QosTierConfiguration_QosTier_UNMETERED_OR_DAILY = 2,
-    gdt_cct_QosTierConfiguration_QosTier_FAST_IF_RADIO_AWAKE = 3,
-    gdt_cct_QosTierConfiguration_QosTier_NEVER = 4
-} gdt_cct_QosTierConfiguration_QosTier;
-#define _gdt_cct_QosTierConfiguration_QosTier_MIN gdt_cct_QosTierConfiguration_QosTier_DEFAULT
-#define _gdt_cct_QosTierConfiguration_QosTier_MAX gdt_cct_QosTierConfiguration_QosTier_NEVER
-#define _gdt_cct_QosTierConfiguration_QosTier_ARRAYSIZE ((gdt_cct_QosTierConfiguration_QosTier)(gdt_cct_QosTierConfiguration_QosTier_NEVER+1))
-
-/* Struct definitions */
-typedef struct _gdt_cct_BatchedLogRequest {
-    pb_size_t log_request_count;
-    struct _gdt_cct_LogRequest *log_request;
-/* @@protoc_insertion_point(struct:gdt_cct_BatchedLogRequest) */
-} gdt_cct_BatchedLogRequest;
-
-typedef struct _gdt_cct_IosClientInfo {
-    pb_bytes_array_t *os_major_version;
-    pb_bytes_array_t *os_full_version;
-    pb_bytes_array_t *application_build;
-    pb_bytes_array_t *country;
-    pb_bytes_array_t *model;
-    pb_bytes_array_t *language_code;
-    pb_bytes_array_t *application_bundle_id;
-/* @@protoc_insertion_point(struct:gdt_cct_IosClientInfo) */
-} gdt_cct_IosClientInfo;
-
-typedef struct _gdt_cct_ClientInfo {
-    bool has_client_type;
-    gdt_cct_ClientInfo_ClientType client_type;
-    bool has_ios_client_info;
-    gdt_cct_IosClientInfo ios_client_info;
-/* @@protoc_insertion_point(struct:gdt_cct_ClientInfo) */
-} gdt_cct_ClientInfo;
-
-typedef struct _gdt_cct_NetworkConnectionInfo {
-    bool has_network_type;
-    gdt_cct_NetworkConnectionInfo_NetworkType network_type;
-    bool has_mobile_subtype;
-    gdt_cct_NetworkConnectionInfo_MobileSubtype mobile_subtype;
-/* @@protoc_insertion_point(struct:gdt_cct_NetworkConnectionInfo) */
-} gdt_cct_NetworkConnectionInfo;
-
-typedef struct _gdt_cct_QosTierConfiguration {
-    bool has_qos_tier;
-    gdt_cct_QosTierConfiguration_QosTier qos_tier;
-    bool has_log_source;
-    int32_t log_source;
-/* @@protoc_insertion_point(struct:gdt_cct_QosTierConfiguration) */
-} gdt_cct_QosTierConfiguration;
-
-typedef struct _gdt_cct_QosTiersOverride {
-    pb_size_t qos_tier_configuration_count;
-    struct _gdt_cct_QosTierConfiguration *qos_tier_configuration;
-    bool has_qos_tier_fingerprint;
-    int64_t qos_tier_fingerprint;
-/* @@protoc_insertion_point(struct:gdt_cct_QosTiersOverride) */
-} gdt_cct_QosTiersOverride;
-
-typedef struct _gdt_cct_LogEvent {
-    bool has_event_time_ms;
-    int64_t event_time_ms;
-    pb_bytes_array_t *source_extension;
-    bool has_event_code;
-    int32_t event_code;
-    bool has_timezone_offset_seconds;
-    int64_t timezone_offset_seconds;
-    bool has_event_uptime_ms;
-    int64_t event_uptime_ms;
-    bool has_network_connection_info;
-    gdt_cct_NetworkConnectionInfo network_connection_info;
-/* @@protoc_insertion_point(struct:gdt_cct_LogEvent) */
-} gdt_cct_LogEvent;
-
-typedef struct _gdt_cct_LogRequest {
-    bool has_client_info;
-    gdt_cct_ClientInfo client_info;
-    bool has_log_source;
-    int32_t log_source;
-    pb_size_t log_event_count;
-    struct _gdt_cct_LogEvent *log_event;
-    bool has_request_time_ms;
-    int64_t request_time_ms;
-    bool has_request_uptime_ms;
-    int64_t request_uptime_ms;
-    bool has_qos_tier;
-    gdt_cct_QosTierConfiguration_QosTier qos_tier;
-/* @@protoc_insertion_point(struct:gdt_cct_LogRequest) */
-} gdt_cct_LogRequest;
-
-typedef struct _gdt_cct_LogResponse {
-    bool has_next_request_wait_millis;
-    int64_t next_request_wait_millis;
-    bool has_qos_tier;
-    gdt_cct_QosTiersOverride qos_tier;
-/* @@protoc_insertion_point(struct:gdt_cct_LogResponse) */
-} gdt_cct_LogResponse;
-
-/* Default values for struct fields */
-extern const gdt_cct_NetworkConnectionInfo_NetworkType gdt_cct_NetworkConnectionInfo_network_type_default;
-extern const gdt_cct_NetworkConnectionInfo_MobileSubtype gdt_cct_NetworkConnectionInfo_mobile_subtype_default;
-extern const gdt_cct_QosTierConfiguration_QosTier gdt_cct_LogRequest_qos_tier_default;
-extern const int32_t gdt_cct_QosTierConfiguration_log_source_default;
-
-/* Initializer values for message structs */
-#define gdt_cct_LogEvent_init_default            {false, 0, NULL, false, 0, false, 0, false, 0, false, gdt_cct_NetworkConnectionInfo_init_default}
-#define gdt_cct_NetworkConnectionInfo_init_default {false, gdt_cct_NetworkConnectionInfo_NetworkType_NONE, false, gdt_cct_NetworkConnectionInfo_MobileSubtype_UNKNOWN_MOBILE_SUBTYPE}
-#define gdt_cct_IosClientInfo_init_default       {NULL, NULL, NULL, NULL, NULL, NULL, NULL}
-#define gdt_cct_ClientInfo_init_default          {false, _gdt_cct_ClientInfo_ClientType_MIN, false, gdt_cct_IosClientInfo_init_default}
-#define gdt_cct_BatchedLogRequest_init_default   {0, NULL}
-#define gdt_cct_LogRequest_init_default          {false, gdt_cct_ClientInfo_init_default, false, 0, 0, NULL, false, 0, false, 0, false, gdt_cct_QosTierConfiguration_QosTier_DEFAULT}
-#define gdt_cct_QosTierConfiguration_init_default {false, _gdt_cct_QosTierConfiguration_QosTier_MIN, false, 0}
-#define gdt_cct_QosTiersOverride_init_default    {0, NULL, false, 0}
-#define gdt_cct_LogResponse_init_default         {false, 0, false, gdt_cct_QosTiersOverride_init_default}
-#define gdt_cct_LogEvent_init_zero               {false, 0, NULL, false, 0, false, 0, false, 0, false, gdt_cct_NetworkConnectionInfo_init_zero}
-#define gdt_cct_NetworkConnectionInfo_init_zero  {false, _gdt_cct_NetworkConnectionInfo_NetworkType_MIN, false, _gdt_cct_NetworkConnectionInfo_MobileSubtype_MIN}
-#define gdt_cct_IosClientInfo_init_zero          {NULL, NULL, NULL, NULL, NULL, NULL, NULL}
-#define gdt_cct_ClientInfo_init_zero             {false, _gdt_cct_ClientInfo_ClientType_MIN, false, gdt_cct_IosClientInfo_init_zero}
-#define gdt_cct_BatchedLogRequest_init_zero      {0, NULL}
-#define gdt_cct_LogRequest_init_zero             {false, gdt_cct_ClientInfo_init_zero, false, 0, 0, NULL, false, 0, false, 0, false, _gdt_cct_QosTierConfiguration_QosTier_MIN}
-#define gdt_cct_QosTierConfiguration_init_zero   {false, _gdt_cct_QosTierConfiguration_QosTier_MIN, false, 0}
-#define gdt_cct_QosTiersOverride_init_zero       {0, NULL, false, 0}
-#define gdt_cct_LogResponse_init_zero            {false, 0, false, gdt_cct_QosTiersOverride_init_zero}
-
-/* Field tags (for use in manual encoding/decoding) */
-#define gdt_cct_BatchedLogRequest_log_request_tag 1
-#define gdt_cct_IosClientInfo_os_major_version_tag 3
-#define gdt_cct_IosClientInfo_os_full_version_tag 4
-#define gdt_cct_IosClientInfo_application_build_tag 5
-#define gdt_cct_IosClientInfo_country_tag        6
-#define gdt_cct_IosClientInfo_model_tag          7
-#define gdt_cct_IosClientInfo_language_code_tag  8
-#define gdt_cct_IosClientInfo_application_bundle_id_tag 11
-#define gdt_cct_ClientInfo_client_type_tag       1
-#define gdt_cct_ClientInfo_ios_client_info_tag   4
-#define gdt_cct_NetworkConnectionInfo_network_type_tag 1
-#define gdt_cct_NetworkConnectionInfo_mobile_subtype_tag 2
-#define gdt_cct_QosTierConfiguration_qos_tier_tag 2
-#define gdt_cct_QosTierConfiguration_log_source_tag 3
-#define gdt_cct_QosTiersOverride_qos_tier_configuration_tag 1
-#define gdt_cct_QosTiersOverride_qos_tier_fingerprint_tag 2
-#define gdt_cct_LogEvent_event_time_ms_tag       1
-#define gdt_cct_LogEvent_event_code_tag          11
-#define gdt_cct_LogEvent_event_uptime_ms_tag     17
-#define gdt_cct_LogEvent_source_extension_tag    6
-#define gdt_cct_LogEvent_timezone_offset_seconds_tag 15
-#define gdt_cct_LogEvent_network_connection_info_tag 23
-#define gdt_cct_LogRequest_request_time_ms_tag   4
-#define gdt_cct_LogRequest_request_uptime_ms_tag 8
-#define gdt_cct_LogRequest_client_info_tag       1
-#define gdt_cct_LogRequest_log_source_tag        2
-#define gdt_cct_LogRequest_log_event_tag         3
-#define gdt_cct_LogRequest_qos_tier_tag          9
-#define gdt_cct_LogResponse_next_request_wait_millis_tag 1
-#define gdt_cct_LogResponse_qos_tier_tag         3
-
-/* Struct field encoding specification for nanopb */
-extern const pb_field_t gdt_cct_LogEvent_fields[7];
-extern const pb_field_t gdt_cct_NetworkConnectionInfo_fields[3];
-extern const pb_field_t gdt_cct_IosClientInfo_fields[8];
-extern const pb_field_t gdt_cct_ClientInfo_fields[3];
-extern const pb_field_t gdt_cct_BatchedLogRequest_fields[2];
-extern const pb_field_t gdt_cct_LogRequest_fields[7];
-extern const pb_field_t gdt_cct_QosTierConfiguration_fields[3];
-extern const pb_field_t gdt_cct_QosTiersOverride_fields[3];
-extern const pb_field_t gdt_cct_LogResponse_fields[3];
-
-/* Maximum encoded size of messages (where known) */
-/* gdt_cct_LogEvent_size depends on runtime parameters */
-#define gdt_cct_NetworkConnectionInfo_size       13
-/* gdt_cct_IosClientInfo_size depends on runtime parameters */
-/* gdt_cct_ClientInfo_size depends on runtime parameters */
-/* gdt_cct_BatchedLogRequest_size depends on runtime parameters */
-/* gdt_cct_LogRequest_size depends on runtime parameters */
-#define gdt_cct_QosTierConfiguration_size        13
-/* gdt_cct_QosTiersOverride_size depends on runtime parameters */
-/* gdt_cct_LogResponse_size depends on runtime parameters */
-
-/* Message IDs (where set with "msgid" option) */
-#ifdef PB_MSGID
-
-#define CCT_MESSAGES \
-
-
-#endif
-
-/* @@protoc_insertion_point(eof) */
-
-#endif
diff --git a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/LICENSE b/assign5/openTok/Pods/GoogleDataTransportCCTSupport/LICENSE
deleted file mode 100644
index d645695..0000000
--- a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
diff --git a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/README.md b/assign5/openTok/Pods/GoogleDataTransportCCTSupport/README.md
deleted file mode 100644
index b04a270..0000000
--- a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/README.md
+++ /dev/null
@@ -1,282 +0,0 @@
-# Firebase iOS Open Source Development
- [![Actions Status][gh-auth-badge]][gh-actions]
- [![Actions Status][gh-core-badge]][gh-actions]
- [![Actions Status][gh-datatransport-badge]][gh-actions]
- [![Actions Status][gh-dynamiclinks-badge]][gh-actions]
- [![Actions Status][gh-firebasepod-badge]][gh-actions]
- [![Actions Status][gh-firestore-badge]][gh-actions]
- [![Actions Status][gh-interop-badge]][gh-actions]
- [![Actions Status][gh-messaging-badge]][gh-actions]
- [![Actions Status][gh-storage-badge]][gh-actions]
- [![Actions Status][gh-symbolcollision-badge]][gh-actions]
- [![Actions Status][gh-zip-badge]][gh-actions]
- [![Travis](https://travis-ci.org/firebase/firebase-ios-sdk.svg?branch=master)](https://travis-ci.org/firebase/firebase-ios-sdk)
-
-This repository contains all Firebase iOS SDK source except FirebaseAnalytics,
-FirebasePerformance, and FirebaseML.
-
-The repository also includes GoogleUtilities source. The
-[GoogleUtilities](GoogleUtilities/README.md) pod is
-a set of utilities used by Firebase and other Google products.
-
-Firebase is an app development platform with tools to help you build, grow and
-monetize your app. More information about Firebase can be found at
-[https://firebase.google.com](https://firebase.google.com).
-
-## Installation
-
-See the three subsections for details about three different installation methods.
-1. [Standard pod install](README.md#standard-pod-install)
-1. [Installing from the GitHub repo](README.md#installing-from-github)
-1. [Experimental Carthage](README.md#carthage-ios-only)
-
-### Standard pod install
-
-Go to
-[https://firebase.google.com/docs/ios/setup](https://firebase.google.com/docs/ios/setup).
-
-### Installing from GitHub
-
-For releases starting with 5.0.0, the source for each release is also deployed
-to CocoaPods master and available via standard
-[CocoaPods Podfile syntax](https://guides.cocoapods.org/syntax/podfile.html#pod).
-
-These instructions can be used to access the Firebase repo at other branches,
-tags, or commits.
-
-#### Background
-
-See
-[the Podfile Syntax Reference](https://guides.cocoapods.org/syntax/podfile.html#pod)
-for instructions and options about overriding pod source locations.
-
-#### Accessing Firebase Source Snapshots
-
-All of the official releases are tagged in this repo and available via CocoaPods. To access a local
-source snapshot or unreleased branch, use Podfile directives like the following:
-
-To access FirebaseFirestore via a branch:
-```
-pod 'FirebaseCore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master'
-pod 'FirebaseFirestore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master'
-```
-
-To access FirebaseMessaging via a checked out version of the firebase-ios-sdk repo do:
-
-```
-pod 'FirebaseCore', :path => '/path/to/firebase-ios-sdk'
-pod 'FirebaseMessaging', :path => '/path/to/firebase-ios-sdk'
-```
-
-### Carthage (iOS only)
-
-Instructions for the experimental Carthage distribution are at
-[Carthage](Carthage.md).
-
-### Rome
-
-Instructions for installing binary frameworks via
-[Rome](https://github.com/CocoaPods/Rome) are at [Rome](Rome.md).
-
-### Using Firebase from a Framework or a library
-
-[Using Firebase from a Framework or a library](docs/firebase_in_libraries.md)
-
-## Development
-
-To develop Firebase software in this repository, ensure that you have at least
-the following software:
-
-  * Xcode 10.1 (or later)
-  * CocoaPods 1.7.2 (or later)
-  * [CocoaPods generate](https://github.com/square/cocoapods-generate)
-
-For the pod that you want to develop:
-
-`pod gen Firebase{name here}.podspec --local-sources=./ --auto-open --platforms=ios`
-
-Note: If the CocoaPods cache is out of date, you may need to run
-`pod repo update` before the `pod gen` command.
-
-Note: Set the `--platforms` option to `macos` or `tvos` to develop/test for
-those platforms. Since 10.2, Xcode does not properly handle multi-platform
-CocoaPods workspaces.
-
-Firestore has a self contained Xcode project. See
-[Firestore/README.md](Firestore/README.md).
-
-### Development for Catalyst
-* `pod gen {name here}.podspec --local-sources=./ --auto-open --platforms=ios`
-* Check the Mac box in the App-iOS Build Settings
-* Sign the App in the Settings Signing & Capabilities tab
-* Click Pods in the Project Manager
-* Add Signing to the iOS host app and unit test targets
-* Select the Unit-unit scheme
-* Run it to build and test
-
-### Adding a New Firebase Pod
-
-See [AddNewPod.md](AddNewPod.md).
-
-### Code Formatting
-
-To ensure that the code is formatted consistently, run the script
-[./scripts/style.sh](https://github.com/firebase/firebase-ios-sdk/blob/master/scripts/style.sh)
-before creating a PR.
-
-Travis will verify that any code changes are done in a style compliant way. Install
-`clang-format` and `swiftformat`.
-These commands will get the right versions:
-
-```
-brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/c6f1cbd/Formula/clang-format.rb
-brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/c13eda8/Formula/swiftformat.rb
-```
-
-Note: if you already have a newer version of these installed you may need to
-`brew switch` to this version.
-
-To update this section, find the versions of clang-format and swiftformat.rb to
-match the versions in the CI failure logs
-[here](https://github.com/Homebrew/homebrew-core/tree/master/Formula).
-
-### Running Unit Tests
-
-Select a scheme and press Command-u to build a component and run its unit tests.
-
-#### Viewing Code Coverage (Deprecated)
-
-First, make sure that [xcov](https://github.com/nakiostudio/xcov) is installed with `gem install xcov`.
-
-After running the `AllUnitTests_iOS` scheme in Xcode, execute
-`xcov --workspace Firebase.xcworkspace --scheme AllUnitTests_iOS --output_directory xcov_output`
-at Example/ in the terminal. This will aggregate the coverage, and you can run `open xcov_output/index.html` to see the results.
-
-### Running Sample Apps
-In order to run the sample apps and integration tests, you'll need valid
-`GoogleService-Info.plist` files for those samples. The Firebase Xcode project contains dummy plist
-files without real values, but can be replaced with real plist files. To get your own
-`GoogleService-Info.plist` files:
-
-1. Go to the [Firebase Console](https://console.firebase.google.com/)
-2. Create a new Firebase project, if you don't already have one
-3. For each sample app you want to test, create a new Firebase app with the sample app's bundle
-identifier (e.g. `com.google.Database-Example`)
-4. Download the resulting `GoogleService-Info.plist` and replace the appropriate dummy plist file
-(e.g. in [Example/Database/App/](Example/Database/App/));
-
-Some sample apps like Firebase Messaging ([Example/Messaging/App](Example/Messaging/App)) require
-special Apple capabilities, and you will have to change the sample app to use a unique bundle
-identifier that you can control in your own Apple Developer account.
-
-## Specific Component Instructions
-See the sections below for any special instructions for those components.
-
-### Firebase Auth
-
-If you're doing specific Firebase Auth development, see
-[the Auth Sample README](FirebaseAuth/Tests/Sample/README.md) for instructions about
-building and running the FirebaseAuth pod along with various samples and tests.
-
-### Firebase Database
-
-To run the Database Integration tests, make your database authentication rules
-[public](https://firebase.google.com/docs/database/security/quickstart).
-
-### Firebase Storage
-
-To run the Storage Integration tests, follow the instructions in
-[FIRStorageIntegrationTests.m](FirebaseStorage/Tests/Integration/FIRStorageIntegrationTests.m).
-
-#### Push Notifications
-
-Push notifications can only be delivered to specially provisioned App IDs in the developer portal.
-In order to actually test receiving push notifications, you will need to:
-
-1. Change the bundle identifier of the sample app to something you own in your Apple Developer
-account, and enable that App ID for push notifications.
-2. You'll also need to
-[upload your APNs Provider Authentication Key or certificate to the Firebase Console](https://firebase.google.com/docs/cloud-messaging/ios/certs)
-at **Project Settings > Cloud Messaging > [Your Firebase App]**.
-3. Ensure your iOS device is added to your Apple Developer portal as a test device.
-
-#### iOS Simulator
-
-The iOS Simulator cannot register for remote notifications, and will not receive push notifications.
-In order to receive push notifications, you'll have to follow the steps above and run the app on a
-physical device.
-
-## Community Supported Efforts
-
-We've seen an amazing amount of interest and contributions to improve the Firebase SDKs, and we are
-very grateful!  We'd like to empower as many developers as we can to be able to use Firebase and
-participate in the Firebase community.
-
-### tvOS, macOS, watchOS and Catalyst
-Thanks to contributions from the community, many of Firebase SDKs now compile, run unit tests, and work on
-tvOS, macOS, watchOS and Catalyst.
-
-For tvOS, checkout the [Sample](Example/tvOSSample).
-For watchOS, currently only Messaging and Storage (and their dependencies) have limited support. Checkout the
-[Independent Watch App Sample](Example/watchOSSample).
-
-Keep in mind that macOS, tvOS, watchOS and Catalyst are not officially supported by Firebase, and this
-repository is actively developed primarily for iOS. While we can catch basic unit test issues with
-Travis, there may be some changes where the SDK no longer works as expected on macOS, tvOS or watchOS. If you
-encounter this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues).
-
-During app setup in the console, you may get to a step that mentions something like "Checking if the app
-has communicated with our servers". This relies on Analytics and will not work on macOS/tvOS/watchOS/Catalyst.
-**It's safe to ignore the message and continue**, the rest of the SDKs will work as expected.
-
-To install, add a subset of the following to the Podfile:
-
-```
-pod 'Firebase/ABTesting'     # No watchOS support yet
-pod 'Firebase/Auth'          # No watchOS support yet
-pod 'Firebase/Crashlytics'   # No watchOS support yet
-pod 'Firebase/Database'      # No watchOS support yet
-pod 'Firebase/Firestore'     # No watchOS support yet
-pod 'Firebase/Functions'     # No watchOS support yet
-pod 'Firebase/Messaging'
-pod 'Firebase/RemoteConfig'  # No watchOS support yet
-pod 'Firebase/Storage'
-```
-
-#### Additional Catalyst Notes
-
-* FirebaseAuth and FirebaseMessaging require adding `Keychain Sharing Capability`
-to Build Settings.
-* FirebaseFirestore requires signing the
-[gRPC Resource target](https://github.com/firebase/firebase-ios-sdk/issues/3500#issuecomment-518741681).
-
-## Roadmap
-
-See [Roadmap](ROADMAP.md) for more about the Firebase iOS SDK Open Source
-plans and directions.
-
-## Contributing
-
-See [Contributing](CONTRIBUTING.md) for more information on contributing to the Firebase
-iOS SDK.
-
-## License
-
-The contents of this repository is licensed under the
-[Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0).
-
-Your use of Firebase is governed by the
-[Terms of Service for Firebase Services](https://firebase.google.com/terms/).
-
-[gh-actions]: https://github.com/firebase/firebase-ios-sdk/actions
-[gh-auth-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/auth/badge.svg
-[gh-core-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/core/badge.svg
-[gh-datatransport-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/datatransport/badge.svg
-[gh-dynamiclinks-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/dynamiclinks/badge.svg
-[gh-firebasepod-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firebasepod/badge.svg
-[gh-firestore-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firestore/badge.svg
-[gh-interop-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/interop/badge.svg
-[gh-messaging-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/messaging/badge.svg
-[gh-storage-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/storage/badge.svg
-[gh-symbolcollision-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/symbolcollision/badge.svg
-[gh-zip-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/zip/badge.svg
diff --git a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/GULHeartbeatDateStorage.m b/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/GULHeartbeatDateStorage.m
deleted file mode 100644
index 483c859..0000000
--- a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/GULHeartbeatDateStorage.m
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <GoogleUtilities/GULHeartbeatDateStorage.h>
-#import <GoogleUtilities/GULSecureCoding.h>
-
-@interface GULHeartbeatDateStorage ()
-/** The storage to store the date of the last sent heartbeat. */
-@property(nonatomic, readonly) NSFileCoordinator *fileCoordinator;
-@end
-
-@implementation GULHeartbeatDateStorage
-
-- (instancetype)initWithFileName:(NSString *)fileName {
-  if (fileName == nil) {
-    return nil;
-  }
-
-  self = [super init];
-  if (self) {
-    _fileCoordinator = [[NSFileCoordinator alloc] initWithFilePresenter:nil];
-    NSURL *directoryURL = [[self class] directoryPathURL];
-    [[self class] checkAndCreateDirectory:directoryURL fileCoordinator:_fileCoordinator];
-    _fileURL = [directoryURL URLByAppendingPathComponent:fileName];
-  }
-  return self;
-}
-
-/** Returns the URL path of the Application Support folder.
- * @return the URL path of Application Support.
- */
-+ (NSURL *)directoryPathURL {
-  NSArray<NSString *> *paths =
-      NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);
-  NSArray<NSString *> *components = @[ paths.lastObject, @"Google/FIRApp" ];
-  NSString *directoryString = [NSString pathWithComponents:components];
-  NSURL *directoryURL = [NSURL fileURLWithPath:directoryString];
-  return directoryURL;
-}
-
-/** Checks and creates a directory for the directory specified by the
- * directory url
- * @param directoryPathURL The path to the directory which needs to be created.
- * @param fileCoordinator The fileCoordinator object to coordinate writes to the directory.
- */
-+ (void)checkAndCreateDirectory:(NSURL *)directoryPathURL
-                fileCoordinator:(NSFileCoordinator *)fileCoordinator {
-  NSError *fileCoordinatorError = nil;
-  [fileCoordinator
-      coordinateWritingItemAtURL:directoryPathURL
-                         options:0
-                           error:&fileCoordinatorError
-                      byAccessor:^(NSURL *writingDirectoryURL) {
-                        NSError *error;
-                        if (![writingDirectoryURL checkResourceIsReachableAndReturnError:&error]) {
-                          // If fail creating the Application Support directory, log warning.
-                          NSError *error;
-                          [[NSFileManager defaultManager] createDirectoryAtURL:writingDirectoryURL
-                                                   withIntermediateDirectories:YES
-                                                                    attributes:nil
-                                                                         error:&error];
-                        }
-                      }];
-}
-
-- (nullable NSMutableDictionary *)heartbeatDictionaryWithFileURL:(NSURL *)readingFileURL {
-  NSError *error;
-  NSMutableDictionary *dict;
-  NSData *objectData = [NSData dataWithContentsOfURL:readingFileURL options:0 error:&error];
-  if (objectData == nil || error != nil) {
-    dict = [NSMutableDictionary dictionary];
-  } else {
-    dict = [GULSecureCoding
-        unarchivedObjectOfClasses:[NSSet setWithArray:@[ NSDictionary.class, NSDate.class ]]
-                         fromData:objectData
-                            error:&error];
-    if (dict == nil || error != nil) {
-      dict = [NSMutableDictionary dictionary];
-    }
-  }
-  return dict;
-}
-
-- (nullable NSDate *)heartbeatDateForTag:(NSString *)tag {
-  __block NSMutableDictionary *dict;
-  NSError *error;
-  [self.fileCoordinator coordinateReadingItemAtURL:self.fileURL
-                                           options:0
-                                             error:&error
-                                        byAccessor:^(NSURL *readingURL) {
-                                          dict = [self heartbeatDictionaryWithFileURL:readingURL];
-                                        }];
-  return dict[tag];
-}
-
-- (BOOL)setHearbeatDate:(NSDate *)date forTag:(NSString *)tag {
-  NSError *error;
-  __block BOOL isSuccess = false;
-  [self.fileCoordinator coordinateReadingItemAtURL:self.fileURL
-                                           options:0
-                                  writingItemAtURL:self.fileURL
-                                           options:0
-                                             error:&error
-                                        byAccessor:^(NSURL *readingURL, NSURL *writingURL) {
-                                          NSMutableDictionary *dictionary =
-                                              [self heartbeatDictionaryWithFileURL:readingURL];
-                                          dictionary[tag] = date;
-                                          NSError *error;
-                                          isSuccess = [self writeDictionary:dictionary
-                                                              forWritingURL:writingURL
-                                                                      error:&error];
-                                        }];
-  return isSuccess;
-}
-
-- (BOOL)writeDictionary:(NSMutableDictionary *)dictionary
-          forWritingURL:(NSURL *)writingFileURL
-                  error:(NSError **)outError {
-  NSData *data = [GULSecureCoding archivedDataWithRootObject:dictionary error:outError];
-  if (*outError != nil) {
-    return false;
-  } else {
-    return [data writeToURL:writingFileURL atomically:YES];
-  }
-}
-
-@end
diff --git a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/GULSecureCoding.m b/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/GULSecureCoding.m
deleted file mode 100644
index 25d5d19..0000000
--- a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/GULSecureCoding.m
+++ /dev/null
@@ -1,103 +0,0 @@
-// Copyright 2019 Google
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#import "GoogleUtilities/Environment/Public/GULSecureCoding.h"
-
-NSString *const kGULSecureCodingError = @"GULSecureCodingError";
-
-@implementation GULSecureCoding
-
-+ (nullable id)unarchivedObjectOfClasses:(NSSet<Class> *)classes
-                                fromData:(NSData *)data
-                                   error:(NSError **)outError {
-  id object;
-#if __has_builtin(__builtin_available)
-  if (@available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4.0, *)) {
-    object = [NSKeyedUnarchiver unarchivedObjectOfClasses:classes fromData:data error:outError];
-  } else
-#endif  // __has_builtin(__builtin_available)
-  {
-    @try {
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
-      NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
-#pragma clang diagnostic pop
-      unarchiver.requiresSecureCoding = YES;
-
-      object = [unarchiver decodeObjectOfClasses:classes forKey:NSKeyedArchiveRootObjectKey];
-    } @catch (NSException *exception) {
-      if (outError) {
-        *outError = [self archivingErrorWithException:exception];
-      }
-    }
-
-    if (object == nil && outError && *outError == nil) {
-      NSString *failureReason = @"NSKeyedUnarchiver failed to unarchive data.";
-      *outError = [NSError errorWithDomain:kGULSecureCodingError
-                                      code:-1
-                                  userInfo:@{NSLocalizedFailureReasonErrorKey : failureReason}];
-    }
-  }
-
-  return object;
-}
-
-+ (nullable id)unarchivedObjectOfClass:(Class)class
-                              fromData:(NSData *)data
-                                 error:(NSError **)outError {
-  return [self unarchivedObjectOfClasses:[NSSet setWithObject:class] fromData:data error:outError];
-}
-
-+ (nullable NSData *)archivedDataWithRootObject:(id<NSCoding>)object error:(NSError **)outError {
-  NSData *archiveData;
-#if __has_builtin(__builtin_available)
-  if (@available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4.0, *)) {
-    archiveData = [NSKeyedArchiver archivedDataWithRootObject:object
-                                        requiringSecureCoding:YES
-                                                        error:outError];
-  } else
-#endif  // __has_builtin(__builtin_available)
-  {
-    @try {
-      NSMutableData *data = [NSMutableData data];
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
-      NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
-#pragma clang diagnostic pop
-      archiver.requiresSecureCoding = YES;
-
-      [archiver encodeObject:object forKey:NSKeyedArchiveRootObjectKey];
-      [archiver finishEncoding];
-
-      archiveData = [data copy];
-    } @catch (NSException *exception) {
-      if (outError) {
-        *outError = [self archivingErrorWithException:exception];
-      }
-    }
-  }
-
-  return archiveData;
-}
-
-+ (NSError *)archivingErrorWithException:(NSException *)exception {
-  NSString *failureReason = [NSString
-      stringWithFormat:@"NSKeyedArchiver exception with name: %@, reason: %@, userInfo: %@",
-                       exception.name, exception.reason, exception.userInfo];
-  NSDictionary *errorUserInfo = @{NSLocalizedFailureReasonErrorKey : failureReason};
-
-  return [NSError errorWithDomain:kGULSecureCodingError code:-1 userInfo:errorUserInfo];
-}
-
-@end
diff --git a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GULHeartbeatDateStorage.h b/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GULHeartbeatDateStorage.h
deleted file mode 100644
index 9432dfc..0000000
--- a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GULHeartbeatDateStorage.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-/// Stores either a date or a dictionary to a specified file.
-@interface GULHeartbeatDateStorage : NSObject
-
-- (instancetype)init NS_UNAVAILABLE;
-
-@property(nonatomic, readonly) NSURL *fileURL;
-
-/**
- * Default initializer.
- * @param fileName The name of the file to store the date information.
- * exist, it will be created if needed.
- */
-- (instancetype)initWithFileName:(NSString *)fileName;
-
-/**
- * Reads the date from the specified file for the given tag.
- * @return Returns date if exists, otherwise `nil`.
- */
-- (nullable NSDate *)heartbeatDateForTag:(NSString *)tag;
-
-/**
- * Saves the date for the specified tag in the specified file.
- * @return YES on success, NO otherwise.
- */
-- (BOOL)setHearbeatDate:(NSDate *)date forTag:(NSString *)tag;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GULKeychainStorage.h b/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GULKeychainStorage.h
deleted file mode 100644
index dc01a83..0000000
--- a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GULKeychainStorage.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@class FBLPromise<ValueType>;
-
-NS_ASSUME_NONNULL_BEGIN
-
-/// The class provides a convenient abstraction on top of the iOS Keychain API to save data.
-@interface GULKeychainStorage : NSObject
-
-- (instancetype)init NS_UNAVAILABLE;
-
-/** Initializes the keychain storage with Keychain Service name.
- *  @param service A Keychain Service name that will be used to store and retrieve objects. See also
- * `kSecAttrService`.
- */
-- (instancetype)initWithService:(NSString *)service;
-
-/**
- * Get an object by key.
- * @param key The key.
- * @param objectClass The expected object class required by `NSSecureCoding`.
- * @param accessGroup The Keychain Access Group.
- *
- * @return Returns a promise. It is resolved with an object stored by key if exists. It is resolved
- * with `nil` when the object not found. It fails on a Keychain error.
- */
-- (FBLPromise<id<NSSecureCoding>> *)getObjectForKey:(NSString *)key
-                                        objectClass:(Class)objectClass
-                                        accessGroup:(nullable NSString *)accessGroup;
-
-/**
- * Saves the given object by the given key.
- * @param object The object to store.
- * @param key The key to store the object. If there is an existing object by the key, it will be
- * overridden.
- * @param accessGroup The Keychain Access Group.
- *
- * @return Returns which is resolved with `[NSNull null]` on success.
- */
-- (FBLPromise<NSNull *> *)setObject:(id<NSSecureCoding>)object
-                             forKey:(NSString *)key
-                        accessGroup:(nullable NSString *)accessGroup;
-
-/**
- * Removes the object by the given key.
- * @param key The key to store the object. If there is an existing object by the key, it will be
- * overridden.
- * @param accessGroup The Keychain Access Group.
- *
- * @return Returns which is resolved with `[NSNull null]` on success.
- */
-- (FBLPromise<NSNull *> *)removeObjectForKey:(NSString *)key
-                                 accessGroup:(nullable NSString *)accessGroup;
-
-#if TARGET_OS_OSX
-/// If not `nil`, then only this keychain will be used to save and read data (see
-/// `kSecMatchSearchList` and `kSecUseKeychain`. It is mostly intended to be used by unit tests.
-@property(nonatomic, nullable) SecKeychainRef keychainRef;
-#endif  // TARGET_OSX
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GULKeychainUtils.h b/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GULKeychainUtils.h
deleted file mode 100644
index de4bef2..0000000
--- a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GULKeychainUtils.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-FOUNDATION_EXPORT NSString *const kGULKeychainUtilsErrorDomain;
-
-/// Helper functions to access Keychain.
-@interface GULKeychainUtils : NSObject
-
-/** Fetches a keychain item data matching to the provided query.
- *  @param query A dictionary with Keychain query parameters. See docs for `SecItemCopyMatching` for
- * details.
- *  @param outError A pointer to `NSError` instance or `NULL`. The instance at `outError` will be
- * assigned with an error if there is.
- *  @returns Data for the first Keychain Item matching the provided query or `nil` if there is not
- * such an item (`outError` will be `nil` in this case) or an error occurred.
- */
-+ (nullable NSData *)getItemWithQuery:(NSDictionary *)query
-                                error:(NSError *_Nullable *_Nullable)outError;
-
-/** Stores data to a Keychain Item matching to the provided query. An existing Keychain Item
- * matching the query parameters will be updated or a new will be created.
- *  @param item A Keychain Item data to store.
- *  @param query A dictionary with Keychain query parameters. See docs for `SecItemAdd` and
- * `SecItemUpdate` for details.
- *  @param outError A pointer to `NSError` instance or `NULL`. The instance at `outError` will be
- * assigned with an error if there is.
- *  @returns `YES` when data was successfully stored, `NO` otherwise.
- */
-+ (BOOL)setItem:(NSData *)item
-      withQuery:(NSDictionary *)query
-          error:(NSError *_Nullable *_Nullable)outError;
-
-/** Removes a Keychain Item matching to the provided query.
- *  @param query A dictionary with Keychain query parameters. See docs for `SecItemDelete` for
- * details.
- *  @param outError A pointer to `NSError` instance or `NULL`. The instance at `outError` will be
- * assigned with an error if there is.
- *  @returns `YES` if the item was removed successfully or doesn't exist, `NO` otherwise.
- */
-+ (BOOL)removeItemWithQuery:(NSDictionary *)query error:(NSError *_Nullable *_Nullable)outError;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GULSecureCoding.h b/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GULSecureCoding.h
deleted file mode 100644
index 8484b39..0000000
--- a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GULSecureCoding.h
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2019 Google
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-/** The class wraps `NSKeyedArchiver` and `NSKeyedUnarchiver` API to provide a unified secure coding
- *  methods for iOS versions before and after 11.
- */
-@interface GULSecureCoding : NSObject
-
-+ (nullable id)unarchivedObjectOfClasses:(NSSet<Class> *)classes
-                                fromData:(NSData *)data
-                                   error:(NSError **)outError;
-
-+ (nullable id)unarchivedObjectOfClass:(Class)class
-                              fromData:(NSData *)data
-                                 error:(NSError **)outError;
-
-+ (nullable NSData *)archivedDataWithRootObject:(id<NSCoding>)object error:(NSError **)outError;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/SecureStorage/GULKeychainStorage.m b/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/SecureStorage/GULKeychainStorage.m
deleted file mode 100644
index 3777724..0000000
--- a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/SecureStorage/GULKeychainStorage.m
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <GoogleUtilities/GULKeychainStorage.h>
-#import <Security/Security.h>
-
-#if __has_include(<FBLPromises/FBLPromises.h>)
-#import <FBLPromises/FBLPromises.h>
-#else
-#import "FBLPromises.h"
-#endif
-
-#import <GoogleUtilities/GULKeychainUtils.h>
-#import <GoogleUtilities/GULSecureCoding.h>
-
-@interface GULKeychainStorage ()
-@property(nonatomic, readonly) dispatch_queue_t keychainQueue;
-@property(nonatomic, readonly) dispatch_queue_t inMemoryCacheQueue;
-@property(nonatomic, readonly) NSString *service;
-@property(nonatomic, readonly) NSCache<NSString *, id<NSSecureCoding>> *inMemoryCache;
-@end
-
-@implementation GULKeychainStorage
-
-- (instancetype)initWithService:(NSString *)service {
-  NSCache *cache = [[NSCache alloc] init];
-  // Cache up to 5 installations.
-  cache.countLimit = 5;
-  return [self initWithService:service cache:cache];
-}
-
-- (instancetype)initWithService:(NSString *)service cache:(NSCache *)cache {
-  self = [super init];
-  if (self) {
-    _keychainQueue =
-        dispatch_queue_create("com.gul.KeychainStorage.Keychain", DISPATCH_QUEUE_SERIAL);
-    _inMemoryCacheQueue =
-        dispatch_queue_create("com.gul.KeychainStorage.InMemoryCache", DISPATCH_QUEUE_SERIAL);
-    _service = [service copy];
-    _inMemoryCache = cache;
-  }
-  return self;
-}
-
-#pragma mark - Public
-
-- (FBLPromise<id<NSSecureCoding>> *)getObjectForKey:(NSString *)key
-                                        objectClass:(Class)objectClass
-                                        accessGroup:(nullable NSString *)accessGroup {
-  return [FBLPromise onQueue:self.inMemoryCacheQueue
-                          do:^id _Nullable {
-                            // Return cached object or fail otherwise.
-                            id object = [self.inMemoryCache objectForKey:key];
-                            return object
-                                       ?: [[NSError alloc]
-                                              initWithDomain:FBLPromiseErrorDomain
-                                                        code:FBLPromiseErrorCodeValidationFailure
-                                                    userInfo:nil];
-                          }]
-      .recover(^id _Nullable(NSError *error) {
-        // Look for the object in the keychain.
-        return [self getObjectFromKeychainForKey:key
-                                     objectClass:objectClass
-                                     accessGroup:accessGroup];
-      });
-}
-
-- (FBLPromise<NSNull *> *)setObject:(id<NSSecureCoding>)object
-                             forKey:(NSString *)key
-                        accessGroup:(nullable NSString *)accessGroup {
-  return [FBLPromise onQueue:self.inMemoryCacheQueue
-                          do:^id _Nullable {
-                            // Save to the in-memory cache first.
-                            [self.inMemoryCache setObject:object forKey:[key copy]];
-                            return [NSNull null];
-                          }]
-      .thenOn(self.keychainQueue, ^id(id result) {
-        // Then store the object to the keychain.
-        NSDictionary *query = [self keychainQueryWithKey:key accessGroup:accessGroup];
-        NSError *error;
-        NSData *encodedObject = [GULSecureCoding archivedDataWithRootObject:object error:&error];
-        if (!encodedObject) {
-          return error;
-        }
-
-        if (![GULKeychainUtils setItem:encodedObject withQuery:query error:&error]) {
-          return error;
-        }
-
-        return [NSNull null];
-      });
-}
-
-- (FBLPromise<NSNull *> *)removeObjectForKey:(NSString *)key
-                                 accessGroup:(nullable NSString *)accessGroup {
-  return [FBLPromise onQueue:self.inMemoryCacheQueue
-                          do:^id _Nullable {
-                            [self.inMemoryCache removeObjectForKey:key];
-                            return nil;
-                          }]
-      .thenOn(self.keychainQueue, ^id(id result) {
-        NSDictionary *query = [self keychainQueryWithKey:key accessGroup:accessGroup];
-
-        NSError *error;
-        if (![GULKeychainUtils removeItemWithQuery:query error:&error]) {
-          return error;
-        }
-
-        return [NSNull null];
-      });
-}
-
-#pragma mark - Private
-
-- (FBLPromise<id<NSSecureCoding>> *)getObjectFromKeychainForKey:(NSString *)key
-                                                    objectClass:(Class)objectClass
-                                                    accessGroup:(nullable NSString *)accessGroup {
-  // Look for the object in the keychain.
-  return [FBLPromise
-             onQueue:self.keychainQueue
-                  do:^id {
-                    NSDictionary *query = [self keychainQueryWithKey:key accessGroup:accessGroup];
-                    NSError *error;
-                    NSData *encodedObject = [GULKeychainUtils getItemWithQuery:query error:&error];
-
-                    if (error) {
-                      return error;
-                    }
-                    if (!encodedObject) {
-                      return nil;
-                    }
-                    id object = [GULSecureCoding unarchivedObjectOfClass:objectClass
-                                                                fromData:encodedObject
-                                                                   error:&error];
-                    if (error) {
-                      return error;
-                    }
-
-                    return object;
-                  }]
-      .thenOn(self.inMemoryCacheQueue,
-              ^id<NSSecureCoding> _Nullable(id<NSSecureCoding> _Nullable object) {
-                // Save object to the in-memory cache if exists and return the object.
-                if (object) {
-                  [self.inMemoryCache setObject:object forKey:[key copy]];
-                }
-                return object;
-              });
-}
-
-- (void)resetInMemoryCache {
-  [self.inMemoryCache removeAllObjects];
-}
-
-#pragma mark - Keychain
-
-- (NSMutableDictionary<NSString *, id> *)keychainQueryWithKey:(NSString *)key
-                                                  accessGroup:(nullable NSString *)accessGroup {
-  NSMutableDictionary<NSString *, id> *query = [NSMutableDictionary dictionary];
-
-  query[(__bridge NSString *)kSecClass] = (__bridge NSString *)kSecClassGenericPassword;
-  query[(__bridge NSString *)kSecAttrService] = self.service;
-  query[(__bridge NSString *)kSecAttrAccount] = key;
-
-  if (accessGroup) {
-    query[(__bridge NSString *)kSecAttrAccessGroup] = accessGroup;
-  }
-
-#if TARGET_OS_OSX
-  if (self.keychainRef) {
-    query[(__bridge NSString *)kSecUseKeychain] = (__bridge id)(self.keychainRef);
-    query[(__bridge NSString *)kSecMatchSearchList] = @[ (__bridge id)(self.keychainRef) ];
-  }
-#endif  // TARGET_OSX
-
-  return query;
-}
-
-@end
diff --git a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/SecureStorage/GULKeychainUtils.m b/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/SecureStorage/GULKeychainUtils.m
deleted file mode 100644
index 673b6c4..0000000
--- a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/SecureStorage/GULKeychainUtils.m
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <GoogleUtilities/GULKeychainUtils.h>
-
-NSString *const kGULKeychainUtilsErrorDomain = @"com.gul.keychain.ErrorDomain";
-
-@implementation GULKeychainUtils
-
-+ (nullable NSData *)getItemWithQuery:(NSDictionary *)query
-                                error:(NSError *_Nullable *_Nullable)outError {
-  NSMutableDictionary *mutableQuery = [query mutableCopy];
-
-  mutableQuery[(__bridge id)kSecReturnData] = @YES;
-  mutableQuery[(__bridge id)kSecMatchLimit] = (__bridge id)kSecMatchLimitOne;
-
-  CFDataRef result = NULL;
-  OSStatus status =
-      SecItemCopyMatching((__bridge CFDictionaryRef)mutableQuery, (CFTypeRef *)&result);
-
-  if (status == errSecSuccess && result != NULL) {
-    if (outError) {
-      *outError = nil;
-    }
-
-    return (__bridge_transfer NSData *)result;
-  }
-
-  if (status == errSecItemNotFound) {
-    if (outError) {
-      *outError = nil;
-    }
-  } else {
-    if (outError) {
-      *outError = [self keychainErrorWithFunction:@"SecItemCopyMatching" status:status];
-    }
-  }
-  return nil;
-}
-
-+ (BOOL)setItem:(NSData *)item
-      withQuery:(NSDictionary *)query
-          error:(NSError *_Nullable *_Nullable)outError {
-  NSData *existingItem = [self getItemWithQuery:query error:outError];
-  if (outError && *outError) {
-    return NO;
-  }
-
-  NSMutableDictionary *mutableQuery = [query mutableCopy];
-  mutableQuery[(__bridge id)kSecAttrAccessible] =
-      (__bridge id)kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly;
-
-  OSStatus status;
-  if (!existingItem) {
-    mutableQuery[(__bridge id)kSecValueData] = item;
-    status = SecItemAdd((__bridge CFDictionaryRef)mutableQuery, NULL);
-  } else {
-    NSDictionary *attributes = @{(__bridge id)kSecValueData : item};
-    status = SecItemUpdate((__bridge CFDictionaryRef)query, (__bridge CFDictionaryRef)attributes);
-  }
-
-  if (status == noErr) {
-    if (outError) {
-      *outError = nil;
-    }
-    return YES;
-  }
-
-  NSString *function = existingItem ? @"SecItemUpdate" : @"SecItemAdd";
-  if (outError) {
-    *outError = [self keychainErrorWithFunction:function status:status];
-  }
-  return NO;
-}
-
-+ (BOOL)removeItemWithQuery:(NSDictionary *)query error:(NSError *_Nullable *_Nullable)outError {
-  OSStatus status = SecItemDelete((__bridge CFDictionaryRef)query);
-
-  if (status == noErr || status == errSecItemNotFound) {
-    if (outError) {
-      *outError = nil;
-    }
-    return YES;
-  }
-
-  if (outError) {
-    *outError = [self keychainErrorWithFunction:@"SecItemDelete" status:status];
-  }
-  return NO;
-}
-
-#pragma mark - Errors
-
-+ (NSError *)keychainErrorWithFunction:(NSString *)keychainFunction status:(OSStatus)status {
-  NSString *failureReason = [NSString stringWithFormat:@"%@ (%li)", keychainFunction, (long)status];
-  NSDictionary *userInfo = @{NSLocalizedFailureReasonErrorKey : failureReason};
-  return [NSError errorWithDomain:kGULKeychainUtilsErrorDomain code:0 userInfo:userInfo];
-}
-
-@end
diff --git a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.h b/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.h
deleted file mode 100644
index d550264..0000000
--- a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright 2017 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@interface GULAppEnvironmentUtil : NSObject
-
-/// Indicates whether the app is from Apple Store or not. Returns NO if the app is on simulator,
-/// development environment or sideloaded.
-+ (BOOL)isFromAppStore;
-
-/// Indicates whether the app is a Testflight app. Returns YES if the app has sandbox receipt.
-/// Returns NO otherwise.
-+ (BOOL)isAppStoreReceiptSandbox;
-
-/// Indicates whether the app is on simulator or not at runtime depending on the device
-/// architecture.
-+ (BOOL)isSimulator;
-
-/// The current device model. Returns an empty string if device model cannot be retrieved.
-+ (NSString *)deviceModel;
-
-/// The current operating system version. Returns an empty string if the system version cannot be
-/// retrieved.
-+ (NSString *)systemVersion;
-
-/// Indicates whether it is running inside an extension or an app.
-+ (BOOL)isAppExtension;
-
-/// @return Returns @YES when is run on iOS version greater or equal to 7.0
-+ (BOOL)isIOS7OrHigher;
-
-@end
diff --git a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.m b/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.m
deleted file mode 100644
index 8b1ac6a..0000000
--- a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.m
+++ /dev/null
@@ -1,267 +0,0 @@
-// Copyright 2017 Google
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#import "GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.h"
-
-#import <Foundation/Foundation.h>
-#import <dlfcn.h>
-#import <mach-o/dyld.h>
-#import <sys/utsname.h>
-
-#if TARGET_OS_IOS
-#import <UIKit/UIKit.h>
-#endif
-
-/// The encryption info struct and constants are missing from the iPhoneSimulator SDK, but not from
-/// the iPhoneOS or Mac OS X SDKs. Since one doesn't ever ship a Simulator binary, we'll just
-/// provide the definitions here.
-#if TARGET_OS_SIMULATOR && !defined(LC_ENCRYPTION_INFO)
-#define LC_ENCRYPTION_INFO 0x21
-struct encryption_info_command {
-  uint32_t cmd;
-  uint32_t cmdsize;
-  uint32_t cryptoff;
-  uint32_t cryptsize;
-  uint32_t cryptid;
-};
-#endif
-
-@implementation GULAppEnvironmentUtil
-
-/// A key for the Info.plist to enable or disable checking if the App Store is running in a sandbox.
-/// This will affect your data integrity when using Firebase Analytics, as it will disable some
-/// necessary checks.
-static NSString *const kFIRAppStoreReceiptURLCheckEnabledKey =
-    @"FirebaseAppStoreReceiptURLCheckEnabled";
-
-/// The file name of the sandbox receipt. This is available on iOS >= 8.0
-static NSString *const kFIRAIdentitySandboxReceiptFileName = @"sandboxReceipt";
-
-/// The following copyright from Landon J. Fuller applies to the isAppEncrypted function.
-///
-/// Copyright (c) 2017 Landon J. Fuller <landon@landonf.org>
-/// All rights reserved.
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-/// and associated documentation files (the "Software"), to deal in the Software without
-/// restriction, including without limitation the rights to use, copy, modify, merge, publish,
-/// distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in all copies or
-/// substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-/// BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-/// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-/// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-///
-/// Comment from <a href="http://iphonedevwiki.net/index.php/Crack_prevention">iPhone Dev Wiki
-/// Crack Prevention</a>:
-/// App Store binaries are signed by both their developer and Apple. This encrypts the binary so
-/// that decryption keys are needed in order to make the binary readable. When iOS executes the
-/// binary, the decryption keys are used to decrypt the binary into a readable state where it is
-/// then loaded into memory and executed. iOS can tell the encryption status of a binary via the
-/// cryptid structure member of LC_ENCRYPTION_INFO MachO load command. If cryptid is a non-zero
-/// value then the binary is encrypted.
-///
-/// 'Cracking' works by letting the kernel decrypt the binary then siphoning the decrypted data into
-/// a new binary file, resigning, and repackaging. This will only work on jailbroken devices as
-/// codesignature validation has been removed. Resigning takes place because while the codesignature
-/// doesn't have to be valid thanks to the jailbreak, it does have to be in place unless you have
-/// AppSync or similar to disable codesignature checks.
-///
-/// More information at <a href="http://landonf.org/2009/02/index.html">Landon Fuller's blog</a>
-static BOOL IsAppEncrypted() {
-  const struct mach_header *executableHeader = NULL;
-  for (uint32_t i = 0; i < _dyld_image_count(); i++) {
-    const struct mach_header *header = _dyld_get_image_header(i);
-    if (header && header->filetype == MH_EXECUTE) {
-      executableHeader = header;
-      break;
-    }
-  }
-
-  if (!executableHeader) {
-    return NO;
-  }
-
-  BOOL is64bit = (executableHeader->magic == MH_MAGIC_64);
-  uintptr_t cursor = (uintptr_t)executableHeader +
-                     (is64bit ? sizeof(struct mach_header_64) : sizeof(struct mach_header));
-  const struct segment_command *segmentCommand = NULL;
-  uint32_t i = 0;
-
-  while (i++ < executableHeader->ncmds) {
-    segmentCommand = (struct segment_command *)cursor;
-
-    if (!segmentCommand) {
-      continue;
-    }
-
-    if ((!is64bit && segmentCommand->cmd == LC_ENCRYPTION_INFO) ||
-        (is64bit && segmentCommand->cmd == LC_ENCRYPTION_INFO_64)) {
-      if (is64bit) {
-        struct encryption_info_command_64 *cryptCmd =
-            (struct encryption_info_command_64 *)segmentCommand;
-        return cryptCmd && cryptCmd->cryptid != 0;
-      } else {
-        struct encryption_info_command *cryptCmd = (struct encryption_info_command *)segmentCommand;
-        return cryptCmd && cryptCmd->cryptid != 0;
-      }
-    }
-    cursor += segmentCommand->cmdsize;
-  }
-
-  return NO;
-}
-
-static BOOL HasSCInfoFolder() {
-#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_WATCH
-  NSString *bundlePath = [NSBundle mainBundle].bundlePath;
-  NSString *scInfoPath = [bundlePath stringByAppendingPathComponent:@"SC_Info"];
-  return [[NSFileManager defaultManager] fileExistsAtPath:scInfoPath];
-#elif TARGET_OS_OSX
-  return NO;
-#endif
-}
-
-static BOOL HasEmbeddedMobileProvision() {
-#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_WATCH
-  return [[NSBundle mainBundle] pathForResource:@"embedded" ofType:@"mobileprovision"].length > 0;
-#elif TARGET_OS_OSX
-  return NO;
-#endif
-}
-
-+ (BOOL)isFromAppStore {
-  static dispatch_once_t isEncryptedOnce;
-  static BOOL isEncrypted = NO;
-
-  dispatch_once(&isEncryptedOnce, ^{
-    isEncrypted = IsAppEncrypted();
-  });
-
-  if ([GULAppEnvironmentUtil isSimulator]) {
-    return NO;
-  }
-
-  // If an app contain the sandboxReceipt file, it means its coming from TestFlight
-  // This must be checked before the SCInfo Folder check below since TestFlight apps may
-  // also have an SCInfo folder.
-  if ([GULAppEnvironmentUtil isAppStoreReceiptSandbox]) {
-    return NO;
-  }
-
-  if (HasSCInfoFolder()) {
-    // When iTunes downloads a .ipa, it also gets a customized .sinf file which is added to the
-    // main SC_Info directory.
-    return YES;
-  }
-
-  // For iOS >= 8.0, iTunesMetadata.plist is moved outside of the sandbox. Any attempt to read
-  // the iTunesMetadata.plist outside of the sandbox will be rejected by Apple.
-  // If the app does not contain the embedded.mobileprovision which is stripped out by Apple when
-  // the app is submitted to store, then it is highly likely that it is from Apple Store.
-  return isEncrypted && !HasEmbeddedMobileProvision();
-}
-
-+ (BOOL)isAppStoreReceiptSandbox {
-  // Since checking the App Store's receipt URL can be memory intensive, check the option in the
-  // Info.plist if developers opted out of this check.
-  id enableSandboxCheck =
-      [[NSBundle mainBundle] objectForInfoDictionaryKey:kFIRAppStoreReceiptURLCheckEnabledKey];
-  if (enableSandboxCheck && [enableSandboxCheck isKindOfClass:[NSNumber class]] &&
-      ![enableSandboxCheck boolValue]) {
-    return NO;
-  }
-// The #else is for pre Xcode 9 where @available is not yet implemented.
-#if __has_builtin(__builtin_available)
-  if (@available(iOS 7.0, *)) {
-#else
-  if ([[UIDevice currentDevice].systemVersion integerValue] >= 7) {
-#endif
-    NSURL *appStoreReceiptURL = [NSBundle mainBundle].appStoreReceiptURL;
-    NSString *appStoreReceiptFileName = appStoreReceiptURL.lastPathComponent;
-    return [appStoreReceiptFileName isEqualToString:kFIRAIdentitySandboxReceiptFileName];
-  }
-  return NO;
-}
-
-+ (BOOL)isSimulator {
-#if TARGET_OS_SIMULATOR
-  return YES;
-#elif TARGET_OS_MACCATALYST
-  return NO;
-#elif TARGET_OS_IOS || TARGET_OS_TV
-  NSString *platform = [GULAppEnvironmentUtil deviceModel];
-  return [platform isEqual:@"x86_64"] || [platform isEqual:@"i386"];
-#elif TARGET_OS_OSX
-  return NO;
-#endif
-  return NO;
-}
-
-+ (NSString *)deviceModel {
-  static dispatch_once_t once;
-  static NSString *deviceModel;
-
-  dispatch_once(&once, ^{
-    struct utsname systemInfo;
-    if (uname(&systemInfo) == 0) {
-      deviceModel = [NSString stringWithUTF8String:systemInfo.machine];
-    }
-  });
-  return deviceModel;
-}
-
-+ (NSString *)systemVersion {
-#if TARGET_OS_IOS
-  return [UIDevice currentDevice].systemVersion;
-#elif TARGET_OS_OSX || TARGET_OS_TV || TARGET_OS_WATCH
-  // Assemble the systemVersion, excluding the patch version if it's 0.
-  NSOperatingSystemVersion osVersion = [NSProcessInfo processInfo].operatingSystemVersion;
-  NSMutableString *versionString = [[NSMutableString alloc]
-      initWithFormat:@"%ld.%ld", (long)osVersion.majorVersion, (long)osVersion.minorVersion];
-  if (osVersion.patchVersion != 0) {
-    [versionString appendFormat:@".%ld", (long)osVersion.patchVersion];
-  }
-  return versionString;
-#endif
-}
-
-+ (BOOL)isAppExtension {
-#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_WATCH
-  // Documented by <a href="https://goo.gl/RRB2Up">Apple</a>
-  BOOL appExtension = [[[NSBundle mainBundle] bundlePath] hasSuffix:@".appex"];
-  return appExtension;
-#elif TARGET_OS_OSX
-  return NO;
-#endif
-}
-
-+ (BOOL)isIOS7OrHigher {
-#if __has_builtin(__builtin_available)
-  if (@available(iOS 7.0, *)) {
-#else
-  if ([[UIDevice currentDevice].systemVersion integerValue] >= 7) {
-#endif
-      return YES;
-    }
-
-    return NO;
-}
-
-@end
diff --git a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/LICENSE b/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/LICENSE
deleted file mode 100644
index 30a8f72..0000000
--- a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/LICENSE
+++ /dev/null
@@ -1,247 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
-================================================================================
-
-The following copyright from Landon J. Fuller applies to the isAppEncrypted
-function in Environment/third_party/GULAppEnvironmentUtil.m.
-
-Copyright (c) 2017 Landon J. Fuller <landon@landonf.org>
-All rights reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Comment from
-<a href="http://iphonedevwiki.net/index.php/Crack_prevention">iPhone Dev Wiki
-Crack Prevention</a>: App Store binaries are signed by both their developer
-and Apple. This encrypts the binary so that decryption keys are needed in order
-to make the binary readable. When iOS executes the binary, the decryption keys
-are used to decrypt the binary into a readable state where it is then loaded
-into memory and executed. iOS can tell the encryption status of a binary via the
-cryptid structure member of LC_ENCRYPTION_INFO MachO load command. If cryptid is
-a non-zero value then the binary is encrypted.
-
-'Cracking' works by letting the kernel decrypt the binary then siphoning the
-decrypted data into a new binary file, resigning, and repackaging. This will
-only work on jailbroken devices as codesignature validation has been removed.
-Resigning takes place because while the codesignature doesn't have to be valid
-thanks to the jailbreak, it does have to be in place unless you have AppSync or
-similar to disable codesignature checks.
-
-More information at <a href="http://landonf.org/2009/02/index.html">Landon
-Fuller's blog</a>
diff --git a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Logger/GULLogger.m b/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Logger/GULLogger.m
deleted file mode 100644
index 0a512da..0000000
--- a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Logger/GULLogger.m
+++ /dev/null
@@ -1,214 +0,0 @@
-// Copyright 2018 Google
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#import "GoogleUtilities/Logger/Private/GULLogger.h"
-
-#include <asl.h>
-
-#import <GoogleUtilities/GULAppEnvironmentUtil.h>
-#import <GoogleUtilities/GULLoggerLevel.h>
-
-/// ASL client facility name used by GULLogger.
-const char *kGULLoggerASLClientFacilityName = "com.google.utilities.logger";
-
-static dispatch_once_t sGULLoggerOnceToken;
-
-static aslclient sGULLoggerClient;
-
-static dispatch_queue_t sGULClientQueue;
-
-static BOOL sGULLoggerDebugMode;
-
-static GULLoggerLevel sGULLoggerMaximumLevel;
-
-// Allow clients to register a version to include in the log.
-static const char *sVersion = "";
-
-static GULLoggerService kGULLoggerLogger = @"[GULLogger]";
-
-#ifdef DEBUG
-/// The regex pattern for the message code.
-static NSString *const kMessageCodePattern = @"^I-[A-Z]{3}[0-9]{6}$";
-static NSRegularExpression *sMessageCodeRegex;
-#endif
-
-void GULLoggerInitializeASL(void) {
-  dispatch_once(&sGULLoggerOnceToken, ^{
-    NSInteger majorOSVersion = [[GULAppEnvironmentUtil systemVersion] integerValue];
-    uint32_t aslOptions = ASL_OPT_STDERR;
-#if TARGET_OS_SIMULATOR
-    // The iOS 11 simulator doesn't need the ASL_OPT_STDERR flag.
-    if (majorOSVersion >= 11) {
-      aslOptions = 0;
-    }
-#else
-    // Devices running iOS 10 or higher don't need the ASL_OPT_STDERR flag.
-    if (majorOSVersion >= 10) {
-      aslOptions = 0;
-    }
-#endif  // TARGET_OS_SIMULATOR
-
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"  // asl is deprecated
-    // Initialize the ASL client handle.
-    sGULLoggerClient = asl_open(NULL, kGULLoggerASLClientFacilityName, aslOptions);
-    sGULLoggerMaximumLevel = GULLoggerLevelNotice;
-
-    // Set the filter used by system/device log. Initialize in default mode.
-    asl_set_filter(sGULLoggerClient, ASL_FILTER_MASK_UPTO(ASL_LEVEL_NOTICE));
-
-    sGULClientQueue = dispatch_queue_create("GULLoggingClientQueue", DISPATCH_QUEUE_SERIAL);
-    dispatch_set_target_queue(sGULClientQueue,
-                              dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0));
-#ifdef DEBUG
-    sMessageCodeRegex = [NSRegularExpression regularExpressionWithPattern:kMessageCodePattern
-                                                                  options:0
-                                                                    error:NULL];
-#endif
-  });
-}
-
-void GULLoggerEnableSTDERR(void) {
-  asl_add_log_file(sGULLoggerClient, STDERR_FILENO);
-}
-
-void GULLoggerForceDebug(void) {
-  // We should enable debug mode if we're not running from App Store.
-  if (![GULAppEnvironmentUtil isFromAppStore]) {
-    sGULLoggerDebugMode = YES;
-    GULSetLoggerLevel(GULLoggerLevelDebug);
-  }
-}
-
-__attribute__((no_sanitize("thread"))) void GULSetLoggerLevel(GULLoggerLevel loggerLevel) {
-  if (loggerLevel < GULLoggerLevelMin || loggerLevel > GULLoggerLevelMax) {
-    GULLogError(kGULLoggerLogger, NO, @"I-COR000023", @"Invalid logger level, %ld",
-                (long)loggerLevel);
-    return;
-  }
-  GULLoggerInitializeASL();
-  // We should not raise the logger level if we are running from App Store.
-  if (loggerLevel >= GULLoggerLevelNotice && [GULAppEnvironmentUtil isFromAppStore]) {
-    return;
-  }
-
-  sGULLoggerMaximumLevel = loggerLevel;
-  dispatch_async(sGULClientQueue, ^{
-    asl_set_filter(sGULLoggerClient, ASL_FILTER_MASK_UPTO(loggerLevel));
-  });
-}
-
-/**
- * Check if the level is high enough to be loggable.
- */
-__attribute__((no_sanitize("thread"))) BOOL GULIsLoggableLevel(GULLoggerLevel loggerLevel) {
-  GULLoggerInitializeASL();
-  if (sGULLoggerDebugMode) {
-    return YES;
-  }
-  return (BOOL)(loggerLevel <= sGULLoggerMaximumLevel);
-}
-
-#ifdef DEBUG
-void GULResetLogger() {
-  sGULLoggerOnceToken = 0;
-}
-
-aslclient getGULLoggerClient() {
-  return sGULLoggerClient;
-}
-
-dispatch_queue_t getGULClientQueue() {
-  return sGULClientQueue;
-}
-
-BOOL getGULLoggerDebugMode() {
-  return sGULLoggerDebugMode;
-}
-#endif
-
-void GULLoggerRegisterVersion(const char *version) {
-  sVersion = version;
-}
-
-void GULLogBasic(GULLoggerLevel level,
-                 GULLoggerService service,
-                 BOOL forceLog,
-                 NSString *messageCode,
-                 NSString *message,
-                 va_list args_ptr) {
-  GULLoggerInitializeASL();
-  if (!(level <= sGULLoggerMaximumLevel || sGULLoggerDebugMode || forceLog)) {
-    return;
-  }
-
-#ifdef DEBUG
-  NSCAssert(messageCode.length == 11, @"Incorrect message code length.");
-  NSRange messageCodeRange = NSMakeRange(0, messageCode.length);
-  NSUInteger numberOfMatches = [sMessageCodeRegex numberOfMatchesInString:messageCode
-                                                                  options:0
-                                                                    range:messageCodeRange];
-  NSCAssert(numberOfMatches == 1, @"Incorrect message code format.");
-#endif
-  NSString *logMsg;
-  if (args_ptr == NULL) {
-    logMsg = message;
-  } else {
-    logMsg = [[NSString alloc] initWithFormat:message arguments:args_ptr];
-  }
-  logMsg = [NSString stringWithFormat:@"%s - %@[%@] %@", sVersion, service, messageCode, logMsg];
-  dispatch_async(sGULClientQueue, ^{
-    asl_log(sGULLoggerClient, NULL, (int)level, "%s", logMsg.UTF8String);
-  });
-}
-#pragma clang diagnostic pop
-
-/**
- * Generates the logging functions using macros.
- *
- * Calling GULLogError({service}, @"I-XYZ000001", @"Configure %@ failed.", @"blah") shows:
- * yyyy-mm-dd hh:mm:ss.SSS sender[PID] <Error> [{service}][I-XYZ000001] Configure blah failed.
- * Calling GULLogDebug({service}, @"I-XYZ000001", @"Configure succeed.") shows:
- * yyyy-mm-dd hh:mm:ss.SSS sender[PID] <Debug> [{service}][I-XYZ000001] Configure succeed.
- */
-#define GUL_LOGGING_FUNCTION(level)                                                     \
-  void GULLog##level(GULLoggerService service, BOOL force, NSString *messageCode,       \
-                     NSString *message, ...) {                                          \
-    va_list args_ptr;                                                                   \
-    va_start(args_ptr, message);                                                        \
-    GULLogBasic(GULLoggerLevel##level, service, force, messageCode, message, args_ptr); \
-    va_end(args_ptr);                                                                   \
-  }
-
-GUL_LOGGING_FUNCTION(Error)
-GUL_LOGGING_FUNCTION(Warning)
-GUL_LOGGING_FUNCTION(Notice)
-GUL_LOGGING_FUNCTION(Info)
-GUL_LOGGING_FUNCTION(Debug)
-
-#undef GUL_MAKE_LOGGER
-
-#pragma mark - GULLoggerWrapper
-
-@implementation GULLoggerWrapper
-
-+ (void)logWithLevel:(GULLoggerLevel)level
-         withService:(GULLoggerService)service
-            withCode:(NSString *)messageCode
-         withMessage:(NSString *)message
-            withArgs:(va_list)args {
-  GULLogBasic(level, service, NO, messageCode, message, args);
-}
-
-@end
diff --git a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Logger/Private/GULLogger.h b/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Logger/Private/GULLogger.h
deleted file mode 100644
index ff42576..0000000
--- a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Logger/Private/GULLogger.h
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright 2018 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#import <GoogleUtilities/GULLoggerLevel.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-/**
- * The services used in the logger.
- */
-typedef NSString *const GULLoggerService;
-
-#ifdef __cplusplus
-extern "C" {
-#endif  // __cplusplus
-
-/**
- * Initialize GULLogger.
- */
-extern void GULLoggerInitializeASL(void);
-
-/**
- * Override log level to Debug.
- */
-void GULLoggerForceDebug(void);
-
-/**
- * Turn on logging to STDERR.
- */
-extern void GULLoggerEnableSTDERR(void);
-
-/**
- * Changes the default logging level of GULLoggerLevelNotice to a user-specified level.
- * The default level cannot be set above GULLoggerLevelNotice if the app is running from App Store.
- * (required) log level (one of the GULLoggerLevel enum values).
- */
-extern void GULSetLoggerLevel(GULLoggerLevel loggerLevel);
-
-/**
- * Checks if the specified logger level is loggable given the current settings.
- * (required) log level (one of the GULLoggerLevel enum values).
- */
-extern BOOL GULIsLoggableLevel(GULLoggerLevel loggerLevel);
-
-/**
- * Register version to include in logs.
- * (required) version
- */
-extern void GULLoggerRegisterVersion(const char *version);
-
-/**
- * Logs a message to the Xcode console and the device log. If running from AppStore, will
- * not log any messages with a level higher than GULLoggerLevelNotice to avoid log spamming.
- * (required) log level (one of the GULLoggerLevel enum values).
- * (required) service name of type GULLoggerService.
- * (required) message code starting with "I-" which means iOS, followed by a capitalized
- *            three-character service identifier and a six digit integer message ID that is unique
- *            within the service.
- *            An example of the message code is @"I-COR000001".
- * (required) message string which can be a format string.
- * (optional) variable arguments list obtained from calling va_start, used when message is a format
- *            string.
- */
-extern void GULLogBasic(GULLoggerLevel level,
-                        GULLoggerService service,
-                        BOOL forceLog,
-                        NSString *messageCode,
-                        NSString *message,
-// On 64-bit simulators, va_list is not a pointer, so cannot be marked nullable
-// See: http://stackoverflow.com/q/29095469
-#if __LP64__ && TARGET_OS_SIMULATOR || TARGET_OS_OSX
-                        va_list args_ptr
-#else
-                        va_list _Nullable args_ptr
-#endif
-);
-
-/**
- * The following functions accept the following parameters in order:
- * (required) service name of type GULLoggerService.
- * (required) message code starting from "I-" which means iOS, followed by a capitalized
- *            three-character service identifier and a six digit integer message ID that is unique
- *            within the service.
- *            An example of the message code is @"I-COR000001".
- *            See go/firebase-log-proposal for details.
- * (required) message string which can be a format string.
- * (optional) the list of arguments to substitute into the format string.
- * Example usage:
- * GULLogError(kGULLoggerCore, @"I-COR000001", @"Configuration of %@ failed.", app.name);
- */
-extern void GULLogError(GULLoggerService service,
-                        BOOL force,
-                        NSString *messageCode,
-                        NSString *message,
-                        ...) NS_FORMAT_FUNCTION(4, 5);
-extern void GULLogWarning(GULLoggerService service,
-                          BOOL force,
-                          NSString *messageCode,
-                          NSString *message,
-                          ...) NS_FORMAT_FUNCTION(4, 5);
-extern void GULLogNotice(GULLoggerService service,
-                         BOOL force,
-                         NSString *messageCode,
-                         NSString *message,
-                         ...) NS_FORMAT_FUNCTION(4, 5);
-extern void GULLogInfo(GULLoggerService service,
-                       BOOL force,
-                       NSString *messageCode,
-                       NSString *message,
-                       ...) NS_FORMAT_FUNCTION(4, 5);
-extern void GULLogDebug(GULLoggerService service,
-                        BOOL force,
-                        NSString *messageCode,
-                        NSString *message,
-                        ...) NS_FORMAT_FUNCTION(4, 5);
-
-#ifdef __cplusplus
-}  // extern "C"
-#endif  // __cplusplus
-
-@interface GULLoggerWrapper : NSObject
-
-/**
- * Objective-C wrapper for GULLogBasic to allow weak linking to GULLogger
- * (required) log level (one of the GULLoggerLevel enum values).
- * (required) service name of type GULLoggerService.
- * (required) message code starting with "I-" which means iOS, followed by a capitalized
- *            three-character service identifier and a six digit integer message ID that is unique
- *            within the service.
- *            An example of the message code is @"I-COR000001".
- * (required) message string which can be a format string.
- * (optional) variable arguments list obtained from calling va_start, used when message is a format
- *            string.
- */
-
-+ (void)logWithLevel:(GULLoggerLevel)level
-         withService:(GULLoggerService)service
-            withCode:(NSString *)messageCode
-         withMessage:(NSString *)message
-            withArgs:(va_list)args;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Logger/Public/GULLoggerLevel.h b/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Logger/Public/GULLoggerLevel.h
deleted file mode 100644
index f0ee435..0000000
--- a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Logger/Public/GULLoggerLevel.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright 2018 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-/**
- * The log levels used by internal logging.
- */
-typedef NS_ENUM(NSInteger, GULLoggerLevel) {
-  /** Error level, matches ASL_LEVEL_ERR. */
-  GULLoggerLevelError = 3,
-  /** Warning level, matches ASL_LEVEL_WARNING. */
-  GULLoggerLevelWarning = 4,
-  /** Notice level, matches ASL_LEVEL_NOTICE. */
-  GULLoggerLevelNotice = 5,
-  /** Info level, matches ASL_LEVEL_INFO. */
-  GULLoggerLevelInfo = 6,
-  /** Debug level, matches ASL_LEVEL_DEBUG. */
-  GULLoggerLevelDebug = 7,
-  /** Minimum log level. */
-  GULLoggerLevelMin = GULLoggerLevelError,
-  /** Maximum log level. */
-  GULLoggerLevelMax = GULLoggerLevelDebug
-} NS_SWIFT_NAME(GoogleLoggerLevel);
diff --git a/assign5/openTok/Pods/GoogleUtilities/README.md b/assign5/openTok/Pods/GoogleUtilities/README.md
deleted file mode 100644
index b04a270..0000000
--- a/assign5/openTok/Pods/GoogleUtilities/README.md
+++ /dev/null
@@ -1,282 +0,0 @@
-# Firebase iOS Open Source Development
- [![Actions Status][gh-auth-badge]][gh-actions]
- [![Actions Status][gh-core-badge]][gh-actions]
- [![Actions Status][gh-datatransport-badge]][gh-actions]
- [![Actions Status][gh-dynamiclinks-badge]][gh-actions]
- [![Actions Status][gh-firebasepod-badge]][gh-actions]
- [![Actions Status][gh-firestore-badge]][gh-actions]
- [![Actions Status][gh-interop-badge]][gh-actions]
- [![Actions Status][gh-messaging-badge]][gh-actions]
- [![Actions Status][gh-storage-badge]][gh-actions]
- [![Actions Status][gh-symbolcollision-badge]][gh-actions]
- [![Actions Status][gh-zip-badge]][gh-actions]
- [![Travis](https://travis-ci.org/firebase/firebase-ios-sdk.svg?branch=master)](https://travis-ci.org/firebase/firebase-ios-sdk)
-
-This repository contains all Firebase iOS SDK source except FirebaseAnalytics,
-FirebasePerformance, and FirebaseML.
-
-The repository also includes GoogleUtilities source. The
-[GoogleUtilities](GoogleUtilities/README.md) pod is
-a set of utilities used by Firebase and other Google products.
-
-Firebase is an app development platform with tools to help you build, grow and
-monetize your app. More information about Firebase can be found at
-[https://firebase.google.com](https://firebase.google.com).
-
-## Installation
-
-See the three subsections for details about three different installation methods.
-1. [Standard pod install](README.md#standard-pod-install)
-1. [Installing from the GitHub repo](README.md#installing-from-github)
-1. [Experimental Carthage](README.md#carthage-ios-only)
-
-### Standard pod install
-
-Go to
-[https://firebase.google.com/docs/ios/setup](https://firebase.google.com/docs/ios/setup).
-
-### Installing from GitHub
-
-For releases starting with 5.0.0, the source for each release is also deployed
-to CocoaPods master and available via standard
-[CocoaPods Podfile syntax](https://guides.cocoapods.org/syntax/podfile.html#pod).
-
-These instructions can be used to access the Firebase repo at other branches,
-tags, or commits.
-
-#### Background
-
-See
-[the Podfile Syntax Reference](https://guides.cocoapods.org/syntax/podfile.html#pod)
-for instructions and options about overriding pod source locations.
-
-#### Accessing Firebase Source Snapshots
-
-All of the official releases are tagged in this repo and available via CocoaPods. To access a local
-source snapshot or unreleased branch, use Podfile directives like the following:
-
-To access FirebaseFirestore via a branch:
-```
-pod 'FirebaseCore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master'
-pod 'FirebaseFirestore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master'
-```
-
-To access FirebaseMessaging via a checked out version of the firebase-ios-sdk repo do:
-
-```
-pod 'FirebaseCore', :path => '/path/to/firebase-ios-sdk'
-pod 'FirebaseMessaging', :path => '/path/to/firebase-ios-sdk'
-```
-
-### Carthage (iOS only)
-
-Instructions for the experimental Carthage distribution are at
-[Carthage](Carthage.md).
-
-### Rome
-
-Instructions for installing binary frameworks via
-[Rome](https://github.com/CocoaPods/Rome) are at [Rome](Rome.md).
-
-### Using Firebase from a Framework or a library
-
-[Using Firebase from a Framework or a library](docs/firebase_in_libraries.md)
-
-## Development
-
-To develop Firebase software in this repository, ensure that you have at least
-the following software:
-
-  * Xcode 10.1 (or later)
-  * CocoaPods 1.7.2 (or later)
-  * [CocoaPods generate](https://github.com/square/cocoapods-generate)
-
-For the pod that you want to develop:
-
-`pod gen Firebase{name here}.podspec --local-sources=./ --auto-open --platforms=ios`
-
-Note: If the CocoaPods cache is out of date, you may need to run
-`pod repo update` before the `pod gen` command.
-
-Note: Set the `--platforms` option to `macos` or `tvos` to develop/test for
-those platforms. Since 10.2, Xcode does not properly handle multi-platform
-CocoaPods workspaces.
-
-Firestore has a self contained Xcode project. See
-[Firestore/README.md](Firestore/README.md).
-
-### Development for Catalyst
-* `pod gen {name here}.podspec --local-sources=./ --auto-open --platforms=ios`
-* Check the Mac box in the App-iOS Build Settings
-* Sign the App in the Settings Signing & Capabilities tab
-* Click Pods in the Project Manager
-* Add Signing to the iOS host app and unit test targets
-* Select the Unit-unit scheme
-* Run it to build and test
-
-### Adding a New Firebase Pod
-
-See [AddNewPod.md](AddNewPod.md).
-
-### Code Formatting
-
-To ensure that the code is formatted consistently, run the script
-[./scripts/style.sh](https://github.com/firebase/firebase-ios-sdk/blob/master/scripts/style.sh)
-before creating a PR.
-
-Travis will verify that any code changes are done in a style compliant way. Install
-`clang-format` and `swiftformat`.
-These commands will get the right versions:
-
-```
-brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/c6f1cbd/Formula/clang-format.rb
-brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/c13eda8/Formula/swiftformat.rb
-```
-
-Note: if you already have a newer version of these installed you may need to
-`brew switch` to this version.
-
-To update this section, find the versions of clang-format and swiftformat.rb to
-match the versions in the CI failure logs
-[here](https://github.com/Homebrew/homebrew-core/tree/master/Formula).
-
-### Running Unit Tests
-
-Select a scheme and press Command-u to build a component and run its unit tests.
-
-#### Viewing Code Coverage (Deprecated)
-
-First, make sure that [xcov](https://github.com/nakiostudio/xcov) is installed with `gem install xcov`.
-
-After running the `AllUnitTests_iOS` scheme in Xcode, execute
-`xcov --workspace Firebase.xcworkspace --scheme AllUnitTests_iOS --output_directory xcov_output`
-at Example/ in the terminal. This will aggregate the coverage, and you can run `open xcov_output/index.html` to see the results.
-
-### Running Sample Apps
-In order to run the sample apps and integration tests, you'll need valid
-`GoogleService-Info.plist` files for those samples. The Firebase Xcode project contains dummy plist
-files without real values, but can be replaced with real plist files. To get your own
-`GoogleService-Info.plist` files:
-
-1. Go to the [Firebase Console](https://console.firebase.google.com/)
-2. Create a new Firebase project, if you don't already have one
-3. For each sample app you want to test, create a new Firebase app with the sample app's bundle
-identifier (e.g. `com.google.Database-Example`)
-4. Download the resulting `GoogleService-Info.plist` and replace the appropriate dummy plist file
-(e.g. in [Example/Database/App/](Example/Database/App/));
-
-Some sample apps like Firebase Messaging ([Example/Messaging/App](Example/Messaging/App)) require
-special Apple capabilities, and you will have to change the sample app to use a unique bundle
-identifier that you can control in your own Apple Developer account.
-
-## Specific Component Instructions
-See the sections below for any special instructions for those components.
-
-### Firebase Auth
-
-If you're doing specific Firebase Auth development, see
-[the Auth Sample README](FirebaseAuth/Tests/Sample/README.md) for instructions about
-building and running the FirebaseAuth pod along with various samples and tests.
-
-### Firebase Database
-
-To run the Database Integration tests, make your database authentication rules
-[public](https://firebase.google.com/docs/database/security/quickstart).
-
-### Firebase Storage
-
-To run the Storage Integration tests, follow the instructions in
-[FIRStorageIntegrationTests.m](FirebaseStorage/Tests/Integration/FIRStorageIntegrationTests.m).
-
-#### Push Notifications
-
-Push notifications can only be delivered to specially provisioned App IDs in the developer portal.
-In order to actually test receiving push notifications, you will need to:
-
-1. Change the bundle identifier of the sample app to something you own in your Apple Developer
-account, and enable that App ID for push notifications.
-2. You'll also need to
-[upload your APNs Provider Authentication Key or certificate to the Firebase Console](https://firebase.google.com/docs/cloud-messaging/ios/certs)
-at **Project Settings > Cloud Messaging > [Your Firebase App]**.
-3. Ensure your iOS device is added to your Apple Developer portal as a test device.
-
-#### iOS Simulator
-
-The iOS Simulator cannot register for remote notifications, and will not receive push notifications.
-In order to receive push notifications, you'll have to follow the steps above and run the app on a
-physical device.
-
-## Community Supported Efforts
-
-We've seen an amazing amount of interest and contributions to improve the Firebase SDKs, and we are
-very grateful!  We'd like to empower as many developers as we can to be able to use Firebase and
-participate in the Firebase community.
-
-### tvOS, macOS, watchOS and Catalyst
-Thanks to contributions from the community, many of Firebase SDKs now compile, run unit tests, and work on
-tvOS, macOS, watchOS and Catalyst.
-
-For tvOS, checkout the [Sample](Example/tvOSSample).
-For watchOS, currently only Messaging and Storage (and their dependencies) have limited support. Checkout the
-[Independent Watch App Sample](Example/watchOSSample).
-
-Keep in mind that macOS, tvOS, watchOS and Catalyst are not officially supported by Firebase, and this
-repository is actively developed primarily for iOS. While we can catch basic unit test issues with
-Travis, there may be some changes where the SDK no longer works as expected on macOS, tvOS or watchOS. If you
-encounter this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues).
-
-During app setup in the console, you may get to a step that mentions something like "Checking if the app
-has communicated with our servers". This relies on Analytics and will not work on macOS/tvOS/watchOS/Catalyst.
-**It's safe to ignore the message and continue**, the rest of the SDKs will work as expected.
-
-To install, add a subset of the following to the Podfile:
-
-```
-pod 'Firebase/ABTesting'     # No watchOS support yet
-pod 'Firebase/Auth'          # No watchOS support yet
-pod 'Firebase/Crashlytics'   # No watchOS support yet
-pod 'Firebase/Database'      # No watchOS support yet
-pod 'Firebase/Firestore'     # No watchOS support yet
-pod 'Firebase/Functions'     # No watchOS support yet
-pod 'Firebase/Messaging'
-pod 'Firebase/RemoteConfig'  # No watchOS support yet
-pod 'Firebase/Storage'
-```
-
-#### Additional Catalyst Notes
-
-* FirebaseAuth and FirebaseMessaging require adding `Keychain Sharing Capability`
-to Build Settings.
-* FirebaseFirestore requires signing the
-[gRPC Resource target](https://github.com/firebase/firebase-ios-sdk/issues/3500#issuecomment-518741681).
-
-## Roadmap
-
-See [Roadmap](ROADMAP.md) for more about the Firebase iOS SDK Open Source
-plans and directions.
-
-## Contributing
-
-See [Contributing](CONTRIBUTING.md) for more information on contributing to the Firebase
-iOS SDK.
-
-## License
-
-The contents of this repository is licensed under the
-[Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0).
-
-Your use of Firebase is governed by the
-[Terms of Service for Firebase Services](https://firebase.google.com/terms/).
-
-[gh-actions]: https://github.com/firebase/firebase-ios-sdk/actions
-[gh-auth-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/auth/badge.svg
-[gh-core-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/core/badge.svg
-[gh-datatransport-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/datatransport/badge.svg
-[gh-dynamiclinks-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/dynamiclinks/badge.svg
-[gh-firebasepod-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firebasepod/badge.svg
-[gh-firestore-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firestore/badge.svg
-[gh-interop-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/interop/badge.svg
-[gh-messaging-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/messaging/badge.svg
-[gh-storage-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/storage/badge.svg
-[gh-symbolcollision-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/symbolcollision/badge.svg
-[gh-zip-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/zip/badge.svg
diff --git a/assign5/openTok/Pods/Headers/Private/Firebase/Firebase.h b/assign5/openTok/Pods/Headers/Private/Firebase/Firebase.h
deleted file mode 100755
index e5049ca..0000000
--- a/assign5/openTok/Pods/Headers/Private/Firebase/Firebase.h
+++ /dev/null
@@ -1,172 +0,0 @@
-// Copyright 2019 Google
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#import <FirebaseCore/FirebaseCore.h>
-
-#if !defined(__has_include)
-  #error "Firebase.h won't import anything if your compiler doesn't support __has_include. Please \
-          import the headers individually."
-#else
-  #if __has_include(<FirebaseAnalytics/FirebaseAnalytics.h>)
-    #import <FirebaseAnalytics/FirebaseAnalytics.h>
-  #endif
-
-  #if __has_include(<FirebaseAuth/FirebaseAuth.h>)
-    #import <FirebaseAuth/FirebaseAuth.h>
-  #endif
-
-  #if __has_include(<FirebaseCrashlytics/FirebaseCrashlytics.h>)
-    #import <FirebaseCrashlytics/FirebaseCrashlytics.h>
-  #endif
-
-  #if __has_include(<FirebaseDatabase/FirebaseDatabase.h>)
-    #import <FirebaseDatabase/FirebaseDatabase.h>
-  #endif
-
-  #if __has_include(<FirebaseDynamicLinks/FirebaseDynamicLinks.h>)
-    #import <FirebaseDynamicLinks/FirebaseDynamicLinks.h>
-    #if !__has_include(<FirebaseAnalytics/FirebaseAnalytics.h>)
-      #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING
-        #warning "FirebaseAnalytics.framework is not included in your target. Please add \
-`Firebase/Analytics` to your Podfile or add FirebaseAnalytics.framework to your project to ensure \
-Firebase Dynamic Links works as intended."
-      #endif // #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING
-    #endif
-  #endif
-
-  #if __has_include(<FirebaseFirestore/FirebaseFirestore.h>)
-    #import <FirebaseFirestore/FirebaseFirestore.h>
-  #endif
-
-  #if __has_include(<FirebaseFunctions/FirebaseFunctions.h>)
-    #import <FirebaseFunctions/FirebaseFunctions.h>
-  #endif
-
-  #if __has_include(<FirebaseInAppMessaging/FirebaseInAppMessaging.h>)
-    #import <FirebaseInAppMessaging/FirebaseInAppMessaging.h>
-    #if !__has_include(<FirebaseAnalytics/FirebaseAnalytics.h>)
-      #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING
-        #warning "FirebaseAnalytics.framework is not included in your target. Please add \
-`Firebase/Analytics` to your Podfile or add FirebaseAnalytics.framework to your project to ensure \
-Firebase In App Messaging works as intended."
-      #endif // #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING
-    #endif
-  #endif
-
-  #if __has_include(<FirebaseInstanceID/FirebaseInstanceID.h>)
-    #import <FirebaseInstanceID/FirebaseInstanceID.h>
-  #endif
-
-  #if __has_include(<FirebaseMessaging/FirebaseMessaging.h>)
-    #import <FirebaseMessaging/FirebaseMessaging.h>
-      #if !__has_include(<FirebaseAnalytics/FirebaseAnalytics.h>)
-      #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING
-        #warning "FirebaseAnalytics.framework is not included in your target. Please add \
-`Firebase/Analytics` to your Podfile or add FirebaseAnalytics.framework to your project to ensure \
-Firebase Messaging works as intended."
-      #endif // #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING
-    #endif
-#endif
-
-  #if __has_include(<FirebaseMLCommon/FirebaseMLCommon.h>)
-    #import <FirebaseMLCommon/FirebaseMLCommon.h>
-  #endif
-
-  #if __has_include(<FirebaseMLModelInterpreter/FirebaseMLModelInterpreter.h>)
-    #import <FirebaseMLModelInterpreter/FirebaseMLModelInterpreter.h>
-  #endif
-
-  #if __has_include(<FirebaseMLNLLanguageID/FirebaseMLNLLanguageID.h>)
-    #import <FirebaseMLNLLanguageID/FirebaseMLNLLanguageID.h>
-  #endif
-
-  #if __has_include(<FirebaseMLNLSmartReply/FirebaseMLNLSmartReply.h>)
-    #import <FirebaseMLNLSmartReply/FirebaseMLNLSmartReply.h>
-  #endif
-
-  #if __has_include(<FirebaseMLNLTranslate/FirebaseMLNLTranslate.h>)
-    #import <FirebaseMLNLTranslate/FirebaseMLNLTranslate.h>
-  #endif
-
-  #if __has_include(<FirebaseMLNaturalLanguage/FirebaseMLNaturalLanguage.h>)
-    #import <FirebaseMLNaturalLanguage/FirebaseMLNaturalLanguage.h>
-  #endif
-
-  #if __has_include(<FirebaseMLVision/FirebaseMLVision.h>)
-    #import <FirebaseMLVision/FirebaseMLVision.h>
-  #endif
-
-  #if __has_include(<FirebaseMLVisionAutoML/FirebaseMLVisionAutoML.h>)
-    #import <FirebaseMLVisionAutoML/FirebaseMLVisionAutoML.h>
-  #endif
-
-  #if __has_include(<FirebaseMLVisionBarcodeModel/FirebaseMLVisionBarcodeModel.h>)
-    #import <FirebaseMLVisionBarcodeModel/FirebaseMLVisionBarcodeModel.h>
-  #endif
-
-  #if __has_include(<FirebaseMLVisionFaceModel/FirebaseMLVisionFaceModel.h>)
-    #import <FirebaseMLVisionFaceModel/FirebaseMLVisionFaceModel.h>
-  #endif
-
-  #if __has_include(<FirebaseMLVisionLabelModel/FirebaseMLVisionLabelModel.h>)
-    #import <FirebaseMLVisionLabelModel/FirebaseMLVisionLabelModel.h>
-  #endif
-
-  #if __has_include(<FirebaseMLVisionObjectDetection/FirebaseMLVisionObjectDetection.h>)
-    #import <FirebaseMLVisionObjectDetection/FirebaseMLVisionObjectDetection.h>
-  #endif
-
-  #if __has_include(<FirebaseMLVisionTextModel/FirebaseMLVisionTextModel.h>)
-    #import <FirebaseMLVisionTextModel/FirebaseMLVisionTextModel.h>
-  #endif
-
-  #if __has_include(<FirebasePerformance/FirebasePerformance.h>)
-    #import <FirebasePerformance/FirebasePerformance.h>
-    #if !__has_include(<FirebaseAnalytics/FirebaseAnalytics.h>)
-      #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING
-        #warning "FirebaseAnalytics.framework is not included in your target. Please add \
-`Firebase/Analytics` to your Podfile or add FirebaseAnalytics.framework to your project to ensure \
-Firebase Performance works as intended."
-      #endif // #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING
-    #endif
-  #endif
-
-  #if __has_include(<FirebaseRemoteConfig/FirebaseRemoteConfig.h>)
-    #import <FirebaseRemoteConfig/FirebaseRemoteConfig.h>
-    #if !__has_include(<FirebaseAnalytics/FirebaseAnalytics.h>)
-      #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING
-        #warning "FirebaseAnalytics.framework is not included in your target. Please add \
-`Firebase/Analytics` to your Podfile or add FirebaseAnalytics.framework to your project to ensure \
-Firebase Remote Config works as intended."
-      #endif // #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING
-    #endif
-  #endif
-
-  #if __has_include(<FirebaseStorage/FirebaseStorage.h>)
-    #import <FirebaseStorage/FirebaseStorage.h>
-  #endif
-
-  #if __has_include(<GoogleMobileAds/GoogleMobileAds.h>)
-    #import <GoogleMobileAds/GoogleMobileAds.h>
-  #endif
-
-  #if __has_include(<Fabric/Fabric.h>)
-    #import <Fabric/Fabric.h>
-  #endif
-
-  #if __has_include(<Crashlytics/Crashlytics.h>)
-    #import <Crashlytics/Crashlytics.h>
-  #endif
-
-#endif  // defined(__has_include)
diff --git a/assign5/openTok/Pods/Headers/Private/FirebaseAuthInterop/FIRAuthInterop.h b/assign5/openTok/Pods/Headers/Private/FirebaseAuthInterop/FIRAuthInterop.h
deleted file mode 100644
index a33da7c..0000000
--- a/assign5/openTok/Pods/Headers/Private/FirebaseAuthInterop/FIRAuthInterop.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2018 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef FIRAuthInterop_h
-#define FIRAuthInterop_h
-
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-/** @typedef FIRTokenCallback
- @brief The type of block which gets called when a token is ready.
- */
-typedef void (^FIRTokenCallback)(NSString *_Nullable token, NSError *_Nullable error)
-    NS_SWIFT_NAME(TokenCallback);
-
-/// Common methods for Auth interoperability.
-NS_SWIFT_NAME(AuthInterop)
-@protocol FIRAuthInterop
-
-/// Retrieves the Firebase authentication token, possibly refreshing it if it has expired.
-- (void)getTokenForcingRefresh:(BOOL)forceRefresh withCallback:(FIRTokenCallback)callback;
-
-/// Get the current Auth user's UID. Returns nil if there is no user signed in.
-- (nullable NSString *)getUserID;
-
-@end
-
-NS_ASSUME_NONNULL_END
-
-#endif /* FIRAuthInterop_h */
diff --git a/assign5/openTok/Pods/Headers/Private/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsData.h b/assign5/openTok/Pods/Headers/Private/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsData.h
deleted file mode 100644
index 69c4072..0000000
--- a/assign5/openTok/Pods/Headers/Private/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsData.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-/** If present, is a BOOL wrapped in an NSNumber. */
-#define kFIRCDIsDataCollectionDefaultEnabledKey @"FIRCDIsDataCollectionDefaultEnabledKey"
-
-/** If present, is an int32_t wrapped in an NSNumber. */
-#define kFIRCDConfigurationTypeKey @"FIRCDConfigurationTypeKey"
-
-/** If present, is an NSString. */
-#define kFIRCDSdkNameKey @"FIRCDSdkNameKey"
-
-/** If present, is an NSString. */
-#define kFIRCDSdkVersionKey @"FIRCDSdkVersionKey"
-
-/** If present, is an int32_t wrapped in an NSNumber. */
-#define kFIRCDllAppsCountKey @"FIRCDllAppsCountKey"
-
-/** If present, is an NSString. */
-#define kFIRCDGoogleAppIDKey @"FIRCDGoogleAppIDKey"
-
-/** If present, is an NSString. */
-#define kFIRCDBundleIDKey @"FIRCDBundleID"
-
-/** If present, is a BOOL wrapped in an NSNumber. */
-#define kFIRCDUsingOptionsFromDefaultPlistKey @"FIRCDUsingOptionsFromDefaultPlistKey"
-
-/** If present, is an NSString. */
-#define kFIRCDLibraryVersionIDKey @"FIRCDLibraryVersionIDKey"
-
-/** If present, is an NSString. */
-#define kFIRCDFirebaseUserAgentKey @"FIRCDFirebaseUserAgentKey"
-
-/** Defines the interface of a data object needed to log diagnostics data. */
-@protocol FIRCoreDiagnosticsData <NSObject>
-
-@required
-
-/** A dictionary containing data (non-exhaustive) to be logged in diagnostics. */
-@property(nonatomic) NSDictionary<NSString *, id> *diagnosticObjects;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/Headers/Private/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsInterop.h b/assign5/openTok/Pods/Headers/Private/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsInterop.h
deleted file mode 100644
index 2b0eb71..0000000
--- a/assign5/openTok/Pods/Headers/Private/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsInterop.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#import "FIRCoreDiagnosticsData.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-/** Allows the interoperation of FirebaseCore and FirebaseCoreDiagnostics. */
-@protocol FIRCoreDiagnosticsInterop <NSObject>
-
-/** Sends the given diagnostics data.
- *
- * @param diagnosticsData The diagnostics data object to send.
- */
-+ (void)sendDiagnosticsData:(id<FIRCoreDiagnosticsData>)diagnosticsData;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/Headers/Public/Firebase/Firebase.h b/assign5/openTok/Pods/Headers/Public/Firebase/Firebase.h
deleted file mode 100755
index e5049ca..0000000
--- a/assign5/openTok/Pods/Headers/Public/Firebase/Firebase.h
+++ /dev/null
@@ -1,172 +0,0 @@
-// Copyright 2019 Google
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#import <FirebaseCore/FirebaseCore.h>
-
-#if !defined(__has_include)
-  #error "Firebase.h won't import anything if your compiler doesn't support __has_include. Please \
-          import the headers individually."
-#else
-  #if __has_include(<FirebaseAnalytics/FirebaseAnalytics.h>)
-    #import <FirebaseAnalytics/FirebaseAnalytics.h>
-  #endif
-
-  #if __has_include(<FirebaseAuth/FirebaseAuth.h>)
-    #import <FirebaseAuth/FirebaseAuth.h>
-  #endif
-
-  #if __has_include(<FirebaseCrashlytics/FirebaseCrashlytics.h>)
-    #import <FirebaseCrashlytics/FirebaseCrashlytics.h>
-  #endif
-
-  #if __has_include(<FirebaseDatabase/FirebaseDatabase.h>)
-    #import <FirebaseDatabase/FirebaseDatabase.h>
-  #endif
-
-  #if __has_include(<FirebaseDynamicLinks/FirebaseDynamicLinks.h>)
-    #import <FirebaseDynamicLinks/FirebaseDynamicLinks.h>
-    #if !__has_include(<FirebaseAnalytics/FirebaseAnalytics.h>)
-      #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING
-        #warning "FirebaseAnalytics.framework is not included in your target. Please add \
-`Firebase/Analytics` to your Podfile or add FirebaseAnalytics.framework to your project to ensure \
-Firebase Dynamic Links works as intended."
-      #endif // #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING
-    #endif
-  #endif
-
-  #if __has_include(<FirebaseFirestore/FirebaseFirestore.h>)
-    #import <FirebaseFirestore/FirebaseFirestore.h>
-  #endif
-
-  #if __has_include(<FirebaseFunctions/FirebaseFunctions.h>)
-    #import <FirebaseFunctions/FirebaseFunctions.h>
-  #endif
-
-  #if __has_include(<FirebaseInAppMessaging/FirebaseInAppMessaging.h>)
-    #import <FirebaseInAppMessaging/FirebaseInAppMessaging.h>
-    #if !__has_include(<FirebaseAnalytics/FirebaseAnalytics.h>)
-      #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING
-        #warning "FirebaseAnalytics.framework is not included in your target. Please add \
-`Firebase/Analytics` to your Podfile or add FirebaseAnalytics.framework to your project to ensure \
-Firebase In App Messaging works as intended."
-      #endif // #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING
-    #endif
-  #endif
-
-  #if __has_include(<FirebaseInstanceID/FirebaseInstanceID.h>)
-    #import <FirebaseInstanceID/FirebaseInstanceID.h>
-  #endif
-
-  #if __has_include(<FirebaseMessaging/FirebaseMessaging.h>)
-    #import <FirebaseMessaging/FirebaseMessaging.h>
-      #if !__has_include(<FirebaseAnalytics/FirebaseAnalytics.h>)
-      #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING
-        #warning "FirebaseAnalytics.framework is not included in your target. Please add \
-`Firebase/Analytics` to your Podfile or add FirebaseAnalytics.framework to your project to ensure \
-Firebase Messaging works as intended."
-      #endif // #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING
-    #endif
-#endif
-
-  #if __has_include(<FirebaseMLCommon/FirebaseMLCommon.h>)
-    #import <FirebaseMLCommon/FirebaseMLCommon.h>
-  #endif
-
-  #if __has_include(<FirebaseMLModelInterpreter/FirebaseMLModelInterpreter.h>)
-    #import <FirebaseMLModelInterpreter/FirebaseMLModelInterpreter.h>
-  #endif
-
-  #if __has_include(<FirebaseMLNLLanguageID/FirebaseMLNLLanguageID.h>)
-    #import <FirebaseMLNLLanguageID/FirebaseMLNLLanguageID.h>
-  #endif
-
-  #if __has_include(<FirebaseMLNLSmartReply/FirebaseMLNLSmartReply.h>)
-    #import <FirebaseMLNLSmartReply/FirebaseMLNLSmartReply.h>
-  #endif
-
-  #if __has_include(<FirebaseMLNLTranslate/FirebaseMLNLTranslate.h>)
-    #import <FirebaseMLNLTranslate/FirebaseMLNLTranslate.h>
-  #endif
-
-  #if __has_include(<FirebaseMLNaturalLanguage/FirebaseMLNaturalLanguage.h>)
-    #import <FirebaseMLNaturalLanguage/FirebaseMLNaturalLanguage.h>
-  #endif
-
-  #if __has_include(<FirebaseMLVision/FirebaseMLVision.h>)
-    #import <FirebaseMLVision/FirebaseMLVision.h>
-  #endif
-
-  #if __has_include(<FirebaseMLVisionAutoML/FirebaseMLVisionAutoML.h>)
-    #import <FirebaseMLVisionAutoML/FirebaseMLVisionAutoML.h>
-  #endif
-
-  #if __has_include(<FirebaseMLVisionBarcodeModel/FirebaseMLVisionBarcodeModel.h>)
-    #import <FirebaseMLVisionBarcodeModel/FirebaseMLVisionBarcodeModel.h>
-  #endif
-
-  #if __has_include(<FirebaseMLVisionFaceModel/FirebaseMLVisionFaceModel.h>)
-    #import <FirebaseMLVisionFaceModel/FirebaseMLVisionFaceModel.h>
-  #endif
-
-  #if __has_include(<FirebaseMLVisionLabelModel/FirebaseMLVisionLabelModel.h>)
-    #import <FirebaseMLVisionLabelModel/FirebaseMLVisionLabelModel.h>
-  #endif
-
-  #if __has_include(<FirebaseMLVisionObjectDetection/FirebaseMLVisionObjectDetection.h>)
-    #import <FirebaseMLVisionObjectDetection/FirebaseMLVisionObjectDetection.h>
-  #endif
-
-  #if __has_include(<FirebaseMLVisionTextModel/FirebaseMLVisionTextModel.h>)
-    #import <FirebaseMLVisionTextModel/FirebaseMLVisionTextModel.h>
-  #endif
-
-  #if __has_include(<FirebasePerformance/FirebasePerformance.h>)
-    #import <FirebasePerformance/FirebasePerformance.h>
-    #if !__has_include(<FirebaseAnalytics/FirebaseAnalytics.h>)
-      #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING
-        #warning "FirebaseAnalytics.framework is not included in your target. Please add \
-`Firebase/Analytics` to your Podfile or add FirebaseAnalytics.framework to your project to ensure \
-Firebase Performance works as intended."
-      #endif // #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING
-    #endif
-  #endif
-
-  #if __has_include(<FirebaseRemoteConfig/FirebaseRemoteConfig.h>)
-    #import <FirebaseRemoteConfig/FirebaseRemoteConfig.h>
-    #if !__has_include(<FirebaseAnalytics/FirebaseAnalytics.h>)
-      #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING
-        #warning "FirebaseAnalytics.framework is not included in your target. Please add \
-`Firebase/Analytics` to your Podfile or add FirebaseAnalytics.framework to your project to ensure \
-Firebase Remote Config works as intended."
-      #endif // #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING
-    #endif
-  #endif
-
-  #if __has_include(<FirebaseStorage/FirebaseStorage.h>)
-    #import <FirebaseStorage/FirebaseStorage.h>
-  #endif
-
-  #if __has_include(<GoogleMobileAds/GoogleMobileAds.h>)
-    #import <GoogleMobileAds/GoogleMobileAds.h>
-  #endif
-
-  #if __has_include(<Fabric/Fabric.h>)
-    #import <Fabric/Fabric.h>
-  #endif
-
-  #if __has_include(<Crashlytics/Crashlytics.h>)
-    #import <Crashlytics/Crashlytics.h>
-  #endif
-
-#endif  // defined(__has_include)
diff --git a/assign5/openTok/Pods/Headers/Public/FirebaseAuthInterop/FIRAuthInterop.h b/assign5/openTok/Pods/Headers/Public/FirebaseAuthInterop/FIRAuthInterop.h
deleted file mode 100644
index a33da7c..0000000
--- a/assign5/openTok/Pods/Headers/Public/FirebaseAuthInterop/FIRAuthInterop.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2018 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef FIRAuthInterop_h
-#define FIRAuthInterop_h
-
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-/** @typedef FIRTokenCallback
- @brief The type of block which gets called when a token is ready.
- */
-typedef void (^FIRTokenCallback)(NSString *_Nullable token, NSError *_Nullable error)
-    NS_SWIFT_NAME(TokenCallback);
-
-/// Common methods for Auth interoperability.
-NS_SWIFT_NAME(AuthInterop)
-@protocol FIRAuthInterop
-
-/// Retrieves the Firebase authentication token, possibly refreshing it if it has expired.
-- (void)getTokenForcingRefresh:(BOOL)forceRefresh withCallback:(FIRTokenCallback)callback;
-
-/// Get the current Auth user's UID. Returns nil if there is no user signed in.
-- (nullable NSString *)getUserID;
-
-@end
-
-NS_ASSUME_NONNULL_END
-
-#endif /* FIRAuthInterop_h */
diff --git a/assign5/openTok/Pods/Headers/Public/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsData.h b/assign5/openTok/Pods/Headers/Public/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsData.h
deleted file mode 100644
index 69c4072..0000000
--- a/assign5/openTok/Pods/Headers/Public/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsData.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-/** If present, is a BOOL wrapped in an NSNumber. */
-#define kFIRCDIsDataCollectionDefaultEnabledKey @"FIRCDIsDataCollectionDefaultEnabledKey"
-
-/** If present, is an int32_t wrapped in an NSNumber. */
-#define kFIRCDConfigurationTypeKey @"FIRCDConfigurationTypeKey"
-
-/** If present, is an NSString. */
-#define kFIRCDSdkNameKey @"FIRCDSdkNameKey"
-
-/** If present, is an NSString. */
-#define kFIRCDSdkVersionKey @"FIRCDSdkVersionKey"
-
-/** If present, is an int32_t wrapped in an NSNumber. */
-#define kFIRCDllAppsCountKey @"FIRCDllAppsCountKey"
-
-/** If present, is an NSString. */
-#define kFIRCDGoogleAppIDKey @"FIRCDGoogleAppIDKey"
-
-/** If present, is an NSString. */
-#define kFIRCDBundleIDKey @"FIRCDBundleID"
-
-/** If present, is a BOOL wrapped in an NSNumber. */
-#define kFIRCDUsingOptionsFromDefaultPlistKey @"FIRCDUsingOptionsFromDefaultPlistKey"
-
-/** If present, is an NSString. */
-#define kFIRCDLibraryVersionIDKey @"FIRCDLibraryVersionIDKey"
-
-/** If present, is an NSString. */
-#define kFIRCDFirebaseUserAgentKey @"FIRCDFirebaseUserAgentKey"
-
-/** Defines the interface of a data object needed to log diagnostics data. */
-@protocol FIRCoreDiagnosticsData <NSObject>
-
-@required
-
-/** A dictionary containing data (non-exhaustive) to be logged in diagnostics. */
-@property(nonatomic) NSDictionary<NSString *, id> *diagnosticObjects;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/Headers/Public/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsInterop.h b/assign5/openTok/Pods/Headers/Public/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsInterop.h
deleted file mode 100644
index 2b0eb71..0000000
--- a/assign5/openTok/Pods/Headers/Public/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsInterop.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#import "FIRCoreDiagnosticsData.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-/** Allows the interoperation of FirebaseCore and FirebaseCoreDiagnostics. */
-@protocol FIRCoreDiagnosticsInterop <NSObject>
-
-/** Sends the given diagnostics data.
- *
- * @param diagnosticsData The diagnostics data object to send.
- */
-+ (void)sendDiagnosticsData:(id<FIRCoreDiagnosticsData>)diagnosticsData;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/Manifest.lock b/assign5/openTok/Pods/Manifest.lock
deleted file mode 100644
index 0fa5d3c..0000000
--- a/assign5/openTok/Pods/Manifest.lock
+++ /dev/null
@@ -1,74 +0,0 @@
-PODS:
-  - Firebase/CoreOnly (6.23.0):
-    - FirebaseCore (= 6.6.7)
-  - Firebase/Database (6.23.0):
-    - Firebase/CoreOnly
-    - FirebaseDatabase (~> 6.2.0)
-  - FirebaseAuthInterop (1.1.0)
-  - FirebaseCore (6.6.7):
-    - FirebaseCoreDiagnostics (~> 1.2)
-    - FirebaseCoreDiagnosticsInterop (~> 1.2)
-    - GoogleUtilities/Environment (~> 6.5)
-    - GoogleUtilities/Logger (~> 6.5)
-  - FirebaseCoreDiagnostics (1.2.4):
-    - FirebaseCoreDiagnosticsInterop (~> 1.2)
-    - GoogleDataTransportCCTSupport (~> 3.0)
-    - GoogleUtilities/Environment (~> 6.5)
-    - GoogleUtilities/Logger (~> 6.5)
-    - nanopb (~> 0.3.901)
-  - FirebaseCoreDiagnosticsInterop (1.2.0)
-  - FirebaseDatabase (6.2.0):
-    - FirebaseAuthInterop (~> 1.0)
-    - FirebaseCore (~> 6.0)
-    - leveldb-library (~> 1.22)
-  - GoogleDataTransport (6.0.0)
-  - GoogleDataTransportCCTSupport (3.0.0):
-    - GoogleDataTransport (~> 6.0)
-    - nanopb (~> 0.3.901)
-  - GoogleUtilities/Environment (6.6.0):
-    - PromisesObjC (~> 1.2)
-  - GoogleUtilities/Logger (6.6.0):
-    - GoogleUtilities/Environment
-  - leveldb-library (1.22)
-  - nanopb (0.3.9011):
-    - nanopb/decode (= 0.3.9011)
-    - nanopb/encode (= 0.3.9011)
-  - nanopb/decode (0.3.9011)
-  - nanopb/encode (0.3.9011)
-  - PromisesObjC (1.2.8)
-
-DEPENDENCIES:
-  - Firebase/Database
-
-SPEC REPOS:
-  trunk:
-    - Firebase
-    - FirebaseAuthInterop
-    - FirebaseCore
-    - FirebaseCoreDiagnostics
-    - FirebaseCoreDiagnosticsInterop
-    - FirebaseDatabase
-    - GoogleDataTransport
-    - GoogleDataTransportCCTSupport
-    - GoogleUtilities
-    - leveldb-library
-    - nanopb
-    - PromisesObjC
-
-SPEC CHECKSUMS:
-  Firebase: 585ae467b3edda6a5444e788fda6888f024d8d6f
-  FirebaseAuthInterop: a0f37ae05833af156e72028f648d313f7e7592e9
-  FirebaseCore: a2788a0d5f6c1dff17b8f79b4a73654a8d4bfdbd
-  FirebaseCoreDiagnostics: b59c024493a409f8aecba02c99928d0d8431d159
-  FirebaseCoreDiagnosticsInterop: 296e2c5f5314500a850ad0b83e9e7c10b011a850
-  FirebaseDatabase: cbf2b9efe39b3f113616a2f1f140839f49d797e0
-  GoogleDataTransport: 061fe7d9b476710e3cd8ea51e8e07d8b67c2b420
-  GoogleDataTransportCCTSupport: 0f39025e8cf51f168711bd3fb773938d7e62ddb5
-  GoogleUtilities: 39530bc0ad980530298e9c4af8549e991fd033b1
-  leveldb-library: 55d93ee664b4007aac644a782d11da33fba316f7
-  nanopb: 18003b5e52dab79db540fe93fe9579f399bd1ccd
-  PromisesObjC: c119f3cd559f50b7ae681fa59dc1acd19173b7e6
-
-PODFILE CHECKSUM: 3bedbb01a41b9d1114e64e9f002246e83fffeb84
-
-COCOAPODS: 1.9.1
diff --git a/assign5/openTok/Pods/Pods.xcodeproj/project.pbxproj b/assign5/openTok/Pods/Pods.xcodeproj/project.pbxproj
deleted file mode 100644
index a1e044e..0000000
--- a/assign5/openTok/Pods/Pods.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,4612 +0,0 @@
-// !$*UTF8*$!
-{
-	archiveVersion = 1;
-	classes = {
-	};
-	objectVersion = 50;
-	objects = {
-
-/* Begin PBXAggregateTarget section */
-		072CEA044D2EF26F03496D5996BBF59F /* Firebase */ = {
-			isa = PBXAggregateTarget;
-			buildConfigurationList = 7D9B6248E3966009CBADAFB74A1F2C6A /* Build configuration list for PBXAggregateTarget "Firebase" */;
-			buildPhases = (
-			);
-			dependencies = (
-				3EFC9F7575385B0BF97D99224E8F70F4 /* PBXTargetDependency */,
-				80F51486E503FFA572D586D4646EBD73 /* PBXTargetDependency */,
-			);
-			name = Firebase;
-		};
-		5EB4B0B6DA6D5C0C3365733BEAA1C485 /* FirebaseCoreDiagnosticsInterop */ = {
-			isa = PBXAggregateTarget;
-			buildConfigurationList = 53DAF387F36CBF8A88540E369A919B2A /* Build configuration list for PBXAggregateTarget "FirebaseCoreDiagnosticsInterop" */;
-			buildPhases = (
-			);
-			dependencies = (
-			);
-			name = FirebaseCoreDiagnosticsInterop;
-		};
-		8EC0F2618965C875A96BFDBEE5D9734C /* FirebaseAuthInterop */ = {
-			isa = PBXAggregateTarget;
-			buildConfigurationList = 99106C33EE595D192242F546552E9F40 /* Build configuration list for PBXAggregateTarget "FirebaseAuthInterop" */;
-			buildPhases = (
-			);
-			dependencies = (
-			);
-			name = FirebaseAuthInterop;
-		};
-/* End PBXAggregateTarget section */
-
-/* Begin PBXBuildFile section */
-		008002B25F0D710359ADB0C08A334A18 /* FIRHeartbeatInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 77B8D860A5693BAB27B03B2D8262FBBB /* FIRHeartbeatInfo.m */; };
-		009E1F59EB2DBBF4377431DDB9CD83A7 /* FIRConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 8734EC42113C4820AC918A2ECB6EE41C /* FIRConfiguration.m */; };
-		00DC3A5E3088F6BC409056FF2759504C /* status.h in Headers */ = {isa = PBXBuildFile; fileRef = 27B04C54C4F176938DD4A50E3DAD384D /* status.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		0168BD7A9B87A22117AA12A50030EB3D /* FViewProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = 6836B2C094BEE9CCC043393E936B87BE /* FViewProcessor.m */; };
-		01C52B14BE2E2A76B771F7D7D79A26E0 /* FSparseSnapshotTree.m in Sources */ = {isa = PBXBuildFile; fileRef = EEFA0E6408C1EE9694F24C8CDD87CC8E /* FSparseSnapshotTree.m */; };
-		01F14311F4F4FC48397BE16D21E33530 /* FTreeNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AEA59B436FE7C179D1AA762546E52F0 /* FTreeNode.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		02D10C14DA679930370B85710695DC08 /* GoogleDataTransport.h in Headers */ = {isa = PBXBuildFile; fileRef = 70515A5CBED5171BEE1A7FD8B06C8338 /* GoogleDataTransport.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		032657E3A1E35E842C7BF1668C6505DF /* GDTCORRegistrar.h in Headers */ = {isa = PBXBuildFile; fileRef = A908DAA989BEA273B10D102D558F47FD /* GDTCORRegistrar.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		032EDAAF8A82DD3C3052D4AC1FF89F4F /* c.cc in Sources */ = {isa = PBXBuildFile; fileRef = 5D7BD1D203706AD133B003DE154D40AC /* c.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
-		04DBB989E22ABC0651DD0179BE01D09E /* FIRDiagnosticsData.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F51C701E1D20698B669E1172FD5E4CB /* FIRDiagnosticsData.m */; };
-		051C58E6804A52F6CF7B07F80DE42636 /* FMaxNode.h in Headers */ = {isa = PBXBuildFile; fileRef = C295B47E516F633178D34FA8303E944A /* FMaxNode.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		06FADEA97461819677F4A1759A451B54 /* FRepoInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = F9B57561D347F59214C52B97CB5421A8 /* FRepoInfo.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		075DFD222C5E387A9669D58843D4DD45 /* dumpfile.cc in Sources */ = {isa = PBXBuildFile; fileRef = 87AE9B4D3596ECB04407EB93492E47BD /* dumpfile.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
-		07DA3F6F36D2000762876319982A08D8 /* FTupleObjectNode.h in Headers */ = {isa = PBXBuildFile; fileRef = CEDB10734368755E95741BEF1CF380C3 /* FTupleObjectNode.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		07EB38B563731DDFAC0446DDDB806AA3 /* FLLRBValueNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 70E9D5DB507166468AF0FA89B51E2176 /* FLLRBValueNode.m */; };
-		0886A6110663ED25DDF1B88272082117 /* mutexlock.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BC4618A1AB60D74C5C3EE23BEC70362 /* mutexlock.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		090678D7034ECF4A517F028B5AC595E2 /* table_builder.cc in Sources */ = {isa = PBXBuildFile; fileRef = 34621C372310B419B41B61763C42149F /* table_builder.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
-		097040CACC3CDACE82F943EFFB956500 /* FParsedUrl.h in Headers */ = {isa = PBXBuildFile; fileRef = F0534E9B7F9A2AC947BBFFCC17B73753 /* FParsedUrl.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		09E37749C750B91B3E3FD67D80984B3C /* FCachePolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CB725B760590589CCA74355CA795432 /* FCachePolicy.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		09F5D7B633DBB6888DBAFD7BF2156441 /* FBLPromise+Delay.h in Headers */ = {isa = PBXBuildFile; fileRef = F28A8199104EC2C984FA676FED6D9FBF /* FBLPromise+Delay.h */; };
-		0A33307F590A537399B19787B87690CC /* FBLPromises.h in Headers */ = {isa = PBXBuildFile; fileRef = 60129F2C1744E4C6A0B45D363AEEF0FD /* FBLPromises.h */; };
-		0AA93414C026466DC54C9F92AE2330CF /* no_destructor.h in Headers */ = {isa = PBXBuildFile; fileRef = BB2662A73E4AB039897681B4F9987F6A /* no_destructor.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		0C3CD46BCBCCF60B4D053E598FEFF3CC /* FTupleSetIdPath.h in Headers */ = {isa = PBXBuildFile; fileRef = FB1BD93373D49F12576A33ADBC3BB1E8 /* FTupleSetIdPath.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		0E853ECD571210CCA0AE8D49E8AB16B3 /* FNamedNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A2422E97EFCFEA1741CB84A57211468 /* FNamedNode.m */; };
-		0F3F72C16878451737D593D75A14210C /* FStringUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 56E0BD3190452F623D2588E2959B1C38 /* FStringUtilities.m */; };
-		0F55FA658A750DC4B6F3D1E97E13C6DF /* FParsedUrl.m in Sources */ = {isa = PBXBuildFile; fileRef = 838FEFECD8DD58DE24E9A5A672A11E81 /* FParsedUrl.m */; };
-		0FD5E4E620E147108F75B3F2B08A84E8 /* FChildEventRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = BE2B0C81910979BDBCB280D64692E5BF /* FChildEventRegistration.m */; };
-		1182CF33679A44B433D77AACE124DEA6 /* GDTCORTargets.h in Headers */ = {isa = PBXBuildFile; fileRef = 1313113294676D69BB1A6FB6FC2AC8D9 /* GDTCORTargets.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		11909EA60514E6096BA099AFCCA379C5 /* FLevelDBStorageEngine.h in Headers */ = {isa = PBXBuildFile; fileRef = 61CCE79B8780E931635E80307FA09EE6 /* FLevelDBStorageEngine.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		11D1D0D58F6BDEB12789B7A1CE45DE29 /* log_reader.cc in Sources */ = {isa = PBXBuildFile; fileRef = 96B97BCFDFB29A395ECEFEEE53D89889 /* log_reader.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
-		13BF445F2F36873CF3CA07CB28111B6A /* options.h in Headers */ = {isa = PBXBuildFile; fileRef = F8A34FFCCCD318ED0E09E4B62FAF6EA8 /* options.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		140985971178C5D41E3754E4D0E24CE5 /* env_posix_test_helper.h in Headers */ = {isa = PBXBuildFile; fileRef = B62F2EFD836B0B4D141B7D3B7A76D1C8 /* env_posix_test_helper.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		157A2B351086764FFD54E97345BD365A /* FIRVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = 97BCB79C675A3B16DD7740908974E9B3 /* FIRVersion.m */; };
-		158B87CF98F428E31623B0E931A78408 /* FBLPromise+Do.h in Headers */ = {isa = PBXBuildFile; fileRef = B299C026C8827C5F992F488CCBA2D192 /* FBLPromise+Do.h */; };
-		16E45CDE3F7FD18E427FB09401303BD6 /* FTupleTransaction.h in Headers */ = {isa = PBXBuildFile; fileRef = 37E34EE4B371BB8626B0ECA106A5B8E0 /* FTupleTransaction.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		16EA928A38BEB76C4360E0EE35EFBD54 /* dumpfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 6581D2C778C2FD723629A78872C61FDC /* dumpfile.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		16EE0BBA1E994DCB35C6112274E78E49 /* FTupleFirebase.h in Headers */ = {isa = PBXBuildFile; fileRef = 11BE64F7B2DF4B6B01EDEE2BB90359CE /* FTupleFirebase.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		176B79C5A31B153FF3A4F9A352AB511E /* FirebaseCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A4F5BC1A826B07C0F4C1030B7CBA8CD /* FirebaseCore-dummy.m */; };
-		1794DED80261D1DA5F4EBFEC563D9A34 /* FKeepSyncedEventRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = EBAA464D5B2F65ED6BE6FB25E8A135C5 /* FKeepSyncedEventRegistration.m */; };
-		1879D3460407979438FAB2CA5DCAF2EB /* FTupleStringNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 357108ED8E1BE0FAC53EFE9A522C6D0C /* FTupleStringNode.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		18B203D4F60DA2A5FA9E3974EB4D187A /* FQuerySpec.h in Headers */ = {isa = PBXBuildFile; fileRef = 25DCDEF8A7F32E0E3701AD90BC946FDD /* FQuerySpec.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		1965EAB9CD8AE482223EB5F0E31D7D68 /* FPruneForest.h in Headers */ = {isa = PBXBuildFile; fileRef = 45586F5816585DB8B45FE1C976525A1C /* FPruneForest.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		19C8A556EB39CA08B9EBCBFA9A862B01 /* db_iter.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2601511FCCD0B4CE7A74652349B3779A /* db_iter.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
-		19DE00627C79A1AFBD25247C04241C20 /* FChildrenNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C86C564F525877739284E8120ACBE75 /* FChildrenNode.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		19E64928C0FC267F6E776C53E24209C6 /* FLLRBValueNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F623F7FBC6EF232A1F47AACADC4C561 /* FLLRBValueNode.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		1BD91D20F81071C7A1510A50F4497F88 /* FView.h in Headers */ = {isa = PBXBuildFile; fileRef = 14B5225C335FF4E58484DB38F7D71113 /* FView.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		1C0C2E325B5B0967FD788E20393E1651 /* FBLPromise+Timeout.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = F8B8FAE3380266FF581E5704B032BC1D /* FBLPromise+Timeout.h */; };
-		1CB9A10DD61563EC43A64ADA9ADAD2F9 /* FChildChangeAccumulator.h in Headers */ = {isa = PBXBuildFile; fileRef = DBB2A2E28ED4F674F6370BD3D6B4AB5A /* FChildChangeAccumulator.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		1CD40EF7C7409AAF764EB1A036E88F58 /* APLevelDB.h in Headers */ = {isa = PBXBuildFile; fileRef = 90316C54AEDD432C7EDDA954D02A16E0 /* APLevelDB.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		1D453D2D6F52C91B3C0F41216EAB2474 /* FIROptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F12FA3516B540F46C4E817F486AD87A /* FIROptions.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		1D83E631A206C9DD34CF8676CC11014D /* version_edit.h in Headers */ = {isa = PBXBuildFile; fileRef = C24A10EC10F9B315031342CB463C1F89 /* version_edit.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		1DBA3AEF493427D6625C09548CD0BA84 /* FBLPromise+Await.m in Sources */ = {isa = PBXBuildFile; fileRef = 1891D121FC2FBC6537BC90D17D133401 /* FBLPromise+Await.m */; };
-		1F16F7F044524F9AC7E1F047728FF56C /* table_builder.h in Headers */ = {isa = PBXBuildFile; fileRef = B93B0CDE62D8C9C5FE9C7139B4C0867E /* table_builder.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		1F32BFF2BC7FAF7A084CD1BB15AF91E7 /* c.h in Headers */ = {isa = PBXBuildFile; fileRef = ED2B093C80BA032660F888C7F81B1D9D /* c.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		20200F69376A4F5F3386FE54FE59981E /* FIRErrors.m in Sources */ = {isa = PBXBuildFile; fileRef = 825631D04FA349AC9CAE016BE347234D /* FIRErrors.m */; };
-		202B598D9F522FC624E1A5CA144FBF88 /* FIRDatabaseConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 151EDA5ED0508649DD81C32BBAB5B133 /* FIRDatabaseConfig.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		206954412978B5B20D9BDD19FA7D005A /* FBLPromise+Then.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 272A06E4DFA111E0A5504FF347BBF984 /* FBLPromise+Then.h */; };
-		208C26E4F7F9544E46DE7DCCF56DCEDC /* FConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 1648A0F596A5947A31091A8D2A3F2DD5 /* FConstants.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		20F0342925167698872DC671F62230A1 /* FIRDatabaseQuery_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CC2D13BD17F41391BB88C73E58BDA77 /* FIRDatabaseQuery_Private.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		213AE7061F97042A1277F1B4C4F13AFE /* write_batch.cc in Sources */ = {isa = PBXBuildFile; fileRef = 31965476AB0C9A0CA09E0AC2D405690B /* write_batch.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
-		221B165A4CB43C6F0214B528EB09269F /* FOverwrite.h in Headers */ = {isa = PBXBuildFile; fileRef = 68949119150AE37E2185C8D318D06060 /* FOverwrite.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		228929A7082BBB9704D2E27875BBBC3C /* FIndexedNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 18E5CB0D0571E1527E8DCD0C6A5690A7 /* FIndexedNode.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		22906D1F2EBDB2DB72C53F96C55CE359 /* FIRAppAssociationRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = 371751A703B71351DE13FF939FF962D6 /* FIRAppAssociationRegistration.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		22A247A90EF8093E9BA1B0D58AD11D6D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C3C1EB539A57B6F7CBF5F5F61AEC46A /* Foundation.framework */; };
-		2308A882AC63D9EDA7BF9A30CE71A15B /* FClock.m in Sources */ = {isa = PBXBuildFile; fileRef = E37B33D6D220B28F622B08C2BA4A4DC6 /* FClock.m */; };
-		23D304F5D4898524973C90F483721F94 /* FPriorityIndex.h in Headers */ = {isa = PBXBuildFile; fileRef = 25581B666C44E4E2526DFBDCAF320168 /* FPriorityIndex.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		2451451CBD8C77F590EF31AB7EE78677 /* FListenProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = F34FEBEB586D8DDC4CE36905BFC79C9B /* FListenProvider.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		245737FEABCF3FAD360B55F2DAD9337E /* GDTCORLifecycle.m in Sources */ = {isa = PBXBuildFile; fileRef = 0EF03490A41396D7B4FB796D16239538 /* GDTCORLifecycle.m */; };
-		255771799C536116D352662DBD37219D /* FWriteTreeRef.m in Sources */ = {isa = PBXBuildFile; fileRef = 2085AB8AA9E4822704336873BF314E65 /* FWriteTreeRef.m */; };
-		259224D7B367FA639FD4BBFA1013468E /* FRepo.h in Headers */ = {isa = PBXBuildFile; fileRef = D595AE273F09F91E6ECCB09DDE4BE1CA /* FRepo.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		26211344E4366BFE48BA6B1145DB814C /* FTupleRemovedQueriesEvents.h in Headers */ = {isa = PBXBuildFile; fileRef = 08B4449BD6E520A4C1E8BE42FFE7BAA1 /* FTupleRemovedQueriesEvents.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		276285542CBD047E16A240C92D981C9F /* GULSecureCoding.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E14920ECDB2908894AFBB2FDC931F02 /* GULSecureCoding.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		2770F513094AD2122DC41DA20E6DF45B /* FEventGenerator.m in Sources */ = {isa = PBXBuildFile; fileRef = F26C357D95872C344F908100D46E5153 /* FEventGenerator.m */; };
-		2791FE6C4F39B16C3799C83AA518523B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C3C1EB539A57B6F7CBF5F5F61AEC46A /* Foundation.framework */; };
-		279EEB1AA09C07042ADB5B7E99F04874 /* FValueIndex.h in Headers */ = {isa = PBXBuildFile; fileRef = EB6A33237EFBF55F3A9EBC83F548B03D /* FValueIndex.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		28A75C5EBFF04D453E76388DB74D8FFE /* FSnapshotHolder.h in Headers */ = {isa = PBXBuildFile; fileRef = 0180C3C1B654EF6C601C67697BC4EC62 /* FSnapshotHolder.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		2A5280DC4E951A91563235956880C2C9 /* FBLPromisePrivate.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 83AD72E6FF9339276439BA4350ABDA13 /* FBLPromisePrivate.h */; };
-		2A6B53071B8F2316ACF6F7959F410736 /* FBLPromise+Race.m in Sources */ = {isa = PBXBuildFile; fileRef = 4421DDED849BD83DC71031CD3143C0DD /* FBLPromise+Race.m */; };
-		2A7FC6706A43FA0DD2717B58AF346AF4 /* FConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = 39A3D499C991661974D88771D65ED755 /* FConnection.m */; };
-		2A8B94488C854FA57EA18F6EDD2C8065 /* FPersistenceManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E7D6789B496C8DAF72B8FF1F569778 /* FPersistenceManager.m */; };
-		2AE327A1A87D191D0BE3EE72F7417E41 /* GoogleDataTransportCCTSupport-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A10A4C81C220281B540EA7061D36321 /* GoogleDataTransportCCTSupport-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		2B1703370EEE9C47ED0EF8BE139FB77B /* FAtomicNumber.m in Sources */ = {isa = PBXBuildFile; fileRef = 1135C43506403E886D86BDFF9D1CC4A5 /* FAtomicNumber.m */; };
-		2B8ED470C6276CFE176CAEE26C780E27 /* options.cc in Sources */ = {isa = PBXBuildFile; fileRef = 1248B00EF3BE8EB5FDF7E92EE8995ABF /* options.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
-		2B9F0CD1745FD1F0EDC3E1B3AC4195C9 /* FBLPromise+Delay.m in Sources */ = {isa = PBXBuildFile; fileRef = CE06D2F80F632B8CC85AEB98C01748F7 /* FBLPromise+Delay.m */; };
-		2BEABA1DB7F161D3909C14E7D3B744A2 /* FTreeSortedDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = 7114FD0EFDDFA8EFD0B729F54CA0E299 /* FTreeSortedDictionary.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		2C0F8BFC1A40062BCBF52D763A89235F /* FTupleNodePath.m in Sources */ = {isa = PBXBuildFile; fileRef = ABC4D7550679CE90B7A7D2AC9658CD2B /* FTupleNodePath.m */; };
-		2C14CAD723AA204EF0CDA409CE396B2F /* FPersistenceManager.h in Headers */ = {isa = PBXBuildFile; fileRef = DF67693BB6E8BFC4254953D2178F5408 /* FPersistenceManager.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		2C463D6B7A5EC5291926FCC7D01F2C47 /* FEventRaiser.h in Headers */ = {isa = PBXBuildFile; fileRef = 39587D5ABC154C593C4C834BD6058580 /* FEventRaiser.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		2CA687E15AC9FA358EBC36A0F852F969 /* FIRDataSnapshot_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C1138211F92A15BC81CD2389748F9E8B /* FIRDataSnapshot_Private.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		2CBF94020885D3E5D21547C8957B4727 /* FIRDataEventType.h in Headers */ = {isa = PBXBuildFile; fileRef = D6870577D6F4991A666E6914A2F487A4 /* FIRDataEventType.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		2CCBC93C06F5DC0F576D2942A1ADDF23 /* snapshot.h in Headers */ = {isa = PBXBuildFile; fileRef = D25C535A0ED2942C4E794B83583D12CD /* snapshot.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		2CE28A088EBEA9D0D1F0F97DF716A275 /* FBLPromise+Reduce.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = ED14BCF081A83EBB8A978CDDD5E13ADD /* FBLPromise+Reduce.h */; };
-		2CFE1B703A0C9BE2E09D32BE5CD79D90 /* FOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 52183C4DFF461846157BB45716C61701 /* FOperation.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		2D05BEC3A17777F63E42844B3E6DB177 /* FWriteTree.m in Sources */ = {isa = PBXBuildFile; fileRef = 632A2A314E4EBB58C7333F3B1B5FA731 /* FWriteTree.m */; };
-		2D0764461AAE28446CF1FB7F4B24B200 /* two_level_iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F3A37BF930274FDB2AF3C64E5BA6C63 /* two_level_iterator.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		2D135A659B0C2F30BDBFC9AA2C99E2D7 /* dbformat.h in Headers */ = {isa = PBXBuildFile; fileRef = 59E7355A640C2063FA68A1828CEF33A8 /* dbformat.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		2D2254DCD01BA887C5F4646CE07AC06B /* FListenProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 066378BC5E55BCFB87BFFC5EDAFA4B99 /* FListenProvider.m */; };
-		2D7CAF5FF42E9C0A104773BF58066D72 /* FImmutableSortedDictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = CA283EA1FDCDD01C444F2DFCB23D0B41 /* FImmutableSortedDictionary.m */; };
-		2E10DF9E19D8A04DC5A179A4C33399C0 /* memtable.h in Headers */ = {isa = PBXBuildFile; fileRef = 76A86C67D20E7FD637F775A4E9F95B51 /* memtable.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		2E34AE998F7E523869224DC2B93E7B79 /* FBLPromise+Reduce.m in Sources */ = {isa = PBXBuildFile; fileRef = A11AE0A92B88FC456F083B131B991F1A /* FBLPromise+Reduce.m */; };
-		2EF3851F1EB458DB00170E169F7094FC /* FRepoManager.m in Sources */ = {isa = PBXBuildFile; fileRef = A320AFD4407CF0B2CE66E62B45145BDB /* FRepoManager.m */; };
-		2F572EF33ED6B78210874F444B84B640 /* FSparseSnapshotTree.h in Headers */ = {isa = PBXBuildFile; fileRef = 19E2FAFAF8471A64BF957711063D1E73 /* FSparseSnapshotTree.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		30D3C8C65968B13A370B6DC8BC26175A /* FIRNoopAuthTokenProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C25234BF51BE9602848231B7842472C /* FIRNoopAuthTokenProvider.m */; };
-		3103362AF88F977054122551BCB0A19E /* FTreeSortedDictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = B835A6F7159081070635B80749DFB910 /* FTreeSortedDictionary.m */; };
-		31634FC234EA80C8EDBFB62D3A173F05 /* FOverwrite.m in Sources */ = {isa = PBXBuildFile; fileRef = BD9507903A6A4787A9BCB8293A9F3826 /* FOverwrite.m */; };
-		31E211272046EA07C2045244B153B550 /* FRangedFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = ACA4F24A74FE27CDF4351A7341029FC3 /* FRangedFilter.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		32CAA0959C1714776EBC690E5648B6DC /* FPruneForest.m in Sources */ = {isa = PBXBuildFile; fileRef = B5129F030E10972C371924DB4DCFA600 /* FPruneForest.m */; };
-		330F5B38C9B5DD6ECDA59C10D0E233F6 /* FTupleOnDisconnect.m in Sources */ = {isa = PBXBuildFile; fileRef = D60179BD88EF9A234D60E6EDB1EEA0C5 /* FTupleOnDisconnect.m */; };
-		33BF60FDF58902839A3A48154F74B0F9 /* FWebSocketConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = 30798651CA0BD508AD85DC790BB2D9B1 /* FWebSocketConnection.m */; };
-		35113767172F29D52B69763FC8288A9F /* GDTCORFlatFileStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AF9DE0337F8113B726962277B249DA5 /* GDTCORFlatFileStorage.m */; };
-		35C43AFBC7EA71125CAF4D1CFF5D9E4A /* FEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 102352296297C117CC7869815C0B18C2 /* FEvent.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		3609887638799B8EB91F6878BFC6B2AE /* GULKeychainUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B4C64BD56CF6985E80B66695B59DF88 /* GULKeychainUtils.m */; };
-		36AFEF5F38B16A22C7ACE7DD9037AD76 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C3C1EB539A57B6F7CBF5F5F61AEC46A /* Foundation.framework */; };
-		36F62A55218BAF702B2FF08559F6772A /* FAuthTokenProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 44BF5A2F11832E18FAA9160A4734E51B /* FAuthTokenProvider.m */; };
-		371FF6CFCCBDE43DD79F5F8476A478AA /* FBLPromise+Then.h in Headers */ = {isa = PBXBuildFile; fileRef = 272A06E4DFA111E0A5504FF347BBF984 /* FBLPromise+Then.h */; };
-		376006A9DEBAADE7B841299DE819CF71 /* FAckUserWrite.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B65DAC962609F2CA5CAF579C31133A7 /* FAckUserWrite.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		3855955853294797A0C2C84BE912A404 /* crc32c.h in Headers */ = {isa = PBXBuildFile; fileRef = 91811F71C2FA9265B03192507FD0715D /* crc32c.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		399D01EF9153FCFCB1B0B04EDBE568DE /* FBLPromise+Async.m in Sources */ = {isa = PBXBuildFile; fileRef = 77C1062B06298DDB3CE7B3ADE0C5DE14 /* FBLPromise+Async.m */; };
-		39CEAC444ACA263FBB71A36C598A988B /* FCancelEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 52176DC15D315EAA2CE7CAE7871EF263 /* FCancelEvent.m */; };
-		3AE38AF6BD283284EA42129711536CD5 /* crc32c.cc in Sources */ = {isa = PBXBuildFile; fileRef = BF564EDAEE1DA9A93B72737F09F33227 /* crc32c.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
-		3BF1D3EC5952C1777B11B7D357FB5AE2 /* GDTCORConsoleLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = CAD6EEF839E19AE78EB0C9FF88CBECE2 /* GDTCORConsoleLogger.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		3C314BBEE5CB4C12086B625B62473B77 /* FBLPromise+All.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 29BD25E1380AF136F830D5ADC46CB53E /* FBLPromise+All.h */; };
-		3D2636DAE91F7C2F9B77790C4531C0D1 /* FRangeMerge.h in Headers */ = {isa = PBXBuildFile; fileRef = 80AE48D6611499F9E4910CA9F46D2191 /* FRangeMerge.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		3D6B3854EA4680B3AEE04274CE3CB053 /* table.h in Headers */ = {isa = PBXBuildFile; fileRef = 35CE8D2A98B792BEEDD0D72E89B33BAD /* table.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		3D8B37C55A23D17BDD1FF9FC819D2F9C /* GDTCCTPrioritizer.m in Sources */ = {isa = PBXBuildFile; fileRef = 196DCB453BE1CEE606A4656ED3F3DCBB /* GDTCCTPrioritizer.m */; };
-		3DFB61A0B67EF7337CB48246FE5F5F53 /* FBLPromise+Reduce.h in Headers */ = {isa = PBXBuildFile; fileRef = ED14BCF081A83EBB8A978CDDD5E13ADD /* FBLPromise+Reduce.h */; };
-		3E3B68C439E38A6A6F13BC73827BD7E5 /* FChildEventRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = 7919424CA56B24B6F497FCB11FF6DB93 /* FChildEventRegistration.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		3E4EEE0E3EE4D0921C6E38F5B43B14ED /* FIRMutableData_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 902E6002602A44EB342BBC2142E66B0D /* FIRMutableData_Private.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		3EA71BDD8FC82E07FD501469DA03C46B /* FBLPromise+Testing.h in Headers */ = {isa = PBXBuildFile; fileRef = 98FC3E75806D347BDE1998F9D6F7924D /* FBLPromise+Testing.h */; };
-		3EE42B1C7D4A0329C4177617DE5864AA /* FConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 99E6B34EBA0A767EED9DFC5E58B87DF5 /* FConnection.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		3F46D2CCA4E26F7C3196F3EE84D2AD1F /* FRangeMerge.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E711BF9F9249CDACE333119FED50E76 /* FRangeMerge.m */; };
-		3FAB976E8FED078E86BE0BC439996714 /* pb_decode.h in Headers */ = {isa = PBXBuildFile; fileRef = 941ACF372F977D2EFD95A9310219B60A /* pb_decode.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		401F125256DE8121A6B94E169FFBF98B /* FBLPromise+Always.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = F8FDB31CF6B1C1358EE35ADE19844DC7 /* FBLPromise+Always.h */; };
-		4118726C30DDD8B59270D8C0522FCAD4 /* FChange.h in Headers */ = {isa = PBXBuildFile; fileRef = 68B02E7BEB2979723066B27907E0A636 /* FChange.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		4354AFBA3C791268B39195AC0B0D94D2 /* dbformat.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8B05621A5EF759E47A44989B0245FC6A /* dbformat.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
-		435BC857BBAAEA6B30965087002B6745 /* FViewCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 7EDEB0636E82100515CA48503A4D022C /* FViewCache.m */; };
-		43A804271733F4A147E063DC379C6060 /* FBLPromises.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 62020A4F2BCB9E86DA99881A00474E3F /* FBLPromises.framework */; };
-		44C4FF48A0CA1153ADC2F11A7E7D9853 /* thread_annotations.h in Headers */ = {isa = PBXBuildFile; fileRef = BAE3B72678AB5BFDAF8CA9B8BB4477B6 /* thread_annotations.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		453177599B69C3035FB65976DB71A88A /* fbase64.c in Sources */ = {isa = PBXBuildFile; fileRef = C83F672C79ADC28FEFB9E4671207B48F /* fbase64.c */; };
-		45F553F660EF71AFC23BF7C212AB43D6 /* FIRComponentType.h in Headers */ = {isa = PBXBuildFile; fileRef = F4D50B06AA311127F439590F709F5807 /* FIRComponentType.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		46C616765663C3ACB4778DE8108575CE /* write_batch.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C101CA28A87922BFF183FCB605139A6 /* write_batch.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		470FDDE3E540331E5BE054C0503565F0 /* FIRMutableData.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A2A620A27AF95651BEB93E9CE562A04 /* FIRMutableData.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		4726CCB900BC87AC820DB76627C38EFA /* FBLPromise+Any.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E8161CED1C17230153CB59CBAA2ABA9 /* FBLPromise+Any.h */; };
-		47738E305055A2711E3FF8FFA7CDBCF2 /* FTupleTSN.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CC76FAD8FA0F6D23526A68F7A0EDE8E /* FTupleTSN.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		47B7043414C74508AF47375D56971161 /* FIndex.h in Headers */ = {isa = PBXBuildFile; fileRef = A0C2CA4BE08826E478724D7FBB8A6D94 /* FIndex.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		4804CD4E94A28FF0B14D20E80F800441 /* FListenComplete.h in Headers */ = {isa = PBXBuildFile; fileRef = DD34FF93A6587C0B4E47FFD49CA5445E /* FListenComplete.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		48A23BA03EC46B17EB084D5A92FB3FFC /* cache.cc in Sources */ = {isa = PBXBuildFile; fileRef = 81F3FD7983F8C4391CC30B4E7370767E /* cache.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
-		48AD74D2B771B41A9F2C75397D04A890 /* FIRConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 25EBF5F50A964142282100BB3127D79D /* FIRConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		48ED6CD7CE693EB34FE9C061FDFF5BAC /* FLimitedFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 301EA1964717D61EA78FF69CC56657C3 /* FLimitedFilter.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		49D2B6171D735598F776C41BA90697E0 /* firebasecore.nanopb.h in Headers */ = {isa = PBXBuildFile; fileRef = 7193CDB6EF41B0AEB292E144AC86B962 /* firebasecore.nanopb.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		4A89D83C5CC15E68857BC96F14C6650A /* FIRDatabase_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 39B71F3A4C20F71B0FA8620190D0629E /* FIRDatabase_Private.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		4AAAD244C67F4C94FE3AE95DA3465C79 /* FUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = B1A323E1E6BBE609DB73C75EE7791C2C /* FUtilities.m */; };
-		4AB9971E89197C7C9F49C300467656AA /* FNodeFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = DFDD92BA3AA85D306208B74066AA26E9 /* FNodeFilter.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		4B397BF3049EE16BB28615BA0363A45A /* port_stdcxx.h in Headers */ = {isa = PBXBuildFile; fileRef = 2902A4C38873FCFF5786F23795F66406 /* port_stdcxx.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		4B5F583964C44A1604D92DD71FB7EAAE /* leveldb-library-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0A186237A208BD1CF32D3CDD83B8CAF2 /* leveldb-library-dummy.m */; };
-		4BC336156D55C7361145A64DE9701FD7 /* FTupleTSN.m in Sources */ = {isa = PBXBuildFile; fileRef = 6041B5E87AC260ED5B0E6C0B42DDA814 /* FTupleTSN.m */; };
-		4BE8B05147FE479302EC65DDEC54BE5D /* block.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4D75E00B047D89EA15BE5CDEE752D7A0 /* block.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
-		4C1A7F465A551AB24272477D3398AFAF /* version_set.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2FB3B6224E0EA157E5E5C71782ADA330 /* version_set.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
-		4CA6CA316B486CCED39D435DED7F5AF0 /* FCompoundWrite.h in Headers */ = {isa = PBXBuildFile; fileRef = 65A2EA4B48BA25E5F852CFA3518CEAC9 /* FCompoundWrite.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		4E40D1A913022E26EE13436779D6DAFE /* pb.h in Headers */ = {isa = PBXBuildFile; fileRef = 31E464D7B81E4278F8FB81146755F379 /* pb.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		4EF04BFB62E95B08C56E236F9C55E823 /* env.cc in Sources */ = {isa = PBXBuildFile; fileRef = A674C7C09F1C351BFF34B1C8A0910870 /* env.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
-		4F7A0971FBDC07F6B66F3F79D2DDF5BE /* FIndex.m in Sources */ = {isa = PBXBuildFile; fileRef = CBF9637B074AD29A17C37F3502AF829A /* FIndex.m */; };
-		4FCA995164B919C8FA3CD4AA7CC873E4 /* FOperationSource.m in Sources */ = {isa = PBXBuildFile; fileRef = A3DD7543FF2C526CD999ADA8530ED5EA /* FOperationSource.m */; };
-		514734A6E03887212B98136B5C2E70E4 /* FIRDependency.h in Headers */ = {isa = PBXBuildFile; fileRef = FC65A9652178080D84042446A2B9C021 /* FIRDependency.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		51D4F6526EFCD9C5AFB03818A4006E91 /* FEventRaiser.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C35F58B895845211A8017AAC391E1B7 /* FEventRaiser.m */; };
-		523E397640772F00E129DD7B4E8918AD /* arena.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3787BE6B13B4E6006135EB46DB54DC42 /* arena.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
-		52F492F288C85C2A28527E4B6C9B4E07 /* FBLPromiseError.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 33D40A09F8C5975F8B550A0483033801 /* FBLPromiseError.h */; };
-		5338A1C7B78187BA6DF4AADDDE1FB981 /* bloom.cc in Sources */ = {isa = PBXBuildFile; fileRef = AA690BDFA65E8C410A82130B3483B82A /* bloom.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
-		539FE2DC564E37031364AF0690B4C079 /* NSData+SRB64Additions.m in Sources */ = {isa = PBXBuildFile; fileRef = 36FBDDD8326F0B0C781905C5CF742D68 /* NSData+SRB64Additions.m */; };
-		53EC757569AC06A3E0A0270942925E7C /* version_edit.cc in Sources */ = {isa = PBXBuildFile; fileRef = E8DE921A3AADBF970D703992669E82E0 /* version_edit.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
-		547E592CCE6FFFEC8B870CA68D4642C5 /* GDTCORDataFuture.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A37D0DC62ADF6DFECBB8C229F50AF93 /* GDTCORDataFuture.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		547F74694AA3F101A60FC29AF4777ECB /* FIRDataSnapshot.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B9509605188658AC6DAEB774F27217B /* FIRDataSnapshot.m */; };
-		54C6A866FF0CAC9E419AEDD9B99923BB /* log_writer.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2A0B383E88DBB23E8139375596467FAC /* log_writer.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
-		55095E5933B1AA1740A9E48E4D490DDD /* GDTCCTNanopbHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = E3E8EF9776569DF1C4FBACF2A05C6984 /* GDTCCTNanopbHelpers.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		55958675C0EF11E90E71F3EDEA3D06DD /* FIRTransactionResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 39E847F87FE098403E173AF071476BF0 /* FIRTransactionResult.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		5610D55DC7926A495CA4069724B8821D /* merger.h in Headers */ = {isa = PBXBuildFile; fileRef = 83AC43378C350989A6B691A3B81051E5 /* merger.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		5668DA111AC78F9066F04161000C0446 /* FAckUserWrite.m in Sources */ = {isa = PBXBuildFile; fileRef = BACDC3D5A2E777358D664B3A45214F03 /* FAckUserWrite.m */; };
-		568A54C8176D35F8A7EDB6C00C879B71 /* FIRCoreDiagnosticsConnector.h in Headers */ = {isa = PBXBuildFile; fileRef = 4AFF92094D4BC33FA831C1108F731A13 /* FIRCoreDiagnosticsConnector.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		56ADE8988785176BF58473001683DEB2 /* FImmutableTree.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D57A1F107BF9AB8D7F78C220FD7D3FE /* FImmutableTree.m */; };
-		56B2284C696879C63E21C1B12C3ACFEF /* FIRVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BD31C9DAA421C4A8E24D11F5161689F /* FIRVersion.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		5794EA2905855CDAE67515C65C7E5CE6 /* status.cc in Sources */ = {isa = PBXBuildFile; fileRef = 58308FFBBA52F24C69542503039DE365 /* status.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
-		57F3914A57D8C391B28D7543A043EE5D /* FirebaseDatabase-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = BA39E2C48027666F9469709D4DC983B4 /* FirebaseDatabase-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		5804E667302812932C3103450BEB651C /* Pods-openTok-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 66E4FD9B631E9F35722D53A6EC999ACE /* Pods-openTok-dummy.m */; };
-		5A0405864E8F4C6C9E7FA0C0957740BB /* FIRAppInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 71D624A72A3D5A4BBC3E8E85FF70070C /* FIRAppInternal.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		5A123C1FB806917F37E0E8FA627106D6 /* FValueEventRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = FFADC6E448C500341452C5E5C14C8B48 /* FValueEventRegistration.m */; };
-		5A2D74B12012630A42D1F5CA8F266256 /* GoogleUtilities-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C6D8EEB350A4ECED82D557A3EAB5AA77 /* GoogleUtilities-dummy.m */; };
-		5A4626A78A5C4E49BDB009D02D3E261B /* filter_block.h in Headers */ = {isa = PBXBuildFile; fileRef = 27F81C53060A8621A2223C2F50CD241B /* filter_block.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		5A52D232EABA2665C7EEF5035A49373E /* FTransformedEnumerator.h in Headers */ = {isa = PBXBuildFile; fileRef = D5D7486A6BEF323ADBAE7A259186E285 /* FTransformedEnumerator.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		5A8F8D9E203FF204C505E11577716FE6 /* testutil.h in Headers */ = {isa = PBXBuildFile; fileRef = 95728A376DED6052F25B119402483838 /* testutil.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		5A9A9AE6AC1291C88F5953D3BFC4D965 /* FMaxNode.m in Sources */ = {isa = PBXBuildFile; fileRef = CAD98370F606C47C0E85A961278677BC /* FMaxNode.m */; };
-		5A9C4484FCE755697ADFC6A28E20A016 /* FViewProcessorResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 026599AE480DD91768D8F683E59FE6CC /* FViewProcessorResult.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		5AAE67A01BF047446F46E6B3664C4103 /* FLLRBEmptyNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BD6ADA3108223D06CC45B5E4D709C49 /* FLLRBEmptyNode.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		5ACD9CCCFCEC9B7B56E858A2E0204AE0 /* FIRLoggerLevel.h in Headers */ = {isa = PBXBuildFile; fileRef = 061A348B4063578DACB2E0C334E75E2E /* FIRLoggerLevel.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		5B975A3DECF705D94BB558B2D3D2DF40 /* FKeepSyncedEventRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = F42C7C268617DB7675F42B8B5E5495AA /* FKeepSyncedEventRegistration.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		5C9DC0DDA64154FCD249C79DFE95B6B5 /* FServerValues.h in Headers */ = {isa = PBXBuildFile; fileRef = F64C9236D303103F4D3C397C4862BAA9 /* FServerValues.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		5CC90ADB1221D7A10D9E9EE241C524EA /* FIRRetryHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 3FE1ACAC1C23FF4E29B8821ADC8ED85F /* FIRRetryHelper.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		5CFC8A5B24D8CD47ECEA3B285A8AC115 /* FIRCoreDiagnostics.m in Sources */ = {isa = PBXBuildFile; fileRef = 0639F28CB196245922C7D8D3836E0964 /* FIRCoreDiagnostics.m */; };
-		5DED636C6146A0FAF727E7096AB0C763 /* FTupleObjectNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 78CE4FC4674E17E99E511BCA4E3D89E0 /* FTupleObjectNode.m */; };
-		5F0ECED121063D05096B8D84C08255B6 /* env_windows_test_helper.h in Headers */ = {isa = PBXBuildFile; fileRef = 083D3597C0190CB5D637CC9EE15579C8 /* env_windows_test_helper.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		60BE2ED8380E6A7CF121EC37BD34A8C7 /* FIRAnalyticsConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = E5FE3C03918579D14DEB83FD5B810D8C /* FIRAnalyticsConfiguration.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		60E5A2DE0C8C9144803E3861B1958FE4 /* GDTCOREventDataObject.h in Headers */ = {isa = PBXBuildFile; fileRef = D212664CA6B122A499E6AAE0259F5F5D /* GDTCOREventDataObject.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		619DF4CCAA6E644FCC811DDB00BFEFE9 /* db_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = F86A2D7DF81C3E8869A794D7E0292C97 /* db_impl.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		621E3BBEA4C5834B355B1DCC0EC89EF0 /* GDTCORStorageProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 94B46AAE0848AD9B3F922BBB8DA40DC5 /* GDTCORStorageProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		6258B140C90F66751CD6E1A18689EED3 /* FBLPromise+Any.m in Sources */ = {isa = PBXBuildFile; fileRef = 85F1AE2EBEC3ACE6F7F8518590D0F6A2 /* FBLPromise+Any.m */; };
-		62990D2BB6C4C0DDD3CD1848667C6388 /* FBLPromise+Any.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 0E8161CED1C17230153CB59CBAA2ABA9 /* FBLPromise+Any.h */; };
-		6330222D094742EE882DEB728FF1E4F8 /* log_writer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E86539022322DD1F5296F3214CEC49E /* log_writer.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		652C7D589C4B335702DE85D4942D99CA /* FIRComponentContainerInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 92CD283D96DCA1B1A70CCFCEDE5A47B2 /* FIRComponentContainerInternal.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		6585F9E21D3910193D605670449B5F1D /* GDTCCTNanopbHelpers.m in Sources */ = {isa = PBXBuildFile; fileRef = 080B6ED2BE515044B2F811627F849632 /* GDTCCTNanopbHelpers.m */; };
-		659DDECDB1D8A810216CF4556E9BE3EE /* FNode.h in Headers */ = {isa = PBXBuildFile; fileRef = DF9EDE9DB2CF0517FF04BC31DCAEC0FE /* FNode.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		65DDC8DA853BA7480883F3BAFB91A171 /* FImmutableTree.h in Headers */ = {isa = PBXBuildFile; fileRef = A1B575D60903423A2B9984866581EC10 /* FImmutableTree.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		664B0232A289CCBBBCABF3F6C8177BDB /* FBLPromise+Validate.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 5F0C162A1408DFD87160990CD1C5B5FE /* FBLPromise+Validate.h */; };
-		665579D80965906C049310B67DB8A18F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C3C1EB539A57B6F7CBF5F5F61AEC46A /* Foundation.framework */; };
-		682894F93E41C971ED72F78FAFD72163 /* FPendingPut.m in Sources */ = {isa = PBXBuildFile; fileRef = FA42256409F6AE11E423BC2D052A2AB3 /* FPendingPut.m */; };
-		68693C071B9836EC770A8CF091F4BC6A /* GDTCORReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B32762245BBA7D25AC72093BF9D75E6 /* GDTCORReachability.m */; };
-		6884F18249527354885EA942C51A3350 /* GDTCORConsoleLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 3096846386F3836A75FB794288AA257E /* GDTCORConsoleLogger.m */; };
-		68FD1F5350878B5D0B4EE2938C67AA6E /* FLeafNode.m in Sources */ = {isa = PBXBuildFile; fileRef = DA1705E3E3B1D427074C708CE40F9CAC /* FLeafNode.m */; };
-		69014479FF4FA988406168B4BE30EDF1 /* version_set.h in Headers */ = {isa = PBXBuildFile; fileRef = F907DDF83A30F1299472C033320155FC /* version_set.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		69426E491EC5E31B1F89407ED742FE37 /* db_iter.h in Headers */ = {isa = PBXBuildFile; fileRef = E3B99A902AB32FA5853427C93DCEA165 /* db_iter.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		699B4E6CCA689A6F0E4969C29E270439 /* FWriteRecord.h in Headers */ = {isa = PBXBuildFile; fileRef = 7608FC4EC17E98020B24155456A3AA39 /* FWriteRecord.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		69AD7F4C5ECF8E9C8E699F6BC5018DCA /* FTrackedQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 378857989CF09BD719CBDF32E1B87FBA /* FTrackedQuery.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		6A2FD4A639D49DA6C2278A0C9E91232C /* FBLPromise+Validate.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F0C162A1408DFD87160990CD1C5B5FE /* FBLPromise+Validate.h */; };
-		6A6AB52A108BF6FF2FD4FAA9F7FF4AF4 /* FPathIndex.m in Sources */ = {isa = PBXBuildFile; fileRef = C08F5263A7EA97B8AD1A8772345B4295 /* FPathIndex.m */; };
-		6A8AA68F2D6AF1B11F283156321088FC /* GDTCORClock.h in Headers */ = {isa = PBXBuildFile; fileRef = 695B08F258794D8BA0F5ADA821C842AA /* GDTCORClock.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		6AE785742922D3C6C01E2F07B874B586 /* GDTCORReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 823E7E73D27229EF57D62A2C3C62E62C /* GDTCORReachability.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		6B2411DC7943C6C7EA36A81B77060E1B /* FIRDatabaseReference_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 052D1A59D81CF3189CCE9443B2F2ADE7 /* FIRDatabaseReference_Private.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		6BFF9CABC2AC3E40CD05E0A7837E0A86 /* FCompoundWrite.m in Sources */ = {isa = PBXBuildFile; fileRef = AD39F1091B89CC90EB47C76A7740E528 /* FCompoundWrite.m */; };
-		6CE6CAFFC9CEE98DBF5F7AFC4277110F /* FConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 916D739034B004E106182204228D42C0 /* FConstants.m */; };
-		6D1271BD091A228A0F042FB570729DD1 /* FTupleCallbackStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 5AF6CFF33C19AC6817222406C326E673 /* FTupleCallbackStatus.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		6D7D25CD028F7733E540220C3D285BB2 /* FEventEmitter.m in Sources */ = {isa = PBXBuildFile; fileRef = 24AD25CF950ACF35024D9FAC762DD3A3 /* FEventEmitter.m */; };
-		6DBE9B3D6F0F2CE13E49E5F688DE7F49 /* FTreeSortedDictionaryEnumerator.m in Sources */ = {isa = PBXBuildFile; fileRef = 593FEB0A405089A855F6A178DC382FFF /* FTreeSortedDictionaryEnumerator.m */; };
-		6E23414B614CF0541D4234A44D46E6A9 /* GULKeychainStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = 78BAF0D547E00F0767C0DD113ADF19C0 /* GULKeychainStorage.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		6E58371477A4FE48963F06710FD6ACAC /* FBLPromise+Testing.m in Sources */ = {isa = PBXBuildFile; fileRef = C5878F2A6B4FDCC6F17613A13676081E /* FBLPromise+Testing.m */; };
-		6FA79E35AAEE2335FC5F1EA7701CCB38 /* GDTCORTransformer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 088E9D65F0C3C763F8B1466BDCCEAEED /* GDTCORTransformer_Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		6FD783676DA1F46810033F9098475B13 /* FIRCoreDiagnosticsConnector.m in Sources */ = {isa = PBXBuildFile; fileRef = B5D4BE3DC5EADCF63F424C33B95D8E0F /* FIRCoreDiagnosticsConnector.m */; };
-		70031267032F653DD49657907E61FA20 /* FLeafNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 0541259BE7A9475648BF4DC718F6F409 /* FLeafNode.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		70E6D6C00DE7612C2B1BAEF1BC3AB1CB /* FTree.h in Headers */ = {isa = PBXBuildFile; fileRef = E9A9F5F708FDFD0E308F6410820EE811 /* FTree.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		70EF2DF97705C4E7DC796A993C8131CC /* FBLPromise+All.h in Headers */ = {isa = PBXBuildFile; fileRef = 29BD25E1380AF136F830D5ADC46CB53E /* FBLPromise+All.h */; };
-		714FC27A789BAFB9847D2AC476F65A51 /* FBLPromise+Recover.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 7610135E50DA4D208AF3E88330FCBDC1 /* FBLPromise+Recover.h */; };
-		71FA45ADE713CFA936FE6975075FC7F1 /* GDTCOREvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F616D4FBC71458933254CDA110C11CA /* GDTCOREvent.m */; };
-		72C5EDBA781D29BFAAB551413463132F /* FView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E7D64340689B27CEC98862A2A1558BA /* FView.m */; };
-		74831D60BF46F763B40E019D3835F87D /* GDTCORTransport_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 57FEBC63E8E55E8C1B6847CAEDE77959 /* GDTCORTransport_Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		754738AB24E60CE84A402F4D60C145F7 /* GDTCCTCompressionHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = D3B07B31DDBEA3C5582D124B8D3B6443 /* GDTCCTCompressionHelper.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		756A2EE872A8DDCA0E52D315A589AB4C /* merger.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3455A08B816E9633E67F45031FC9F6CD /* merger.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
-		756B4E768703DC810CF59DCAB2F75B99 /* GDTCORReachability_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = CA6848D4B1055686D25D93DF40B2C915 /* GDTCORReachability_Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		75E5079C628FEAB8F122ECFFF541CE65 /* GDTCORTransformer.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BAC11B5BD73140CC06EBFFB33C6E3E4 /* GDTCORTransformer.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		762285060EB8FC38B7345EEDABD9236E /* FIRAnalyticsConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F8222E00AF134E0711FE08042A039C2 /* FIRAnalyticsConfiguration.m */; };
-		76E1D620DF668560C0A508B931C892EC /* builder.cc in Sources */ = {isa = PBXBuildFile; fileRef = F21172F501A44D23EDDB3AEA5234235C /* builder.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
-		77728A7BED51FEF74A4BD7261D3230F4 /* FIRLibrary.h in Headers */ = {isa = PBXBuildFile; fileRef = B6B1D21BE3FE785C043FD82E5E14181D /* FIRLibrary.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		7778A74F15FFFD1C05497A5E926E8715 /* FEventEmitter.h in Headers */ = {isa = PBXBuildFile; fileRef = 21EDE18558B70D38E006596E26788D36 /* FEventEmitter.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		78066B813499E43C772003B1BF0427AA /* FBLPromise+Catch.h in Headers */ = {isa = PBXBuildFile; fileRef = 9258D0107323650D356F6D0323D79CC3 /* FBLPromise+Catch.h */; };
-		780B68AAE183B3B79A09360D6D86DDC8 /* FirebaseCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 917F14DB5F41240C3D285C5384050E2C /* FirebaseCore-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		78173DD3AD8FEBDC30D56CBCA2A8420D /* slice.h in Headers */ = {isa = PBXBuildFile; fileRef = F13DF5348224F0D6CBA0689639782254 /* slice.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		782F4AC4A6D48CCFB91AA97ED5433141 /* FIndexedNode.m in Sources */ = {isa = PBXBuildFile; fileRef = A1B705F633CD48849AE76995D60F22F5 /* FIndexedNode.m */; };
-		78F88029EAA27CCBFFE43A944B455A24 /* FBLPromise.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 87A11B9808FEF3BD00DEAAF8F1F7A1E8 /* FBLPromise.h */; };
-		791FCE68614E82B3AFCFEE1FCF5299FC /* comparator.cc in Sources */ = {isa = PBXBuildFile; fileRef = AC1A01D6B0D166DA6AAD158D6264F693 /* comparator.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
-		79301BB80C42E8D6F837287E5BF87C4C /* random.h in Headers */ = {isa = PBXBuildFile; fileRef = 98B5D3DAE49B0B1F304E5AAF9095F733 /* random.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		796A48ABBD99A855EF892338989223B6 /* pb_common.c in Sources */ = {isa = PBXBuildFile; fileRef = DF3E939FA895E12649FDF094D1D8DC7D /* pb_common.c */; settings = {COMPILER_FLAGS = "-fno-objc-arc -fno-objc-arc -fno-objc-arc"; }; };
-		79738317AEFE3E41A8478317CBAE9857 /* FBLPromise+Catch.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 9258D0107323650D356F6D0323D79CC3 /* FBLPromise+Catch.h */; };
-		7A2EE53A852A177298C0AEFF53F36E57 /* FIRDatabaseComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = 54EDB5C773BAC4698020342F0696F390 /* FIRDatabaseComponent.m */; };
-		7A81401CD997F8C281A44B24AD0C1C47 /* FTupleNodePath.h in Headers */ = {isa = PBXBuildFile; fileRef = 5EFC7D206D5469364E21D58DD4E6C7A8 /* FTupleNodePath.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		7AF1E3D44D555CF1560B25ABBB18DAD5 /* pb_encode.c in Sources */ = {isa = PBXBuildFile; fileRef = C443A630A1668A448ECF8A09F457DEFA /* pb_encode.c */; settings = {COMPILER_FLAGS = "-fno-objc-arc -fno-objc-arc"; }; };
-		7B52884624478BA3B6D5273237DA612C /* FWriteTree.h in Headers */ = {isa = PBXBuildFile; fileRef = 385FA78D355DA5FF4ED09DE6A1AB8057 /* FWriteTree.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		7B816CEC366EA348B2258921C66F1FFD /* FIRDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = FD7581EECCCABA4BECF7F34AA2731B64 /* FIRDatabase.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		7C0F5FA852455BB602CB06301F73D14C /* FChildrenNode.m in Sources */ = {isa = PBXBuildFile; fileRef = D14605E2B290BBFBCFE713BA4B20BA76 /* FChildrenNode.m */; };
-		7C53A6196C34CBBE5F47F4B30215F6A8 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C3C1EB539A57B6F7CBF5F5F61AEC46A /* Foundation.framework */; };
-		7D0FE3A51F36E7C4A2678853982A411D /* FViewProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B2312F44AC0B0A5F30BD2D7E4AD31E1 /* FViewProcessor.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		7DC98B441048ADBA595C6F12B37AC7CE /* leveldb-library-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C4C0ED34A72FF0624A93EC40E7CF6B37 /* leveldb-library-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		7EFBFADDE51783B82A51CCED09D408C1 /* FValueEventRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = C36919082934B6801606679F9235BAA5 /* FValueEventRegistration.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		7F1E012AD8F03E57353F4F1EE729FD0B /* FIRLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 5004A374237FC691736F521969A16337 /* FIRLogger.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		7F2F5653A57ABB9417C394852A04B755 /* FRepoManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 98859E9B4B250386DEDD7C85EB0716D8 /* FRepoManager.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		802B6DAEB0CE8C6E44DB8BB5FEFDDB28 /* FChildChangeAccumulator.m in Sources */ = {isa = PBXBuildFile; fileRef = 543616AED705E736331D7BF0C4810E1F /* FChildChangeAccumulator.m */; };
-		80883E58195D0C95FF43C861FB0634E1 /* FCompleteChildSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E7B43761161E27D4FB4903970D91F4F /* FCompleteChildSource.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		811E1C387E694AB74A8DCA4E1DFAD2E4 /* filename.cc in Sources */ = {isa = PBXBuildFile; fileRef = 5B797E52A5E7D33056211AE0FE28030B /* filename.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
-		82457C88EEDA09C07B542C95C505C68F /* GDTCORUploadPackage_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 428B977BF39D31F8F69EF02D8F825E96 /* GDTCORUploadPackage_Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		8308039D5AC50C9185DBE60C069B6ECA /* FBLPromise+Recover.m in Sources */ = {isa = PBXBuildFile; fileRef = FA32E456E1C52FF9AC73AE5949A43B5E /* FBLPromise+Recover.m */; };
-		8464F1BABCF4CAA35574FDCFF3BB99DE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C3C1EB539A57B6F7CBF5F5F61AEC46A /* Foundation.framework */; };
-		849A0FE6B697BF9683283B3EB1974738 /* FIndexedFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 6EBB17129E01D8CF54893F948D47D963 /* FIndexedFilter.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		849FAADFAA2CDF0E00587B785C3A25B6 /* FBLPromise+Race.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 9DC5B45B4B2D0DC0AE3FB7A75E08649A /* FBLPromise+Race.h */; };
-		851B8F4CD6FF25BA0510DF4B6A4F9FA5 /* FBLPromise+Retry.m in Sources */ = {isa = PBXBuildFile; fileRef = 744466560FAD76B6239D54402C0C52DC /* FBLPromise+Retry.m */; };
-		85A99CFD1EAF4B2F16D252AB054441E1 /* FBLPromise+Recover.h in Headers */ = {isa = PBXBuildFile; fileRef = 7610135E50DA4D208AF3E88330FCBDC1 /* FBLPromise+Recover.h */; };
-		86AA6392AA1FEDCA0ADF69B38B14755B /* FQueryParams.m in Sources */ = {isa = PBXBuildFile; fileRef = 43C180B98E9AA37DFE45416D2E782F89 /* FQueryParams.m */; };
-		86AC5E16F0CB973D87D07A3A1813EDCF /* GDTCOREvent_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = F24B2FE999A991B0FB72A88254F127A9 /* GDTCOREvent_Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		86E8E207A4D9F6D115E2FFEDD8EEB3AA /* FTrackedQueryManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EAA3C6BA44BAFE3C08D2B7B5567778D /* FTrackedQueryManager.m */; };
-		86F9279C083639AB20DB701A533CCCCA /* FLimitedFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = 20A93D898B3FF479357C52053210F552 /* FLimitedFilter.m */; };
-		87910C8366AC5C2E1F9E36AE14F2CA27 /* iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = 46440B55B39BD26A9DF8DBAD2638BB2F /* iterator.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		87CCA0094B49425EFD2E1467E4A5646A /* fbase64.h in Headers */ = {isa = PBXBuildFile; fileRef = AEF3F09834AB87411FD7F6AF1067B39D /* fbase64.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		87D730E28EF617D4F2CF863BF0F6737F /* FTreeNode.m in Sources */ = {isa = PBXBuildFile; fileRef = B52430627E2CEB470F4622858A8480DA /* FTreeNode.m */; };
-		87DC0888CE2B5E68997CA2E2B91A4943 /* FKeyIndex.m in Sources */ = {isa = PBXBuildFile; fileRef = FE5998250B73CE8F1C7FC072542E79C7 /* FKeyIndex.m */; };
-		884CCF71D150619CD60C43D938699F8F /* FBLPromise+Then.m in Sources */ = {isa = PBXBuildFile; fileRef = 922204FA6D1655751812D541250FEA72 /* FBLPromise+Then.m */; };
-		88C001E6B3B75F369C266C2C116A7DBE /* FBLPromise+Timeout.m in Sources */ = {isa = PBXBuildFile; fileRef = AD6117C150F7C9AEC846B49F6EAA9BAF /* FBLPromise+Timeout.m */; };
-		88C13D592F16B7278CEE5150D44A0F66 /* iterator_wrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = BE1A8F7A905D09BE7EB82BBFF174EE78 /* iterator_wrapper.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		88DE778EA02BEFE5E2EC61E357354DA0 /* GoogleDataTransport-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E2A534E083CF2D8F6EC559D6489659F4 /* GoogleDataTransport-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		89BA3207279ECA125A45BF428F2A38B8 /* port.h in Headers */ = {isa = PBXBuildFile; fileRef = BBCAFB9BB21E3ACB769B48A3B1C75463 /* port.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		89C8D847271BDB015EE2F37C5EA5D8BC /* memtable.cc in Sources */ = {isa = PBXBuildFile; fileRef = FD83A1F8DD099D0395534007C8A5EA71 /* memtable.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
-		89E0E29686637417A7ECCF7B84A4AF19 /* histogram.cc in Sources */ = {isa = PBXBuildFile; fileRef = E21CC05454593B859E1DD97BECD0AF1C /* histogram.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
-		8B768C3E4BBABB6AB30C627C17A6D8CB /* FBLPromise+Delay.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = F28A8199104EC2C984FA676FED6D9FBF /* FBLPromise+Delay.h */; };
-		8BE66D549E7580DCF6128DF93DA4A244 /* FBLPromiseError.h in Headers */ = {isa = PBXBuildFile; fileRef = 33D40A09F8C5975F8B550A0483033801 /* FBLPromiseError.h */; };
-		8C42D689F7282ECFB561869D5D4E9647 /* FEventGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = FA47D62FD3660036076067B875D655A9 /* FEventGenerator.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		8C800877FC0D7864D21CCC0F4EDE99B2 /* FLLRBNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 57D93D85D4F115B046E9F4E297055F80 /* FLLRBNode.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		8CBFAB6FCA1E4F62C29F2C30E42EF00F /* FBLPromise+Timeout.h in Headers */ = {isa = PBXBuildFile; fileRef = F8B8FAE3380266FF581E5704B032BC1D /* FBLPromise+Timeout.h */; };
-		8DD28787BCC2A2B7B311929312A962E2 /* GDTCORTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B54F40D4D8961A88689128664F1E34C /* GDTCORTransformer.m */; };
-		8DEB564DAACF581047405823582A7235 /* table_cache.cc in Sources */ = {isa = PBXBuildFile; fileRef = 60FDC5A59E02334D7C8B34614969FCAA /* table_cache.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
-		8E2F20850942EFB5BA9919749461F27C /* FQuerySpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 2EB182B0C82CC8AEF45E12CE2FE0023A /* FQuerySpec.m */; };
-		8F09F46C97F3D1719E79448426D90B88 /* FBLPromise+Async.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 0E5714B2DDE9933EA30C49F766B5E69A /* FBLPromise+Async.h */; };
-		8F622CBD13FD505E49C926EF05281863 /* FIRTransactionResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B51796ECD501253EDB5FCF8F42BCF07 /* FIRTransactionResult.m */; };
-		8F6DE00950247BF705BAEA10E4A231FC /* posix_logger.h in Headers */ = {isa = PBXBuildFile; fileRef = 674C8CF50302A87EC7519C90AF0C6F61 /* posix_logger.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		8FAA82B55473DB6B1C1003882B31A970 /* export.h in Headers */ = {isa = PBXBuildFile; fileRef = 784C73A1380FA3D7D7A731214DE53A13 /* export.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		8FBC6101EE07730E9730A300A356F0E6 /* GDTCORTransport.m in Sources */ = {isa = PBXBuildFile; fileRef = 90D45AEDE9F7AD08010F5EE9B389652E /* GDTCORTransport.m */; };
-		907C68C2C45324A2E72BF9CAF93F48CF /* FTransformedEnumerator.m in Sources */ = {isa = PBXBuildFile; fileRef = CD22B20DCEE97C6687C597002DC5BE44 /* FTransformedEnumerator.m */; };
-		9094065368AC7058A86BB581D076CFF3 /* GULAppEnvironmentUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = FB1CF18DE410CAADC9B10DDD72B0B536 /* GULAppEnvironmentUtil.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		90B7A4A975358FF6210D58AA46861C62 /* FTupleCallbackStatus.m in Sources */ = {isa = PBXBuildFile; fileRef = 945B168B765E0149A40FCDD1B383D898 /* FTupleCallbackStatus.m */; };
-		91E2E976670D660A9D998B7953EF5A50 /* format.cc in Sources */ = {isa = PBXBuildFile; fileRef = 338E9E4797BEAD2FFF893017AB97CC8B /* format.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
-		926AA07593CA64CDB72ADCC7CBA0479C /* logging.h in Headers */ = {isa = PBXBuildFile; fileRef = 635E69A93F16B99D33B27A6452B14DC5 /* logging.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		9288373444BB899F7AA1DA50A4E283D6 /* FTupleObjects.m in Sources */ = {isa = PBXBuildFile; fileRef = EC267D96A5B075660F91DDA49D90E56C /* FTupleObjects.m */; };
-		92B13C918F4EF811AA2A66F54DBC66A0 /* GDTCORUploader.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B04B5BCD905ACB2C2079AFD75AB6597 /* GDTCORUploader.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		93C4DC49847D79F57FE9081C860C838A /* FBLPromise+Wrap.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 82BD2B064A081DE7FB1B130EDCAAA263 /* FBLPromise+Wrap.h */; };
-		93D5643C0AB33FEEBBC46006C28AD6EC /* log_reader.h in Headers */ = {isa = PBXBuildFile; fileRef = 40FE1C2937524054AB15B3A3F4272345 /* log_reader.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		9408D969BC396404237E37745DFCD3E5 /* FIRLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F2E840DE3E5096DD4B221B61ABE94B4 /* FIRLogger.m */; };
-		9456C0CC30E27EC6E44E1B7E509C7908 /* FIRErrors.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B12871BB34F2EA4AC753A384DD80F71 /* FIRErrors.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		94605D578942F9050F95C09666C8A0DE /* FIROptionsInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 87C8D393D6580BF43944DB0760788D06 /* FIROptionsInternal.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		94D3B9222CFE703A7F324982FB2896C2 /* FCompoundHash.h in Headers */ = {isa = PBXBuildFile; fileRef = 2FD56C3309CCD46F670D5CC2DEA4B8F6 /* FCompoundHash.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		94F443F2A3E409A0DD460F8CED709426 /* port_example.h in Headers */ = {isa = PBXBuildFile; fileRef = 4781B46372655A8914D2F3F4F92B66A8 /* port_example.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		95075C8107ED96F6C5E393C0528BAA24 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C3C1EB539A57B6F7CBF5F5F61AEC46A /* Foundation.framework */; };
-		95DD27DE92BA62EBD4899815B8B82E94 /* GDTCOREvent+NetworkConnectionInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 12F7E2F7B784439C5476A1EF8BD49AF0 /* GDTCOREvent+NetworkConnectionInfo.m */; };
-		963AC4F88FC6DB6A294C23A6B94B895E /* FirebaseDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = 148C3A198D5DEC1D04F9AC25F9963A0F /* FirebaseDatabase.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		96EE898B4D6112C56164BD01DF544A95 /* FIndexedFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = D7C3CEC573454AA3BE96772D20CBD14F /* FIndexedFilter.m */; };
-		9709DEECF73CB7857CD08B0F7CC324DC /* FIRDatabaseQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = F229899516D0622E81CAD20651193F00 /* FIRDatabaseQuery.m */; };
-		972069230464E6CE883137D34054A915 /* FAtomicNumber.h in Headers */ = {isa = PBXBuildFile; fileRef = 76009627450555684FFB602D5CDB66C8 /* FAtomicNumber.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		97A79F93977B5D83B4B24AADC6E55F99 /* FBLPromises.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 60129F2C1744E4C6A0B45D363AEEF0FD /* FBLPromises.h */; };
-		98CE6713616C5FB36055CE35CB912580 /* FViewCache.h in Headers */ = {isa = PBXBuildFile; fileRef = DC29D06EF9DB0608699CE6668F459127 /* FViewCache.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		9982123CD233B4B9CCD7726EB385AC47 /* FIRComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F468A47D4B1484163852DBA4C01BDC2 /* FIRComponent.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		99B08BD22638BB764A6DB636BD6EEE83 /* FImmutableSortedSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 361D5CC60A972E92E4E30CAE036573B2 /* FImmutableSortedSet.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		99F16CB0C7366E30E911E0CE59932E2E /* FBLPromise+Always.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D7B530E73F5DDD639F32EA9C53A45C2 /* FBLPromise+Always.m */; };
-		9C9383AFE832544B9A756FD939602FE1 /* FCachePolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AF11CCF6B730B0458E39354C36DB72A /* FCachePolicy.m */; };
-		9C96B262B9F7AD344AC96B378D6575EA /* FSyncTree.m in Sources */ = {isa = PBXBuildFile; fileRef = E7C728948CE0F1485BF0F4BAFD54D11C /* FSyncTree.m */; };
-		9D89A42D660A393CF67488B773CAFB86 /* FTupleFirebase.m in Sources */ = {isa = PBXBuildFile; fileRef = BE1FF88442223E72C05A63E1D359C30A /* FTupleFirebase.m */; };
-		9DB252952D8A38CCE72464F9F7200248 /* FPathIndex.h in Headers */ = {isa = PBXBuildFile; fileRef = B338B2C9808C5C0AF778CD7DADCE1AE8 /* FPathIndex.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		9EC1EC9364B5CDFB31A12E9D5764FC6D /* FBLPromise+Wrap.m in Sources */ = {isa = PBXBuildFile; fileRef = 50625C3A47D2BE9C9BD6151D17714D80 /* FBLPromise+Wrap.m */; };
-		A04610B5385CA6177BC5656B0250303A /* FBLPromise+All.m in Sources */ = {isa = PBXBuildFile; fileRef = BB0D2688C1F6E5C119D27FA7EB2A6087 /* FBLPromise+All.m */; };
-		A0E974D12B01BDCBABDA5E13FAB7F60A /* FBLPromise+Catch.m in Sources */ = {isa = PBXBuildFile; fileRef = EE5C51CE831C623408DB778C1ABA0148 /* FBLPromise+Catch.m */; };
-		A11D454125A8A77C3C56C831647BFDB0 /* FTupleSetIdPath.m in Sources */ = {isa = PBXBuildFile; fileRef = E0133CE971C065D957EDE8B9AAF9B36F /* FTupleSetIdPath.m */; };
-		A140D4912634751D944F96961A729678 /* FBLPromiseError.m in Sources */ = {isa = PBXBuildFile; fileRef = 0496F85216D9C79A563C82C7CDB45620 /* FBLPromiseError.m */; };
-		A170992FA484285612C6963363E5DA79 /* FNextPushId.m in Sources */ = {isa = PBXBuildFile; fileRef = E58F4E0A35AE5270A10F0B182C0CBC9E /* FNextPushId.m */; };
-		A183BD1108871F9318965F176B82698F /* testharness.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9C997CFFE0B0EB3DB9D6ADAF73854B4E /* testharness.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
-		A19AD85CAB80A263AFE2A2B213D752F7 /* FSyncPoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 11480D63F4E0BD36E1D198F5A9A73FB2 /* FSyncPoint.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		A1EA5FBC078FE046032A7944CB6643B4 /* FAuthTokenProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BD62334D7DD704E7183CB5CD05D5FEF /* FAuthTokenProvider.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		A2AB536DABF58FA5367313F8A4DD4E6E /* GoogleDataTransportCCTSupport-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9AB3707E44CE0D64C47BB82321FE3BD4 /* GoogleDataTransportCCTSupport-dummy.m */; };
-		A30642CFFF9C5A8F3478A7A60AE5B7B1 /* FTrackedQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = D300E695491585B083A58415F81511F1 /* FTrackedQuery.m */; };
-		A35AAF57E54A60DAE0F8B0B73A95E909 /* FIRDataSnapshot.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AC6719935B3430DE4E11C520944D8BF /* FIRDataSnapshot.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		A47E0D6D145338CB1E31C34A05FC4D22 /* GDTCORUploadCoordinator.m in Sources */ = {isa = PBXBuildFile; fileRef = 057F550138403A0C7FD68032C21A0E20 /* GDTCORUploadCoordinator.m */; };
-		A4A889BBD02B931CB5C8BFD0D4F41883 /* FTupleUserCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = EAE499B2DF8EBB7143A877BF5CDAEF4E /* FTupleUserCallback.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		A5465698DF7B22C392B7D31DE534DEC5 /* hash.cc in Sources */ = {isa = PBXBuildFile; fileRef = FBA2C6C1EE48B9B639ED048474EB4157 /* hash.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
-		A5828FCD71C9F92CEB40745B44E56D50 /* FBLPromise+Do.m in Sources */ = {isa = PBXBuildFile; fileRef = 67AA07E8EC09CCB7FE04406017A4C519 /* FBLPromise+Do.m */; };
-		A5CFAA6948B4DBD6A65CA62F8C86DD05 /* pb_decode.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DE1D8D85EC90A32E28154D880378587 /* pb_decode.c */; settings = {COMPILER_FLAGS = "-fno-objc-arc -fno-objc-arc"; }; };
-		A676E368E2A95B5AC9D25DEE38C0102C /* FLLRBEmptyNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BE48E3EE3333BF5E2BE4F1CD5787E3D /* FLLRBEmptyNode.m */; };
-		A68E8B2EE1FF194B6655B436EB9BDC33 /* FKeyIndex.h in Headers */ = {isa = PBXBuildFile; fileRef = A8DA6D09CA5BA0ADBB362152B7846961 /* FKeyIndex.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		A6FDAD94CB273F331BDBB351144134B8 /* FIRMutableData.m in Sources */ = {isa = PBXBuildFile; fileRef = 09306EA07C5E6C3D3EB420111146C811 /* FIRMutableData.m */; };
-		A71FF5D6D6D76CC6FC7B3B43B6C33376 /* GULKeychainUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A0818CE0BCE0C31BA702F922277305F /* GULKeychainUtils.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		A7F784E4E56862F8FE6FF4F9027969BF /* GDTCORDataFuture.m in Sources */ = {isa = PBXBuildFile; fileRef = 23DF0DDD2310CC408B1DBE663F9C3CAA /* GDTCORDataFuture.m */; };
-		A89682156BD2FAEFC4ED75AC7E658794 /* GULKeychainStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = 446761389CFA822783FA41B1CAB429AA /* GULKeychainStorage.m */; };
-		A93A8D91D7274E5B74371311D47C73F7 /* FPath.h in Headers */ = {isa = PBXBuildFile; fileRef = 860B744356EA183E469CA636F94AEB50 /* FPath.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		A970A589B1BDCD6E26AF291394CA3E31 /* FirebaseCoreDiagnostics-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 119F6DBEC2830D0007421DCE8BF46135 /* FirebaseCoreDiagnostics-dummy.m */; };
-		A981CEB46C05996B9F96978A564D4DBE /* FIRServerValue.m in Sources */ = {isa = PBXBuildFile; fileRef = A551638736E976C6F89390DB407C4331 /* FIRServerValue.m */; };
-		A9D7DC9B772159819C6F4D31259CD6A4 /* filter_policy.cc in Sources */ = {isa = PBXBuildFile; fileRef = C659D2D4B99C8CDA79646FE859D2696A /* filter_policy.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
-		AA11D72BE245291456CCB9C76F81AF67 /* FBLPromise+Await.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 072544F03E5AE2F64EF237E82D81D545 /* FBLPromise+Await.h */; };
-		AB0E800A978D847EF27F7AA5C14CF881 /* FCompoundHash.m in Sources */ = {isa = PBXBuildFile; fileRef = 88B434AB00179B49FC2340C88AA79645 /* FCompoundHash.m */; };
-		ABD93BC90532E19EC023F2EF7F9D9371 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C3C1EB539A57B6F7CBF5F5F61AEC46A /* Foundation.framework */; };
-		AC9140659556BDBA9D745D74CD3A6428 /* FBLPromise+Race.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DC5B45B4B2D0DC0AE3FB7A75E08649A /* FBLPromise+Race.h */; };
-		AE0DD7A7FBBEE2BBD6287686FBC88221 /* FLevelDBStorageEngine.m in Sources */ = {isa = PBXBuildFile; fileRef = 37FBC87BF2448D86A7BDADF009B9803B /* FLevelDBStorageEngine.m */; };
-		AE2804D9077D31BCFFB1776E9E7329ED /* FirebaseCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 666F60F1D8D46D275395769502141CD1 /* FirebaseCore.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		AEAB078B047E355A69FE5114F8154936 /* FIRDatabaseReference.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A4EB59A5D57265DCE22DAF6B0F62EC4 /* FIRDatabaseReference.m */; };
-		AEB451E345319D5C736EC9E375325C18 /* FRepo_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E17B23410BF812634C8DD594B2392929 /* FRepo_Private.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		AEC4797BD06C0E8B4DF592D417318437 /* GDTCORTransport.h in Headers */ = {isa = PBXBuildFile; fileRef = 674391F19F12A6728205D726D39B24BC /* GDTCORTransport.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		AF1811523BA6E37F94F756239BE65D94 /* GDTCOREvent+NetworkConnectionInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 393AE47449FD921FAD26AC79342F7367 /* GDTCOREvent+NetworkConnectionInfo.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		AF3ADCA0514ECA43FAF773D4E9DECC18 /* FDataEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 36E86F31E1010E4369DFD5A8B2C46D99 /* FDataEvent.m */; };
-		AFA7F572F0E36F26B233C861C89DECAB /* GULSecureCoding.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D1AF60094F489C5CAB30597E9300702 /* GULSecureCoding.m */; };
-		AFEE9EE6550E8A52A7E0B41ECE994382 /* GULLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 06EC7B364270EE75563BEB149A98E2DC /* GULLogger.m */; };
-		B011CBB9CD6B822748DBDFC864B74856 /* FNamedNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 097A95430769429A66795E9E6AC6450A /* FNamedNode.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		B134B0CEE9718272E9DF54276CA6CB5A /* FEmptyNode.m in Sources */ = {isa = PBXBuildFile; fileRef = CD158462CD76FEB1BCB0075BEED53C2A /* FEmptyNode.m */; };
-		B13C59D3EC48DBA3E960F3030AB7DFF0 /* FTupleRemovedQueriesEvents.m in Sources */ = {isa = PBXBuildFile; fileRef = EAEAD2C37A2F7D54EB5D112BE700E464 /* FTupleRemovedQueriesEvents.m */; };
-		B172CD005EC2DB0C68CDCFEE1A1442E1 /* GDTCCTCompressionHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E7DD82D268001C64258EB45BA0470F2 /* GDTCCTCompressionHelper.m */; };
-		B1F0A49CE2997BD30DF7252D6920BA40 /* FTupleBoolBlock.h in Headers */ = {isa = PBXBuildFile; fileRef = D1E6D1D803B379D5B9D499DC2AEAAD57 /* FTupleBoolBlock.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		B2351BA6AA93042A3CD8553B32EB1410 /* FIRApp.m in Sources */ = {isa = PBXBuildFile; fileRef = FAD139992C71368B1D6232300F330E1E /* FIRApp.m */; };
-		B38FE144483BB55FAE1610A2ABE9AD1E /* env.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D6E47B616DE755714427591880125AE /* env.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		B456E026E105D2D5852F52B8CA410B93 /* FIROptions.m in Sources */ = {isa = PBXBuildFile; fileRef = EEAFB8AE27936F24FCBC0EBF570E19DF /* FIROptions.m */; };
-		B4592A85208BA71D07F267C9743D0210 /* FDataEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = A314FA39C00A05F50CD19B20BE48E0EE /* FDataEvent.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		B4A284890905A75D4D379A29452218E0 /* FWriteRecord.m in Sources */ = {isa = PBXBuildFile; fileRef = A8D9FCB9E6E7263B05452B4A1E52C57B /* FWriteRecord.m */; };
-		B4E0070CB2B00E4EFDFBD22D3115C495 /* coding.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B7C8165FC40E1432F5EB7EA2782E04B /* coding.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		B5121C8C0C047C4C994A3296F4CBFA29 /* FWriteTreeRef.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AF24CAB681011F26CE27B6CD0DA5E53 /* FWriteTreeRef.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		B56F29BF7F794835D2FA9484365D4944 /* FViewProcessorResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BDC69FEF92061A1018272C226777880 /* FViewProcessorResult.m */; };
-		B57B41BDA5F9F5DB72C186D9865980A5 /* FTupleUserCallback.m in Sources */ = {isa = PBXBuildFile; fileRef = 3294C1F7B7748B520AFE0A6E3E5FDE30 /* FTupleUserCallback.m */; };
-		B7E58D721D4EB5B30F25444AD97F6915 /* nanopb-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = DBD5F0D6D5607CCC279F0AA16086D019 /* nanopb-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		B7F3AA388B10FFB10143FA5537650DE3 /* hash.h in Headers */ = {isa = PBXBuildFile; fileRef = 8DB35C5A4E090537BCD1F8382ACCD601 /* hash.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		B8A54C5C3CC014705A8AEEE4F8130837 /* FChange.m in Sources */ = {isa = PBXBuildFile; fileRef = 79E2BF71AE254982334583E815969709 /* FChange.m */; };
-		B8B790054A38100E5BFDB4C9F2166DF8 /* APLevelDB.mm in Sources */ = {isa = PBXBuildFile; fileRef = 575EF3111261A829259FBDB6C19F8205 /* APLevelDB.mm */; };
-		B8CA041BC37733E92042E962A580E099 /* FImmutableSortedDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = 7054A55E885CFA0B88E9B303F1CA6A8D /* FImmutableSortedDictionary.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		B911CFB8610BBF3C0F24B65ABA3CF3F0 /* FImmutableSortedSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D5A4DB629B5B17E2F7AB448096A4572 /* FImmutableSortedSet.m */; };
-		B9B6AC6AA6B4045C5E47AB555D26D4DE /* GDTCORPrioritizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A9D85795C3AB0FC818197A64F6ADC1F /* GDTCORPrioritizer.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		BAADC524E75E1D8928202B1A5CD0FE6E /* GULLoggerLevel.h in Headers */ = {isa = PBXBuildFile; fileRef = 3144BEFF69AFAEDE619B25FE59B16969 /* GULLoggerLevel.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		BB464EF178EBC021F6AAF6DB41B88D5C /* FServerValues.m in Sources */ = {isa = PBXBuildFile; fileRef = 32B7228504715C2E4B9E3D0DD3622543 /* FServerValues.m */; };
-		BC5A60CB3173669785FDA3DF8D0CDA6A /* FSyncPoint.m in Sources */ = {isa = PBXBuildFile; fileRef = 218E7BC1C220924B1D6785CA4C25DC96 /* FSyncPoint.m */; };
-		BE8B58E802E3BFC76B2ADD29F2EC4AF8 /* GDTCORLifecycle.h in Headers */ = {isa = PBXBuildFile; fileRef = B4600FE4208AE3E5795D8EBB5F97A617 /* GDTCORLifecycle.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		BE9467BE9494527D5D49C93812D30079 /* FBLPromise+Await.h in Headers */ = {isa = PBXBuildFile; fileRef = 072544F03E5AE2F64EF237E82D81D545 /* FBLPromise+Await.h */; };
-		BF08B4C324DECBE26BFD0F695C4190BF /* FValidation.h in Headers */ = {isa = PBXBuildFile; fileRef = A43C04A3FED5D0538408B186EB5A4FD1 /* FValidation.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		BF7F746EAC86697E7B02E108948287F5 /* GDTCOREventTransformer.h in Headers */ = {isa = PBXBuildFile; fileRef = F3082C73B86C39432F3BEE1DB2F53924 /* GDTCOREventTransformer.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		BFA1C79B75FE0EDD55BCDC01CEA539B2 /* FTypedefs_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D96FB1E0748CB2643821DE1953901D3B /* FTypedefs_Private.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		BFDC80CCBDA9AEDCCBD11601E5970505 /* GULHeartbeatDateStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E2D65ECD11B6AEB036931D5A3380113 /* GULHeartbeatDateStorage.m */; };
-		BFDFD609230B6D3440C1D188AFC60895 /* FOperationSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 193284F73773846AA3A34879EC56EF86 /* FOperationSource.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		BFF780519BE9369BA0159FFE686B5B00 /* FRepo.m in Sources */ = {isa = PBXBuildFile; fileRef = E0EBF5A75E65BAB478184C63E9D29E55 /* FRepo.m */; };
-		C00B4883920C764B9AAE225E756DACF0 /* FBLPromise+Wrap.h in Headers */ = {isa = PBXBuildFile; fileRef = 82BD2B064A081DE7FB1B130EDCAAA263 /* FBLPromise+Wrap.h */; };
-		C0840CA66776CEA209B224ED2C274294 /* windows_logger.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D339BC8AB099B5E05C88DAA77FBD0DF /* windows_logger.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		C23156AB0C67FB70CAC131BD5EA62A7D /* GDTCCTUploader.m in Sources */ = {isa = PBXBuildFile; fileRef = 58570F7234627794C4BF02928884354A /* GDTCCTUploader.m */; };
-		C251990DC88BD29ACCA3CB46E5935711 /* FIRDatabaseComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B4F0813AD0FE6A019D69BEE02FE48B2 /* FIRDatabaseComponent.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		C2EFBC4F0E04491F1E47B04D8DB2A7BD /* GDTCCTUploader.h in Headers */ = {isa = PBXBuildFile; fileRef = 0AC4A9BC66B8D2CD0D2CB7874781F3E5 /* GDTCCTUploader.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		C30900E8594FBAAAAE8F3699D8F3A31E /* table_cache.h in Headers */ = {isa = PBXBuildFile; fileRef = 2FE487E9D169B1987ED50BF7CA45AB85 /* table_cache.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		C4E1E950931E52050E9BE5FCD9272EEE /* FEventRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = D9A699DB734FC836C80F34584A4A6781 /* FEventRegistration.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		C4F84818D463A2C85D1B0AC785C0D75A /* FIRHeartbeatInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E65C99CB1E05FEDE149BE32F292733C /* FIRHeartbeatInfo.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		C5D7F1E742FC356D7634879D05F7E194 /* cct.nanopb.h in Headers */ = {isa = PBXBuildFile; fileRef = 612393A8C0D0B02C9ADA7AB38EC11ED1 /* cct.nanopb.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		C678D9A28B761A4DA5E29CCF6DCBE82A /* FQueryParams.h in Headers */ = {isa = PBXBuildFile; fileRef = F47CA6F1F12ACAF9B0755A517EEF8774 /* FQueryParams.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		C69ADB52F0C74C9395A7D765309FCD83 /* FIRServerValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 991856E8769D32D7006FE848E3EB873D /* FIRServerValue.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		C6E30428F84E81A7DBC8300BE93C9239 /* FEmptyNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 1BBD1F80252B16388D8A2E0DC2FC7D9E /* FEmptyNode.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		C7736F65BB6EADB27DBC7391CDA9F97E /* FPriorityIndex.m in Sources */ = {isa = PBXBuildFile; fileRef = B33A7C7D5DA6BCED7A54588D8B519573 /* FPriorityIndex.m */; };
-		C79C2E16C567BE240374AB2ACA80E9D3 /* FIRDatabaseReference.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FBAE93D87DDDF2F1354A512B9055879 /* FIRDatabaseReference.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		C7A5F5CE6CDF617255F34E95436634B0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C3C1EB539A57B6F7CBF5F5F61AEC46A /* Foundation.framework */; };
-		C7C18B192A7D3836E0740DCFA83F0713 /* FTypedefs.h in Headers */ = {isa = PBXBuildFile; fileRef = F2560D7CA1567608F6BCDCD70881AFB4 /* FTypedefs.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		C7C5928AE2BAFCE30C33F465FC27168F /* block_builder.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E856DB50BD68A84A63AE55499872178 /* block_builder.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		C7EB3D4DF6FE9676259754253B9A7A99 /* FIRBundleUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F2DF0513C9DB23D691523760E8A297A /* FIRBundleUtil.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		C8551DAA6BEE4C8D580B625D19EED829 /* FSnapshotUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = A720480A68376788BC41CE5196AD1D6D /* FSnapshotUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		C8FC39092B2B902E7104CE205085EFDC /* two_level_iterator.cc in Sources */ = {isa = PBXBuildFile; fileRef = 99C96C3B40C51D1D79FC28DC8197EB3C /* two_level_iterator.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
-		C920951A0C1DD5F402838058F6D760CC /* FCacheNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BD8AF5861BD6D8277CCB8D46458CE6F /* FCacheNode.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		C923E01B60A3AB065A6E62679ED8E750 /* FBLPromise+Retry.h in Headers */ = {isa = PBXBuildFile; fileRef = D2A24B05955F1EE99EBC76E88971F2D8 /* FBLPromise+Retry.h */; };
-		C963AB40523BA26634F4C7F8EBB21E54 /* FIRAppAssociationRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = 38795B0F87C340F69CFEDED0CCBFAC37 /* FIRAppAssociationRegistration.m */; };
-		CA46156BB5C577F8BB7A3844B182E3BB /* FBLPromise+Do.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = B299C026C8827C5F992F488CCBA2D192 /* FBLPromise+Do.h */; };
-		CACA4866A8A21F378C5C22C4550461CC /* histogram.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A971A378B109444D68EC9F1710744D4 /* histogram.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		CADD0B727BBB942525DC66741C672D41 /* FRepoInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = DB9220001C09A1747358192EC9ED2C84 /* FRepoInfo.m */; };
-		CAE26FCEE07519D3D1BB7633D4CB301B /* GDTCORPlatform.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F89EABDE73772529AA4D1632A76AB10 /* GDTCORPlatform.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		CAF5489A9704768C8FDD43DEC3AAC933 /* FTupleBoolBlock.m in Sources */ = {isa = PBXBuildFile; fileRef = DE8DDBC684EAB94B117FB431D6983794 /* FTupleBoolBlock.m */; };
-		CBA82B32238E09AEFD8939EAEA855646 /* env_posix.cc in Sources */ = {isa = PBXBuildFile; fileRef = A2D25B8664C78BB8A4AAAF6FA3EF21AB /* env_posix.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
-		CBC9592C21A1A9DEAA3C3953C198354E /* pb_encode.h in Headers */ = {isa = PBXBuildFile; fileRef = 541C1635CF2ACAB31B12B3FD9367089D /* pb_encode.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		CBCA7426005DB9BB0ADAE6326E4CC0E1 /* FIRComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = B376CAF865729E1CF465CFCCA52115D9 /* FIRComponent.m */; };
-		CBF64DE8DF849F4CF5E27D6BB749E2FC /* FTupleOnDisconnect.h in Headers */ = {isa = PBXBuildFile; fileRef = 6266F0F67AE31067A90DDC828E91BFB1 /* FTupleOnDisconnect.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		CCC75B000A3E179DEA8088BA34DB743B /* FTuplePathValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F69F234C57436B1A1499CE33ED96AAA /* FTuplePathValue.m */; };
-		CCE81C520CE25D15FDBA09D537AFF746 /* FirebaseCoreDiagnostics-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C8ADE11EC03AF033C186B754146EB29F /* FirebaseCoreDiagnostics-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		CE649478AFA1F9ADA8924C1D1598400F /* GULLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = CB03CAD9E17D96C89C856908211FD5AB /* GULLogger.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		CEA524769B166ED5FC36B6E9FA0B041D /* comparator.h in Headers */ = {isa = PBXBuildFile; fileRef = 98F196A197AFD44C0C2A0FB7E9BACF4C /* comparator.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		CEB003A648ED9530DED6E090307C484B /* format.h in Headers */ = {isa = PBXBuildFile; fileRef = 72EB4F6047A67ABF94B6F8BA86D2D234 /* format.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		CEE535DF3E8CA25232B7387253975836 /* GDTCORUploadPackage.m in Sources */ = {isa = PBXBuildFile; fileRef = 64705E8D19B8D928285A3720DB0206AE /* GDTCORUploadPackage.m */; };
-		CF911D7374D087D44CC4AAEFA75725E8 /* FIRDiagnosticsData.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B25CE4BCD165FCACCCB347BE5C627FA /* FIRDiagnosticsData.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		CF948DD801C7F1000C5484B956587B3C /* GDTCORFlatFileStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = C10C6020EDDB2016BD64181B672CBC2C /* GDTCORFlatFileStorage.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		CFF003B36714BB84CCABFD01A374DEF7 /* FIRNoopAuthTokenProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F2ED88980ADD02F9CD95D5F802803F1 /* FIRNoopAuthTokenProvider.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		D068F02A0E7724FE1BB37E66983C3E90 /* block_builder.cc in Sources */ = {isa = PBXBuildFile; fileRef = 6EB5D83F05D2269F33466C7DCFCD26A0 /* block_builder.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
-		D179BDCEA10E68B3BEC247D80C2629E1 /* GoogleUtilities-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 23C1A4E1F44845DC103D917C703A455A /* GoogleUtilities-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		D1A080CA4394BF24FA7EE1F4D9FE6C06 /* FSnapshotHolder.m in Sources */ = {isa = PBXBuildFile; fileRef = 35EAD172ED92244F64C80D04A17BDE79 /* FSnapshotHolder.m */; };
-		D1F20049C9573F35B5B8925149A6D382 /* db_impl.cc in Sources */ = {isa = PBXBuildFile; fileRef = 569511E399F07ABE1A4CBB713DF08B7B /* db_impl.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
-		D22F0143382C701C65528F14BBF6F3A3 /* GULHeartbeatDateStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC5E8282CA57B988CA60B91846B3AB9 /* GULHeartbeatDateStorage.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		D260EB226C838D723F36960F519FA36A /* FSRWebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E1C4E4A64421A0A894E0DDA64147BDD /* FSRWebSocket.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		D2B8D11353EE71C28309AD98487B8F89 /* cache.h in Headers */ = {isa = PBXBuildFile; fileRef = A3823B10AD6A6B24863EBD4ECE0D691C /* cache.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		D2F2DD920168057066470E3B831DE30C /* db.h in Headers */ = {isa = PBXBuildFile; fileRef = 621D483E45E92BE126C17E8261A0E6FA /* db.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		D312D681EDBEB8E36664C1DEB29425FD /* FTupleObjects.h in Headers */ = {isa = PBXBuildFile; fileRef = 38A43235156A1459847105BB4F2B300D /* FTupleObjects.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		D38250CC0ABA2279901BE2CE4615E1BC /* FIRComponentContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 301F5A9AE16774CF0D41657DAD925B78 /* FIRComponentContainer.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		D3AA7BFC4F1811139A87AED29C65B568 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C3C1EB539A57B6F7CBF5F5F61AEC46A /* Foundation.framework */; };
-		D3EF13736C1E7C79191294C5C6AFE061 /* FIRApp.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C73EAF4D8A7A12724B8D66F3FB39624 /* FIRApp.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		D4956895D64F9FC87662AB74344D45FA /* FUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = B423C55EDD8B0EBA1C93A2C48DD3B22B /* FUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		D52AFA8E3FBCEC394CDC82379FE88B52 /* FIRTransactionResult_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EA42623F573679F9A5B044DF94A4DDA6 /* FIRTransactionResult_Private.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		D54C12CCD45AD385ADA492A74CCFCE47 /* FMerge.m in Sources */ = {isa = PBXBuildFile; fileRef = B781D7A58A91FBED1BE497CD9B527741 /* FMerge.m */; };
-		D563DF007CB1939F99BC90947D9D8678 /* FCancelEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BAE9DB2B881172814343BCA44C7BC98 /* FCancelEvent.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		D5EBF5BEB2D1AD674AF8B08215FE9A09 /* FStringUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 975D7F0C4BD02609E2E89C0BDB223652 /* FStringUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		D6B664412AE127A4AC23D401920FEB09 /* GDTCORUploadPackage.h in Headers */ = {isa = PBXBuildFile; fileRef = EC794BDF881104077CA6D858C004F116 /* GDTCORUploadPackage.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		D6D52B1DF78845B91144E2C6CCD5C62E /* FIRDatabase.m in Sources */ = {isa = PBXBuildFile; fileRef = 30D3A7460028A9EA81EADFC2C2A322F8 /* FIRDatabase.m */; };
-		D71A9029947DDB7C7445FC4B406652A8 /* builder.h in Headers */ = {isa = PBXBuildFile; fileRef = 673B1B561ACB418F330B4478AE33C9F3 /* builder.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		D806CC0D12BBBE72304FF80125CFFB95 /* FSyncTree.h in Headers */ = {isa = PBXBuildFile; fileRef = FC1EFE2DCD55CE417891AFDE45E7C27A /* FSyncTree.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		D87DEFF98E5A8549450A1851FC4987AA /* pb_common.h in Headers */ = {isa = PBXBuildFile; fileRef = 37991EF098780E2D9FBD3B42EA8175D3 /* pb_common.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		D8A5DE27DCB5E12927641DB568623146 /* FPersistentConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = E2B8A272C8F2DE84AE5BEE68D7C5A30F /* FPersistentConnection.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		D8D511258397444B99E83CE98266F4B8 /* FMerge.h in Headers */ = {isa = PBXBuildFile; fileRef = 95EDE74C6DE1F87EE3663A0AD366B7B5 /* FMerge.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		D90F58C9020028273163366EE06B6ADE /* FRangedFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EF34E159FC9FB47A99C6BA51BBFA12D /* FRangedFilter.m */; };
-		D94829308831E45ECE321B5BA370D635 /* FBLPromise+Validate.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ADE589487EE027BD9C1EBD727FC2E9E /* FBLPromise+Validate.m */; };
-		DA396B909B86FC5569879519A6FE8E22 /* FIRDatabaseQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 50F19DE27755B2D81E7D4874D093FB38 /* FIRDatabaseQuery.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		DAAEA152388F6C52245AA64E442D05FC /* FTuplePathValue.h in Headers */ = {isa = PBXBuildFile; fileRef = C2760200A696A747EB2BB8996E5F37C0 /* FTuplePathValue.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		DB79E37CCB8545B7EE8831773E26CFDF /* GDTCORUploadCoordinator.h in Headers */ = {isa = PBXBuildFile; fileRef = A0CDEC73746A123B250DF34810E0C957 /* GDTCORUploadCoordinator.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		DB89733216DE2D40031AE2F5CABAB31F /* FBLPromise+Testing.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 98FC3E75806D347BDE1998F9D6F7924D /* FBLPromise+Testing.h */; };
-		DBAF982DF23404E0B19A86076B64C05D /* log_format.h in Headers */ = {isa = PBXBuildFile; fileRef = 4321B4C224765D94C7503E3C6431F9B9 /* log_format.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		DC00B8BAC2B87B7A3367D24EA0DB1B6C /* GoogleDataTransport-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3275B1466A10C59A57FA855C3AC6DECD /* GoogleDataTransport-dummy.m */; };
-		DC58F5895F8BCD218A84F9054BC3E86C /* GDTCOREvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C3685222F5D9D2662CE36EF1DF7D307 /* GDTCOREvent.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		DC6E0025FB91F7FADFCD8770AA001155 /* FListenComplete.m in Sources */ = {isa = PBXBuildFile; fileRef = 1823A9ACE2C8152C1B82264C89EE7A22 /* FListenComplete.m */; };
-		DDAB6756EE8FE818CB93EB1A9D952A4D /* FirebaseDatabase-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E090AC85D60368344DE2CF202EDFBFE3 /* FirebaseDatabase-dummy.m */; };
-		DDF72157B0D446D7EF4A6D0367B053B8 /* block.h in Headers */ = {isa = PBXBuildFile; fileRef = EBA7E6C2A107483467C6124774CEF75D /* block.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		DE93F4E12CDA7FC6357259A718B1C5A4 /* GULAppEnvironmentUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 95D786CDC75102E908AC12A8FCEC111A /* GULAppEnvironmentUtil.m */; };
-		DE955B63B64F324BD5B137F172790A3F /* iterator.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3C38FD08C4002E8A3E088547DD0523ED /* iterator.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
-		DFAD176ADA312BEA0529E7B838FDBCFB /* GDTCORClock.m in Sources */ = {isa = PBXBuildFile; fileRef = 78AE048F46E327022930DDCA71CF3271 /* GDTCORClock.m */; };
-		DFDC2EED29D814BDB23DD0A4F7CEAE91 /* FBLPromise.m in Sources */ = {isa = PBXBuildFile; fileRef = 4860AAD628A98E1A707FF827FF3AF9E9 /* FBLPromise.m */; };
-		E054D4F5671FCE00657213A710EA8CF0 /* FBLPromise.h in Headers */ = {isa = PBXBuildFile; fileRef = 87A11B9808FEF3BD00DEAAF8F1F7A1E8 /* FBLPromise.h */; };
-		E19AC8F914674DC90C18FCADD666D857 /* FIRComponentContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D07B68D86353EF71AF26AD8633ED011 /* FIRComponentContainer.m */; };
-		E27395E133228033F2BC45F49F521CD9 /* FIRBundleUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = AAF98DB258436A94B5CFFCB168CA4E11 /* FIRBundleUtil.m */; };
-		E3AD662787E8CC55CC07DABB793339B9 /* NSData+SRB64Additions.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FFA595A6BC21A8745A22CAC7C9C9678 /* NSData+SRB64Additions.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		E3C6D1B6BBDD0166C8F655ED945C880C /* firebasecore.nanopb.c in Sources */ = {isa = PBXBuildFile; fileRef = 19E1B93177BA8A0D2F8885B9BFF9D994 /* firebasecore.nanopb.c */; };
-		E3D6CE7A26373CE27EA2F2758B2D4150 /* FIRDatabaseConfig_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 955193171396A5F7FDA4F76ECCAEAC78 /* FIRDatabaseConfig_Private.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		E40EC66CF2490B6FC9306FB9368DC6C0 /* filter_policy.h in Headers */ = {isa = PBXBuildFile; fileRef = 3FDA53CDBFCA82B7F7184B44BC7FBC7C /* filter_policy.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		E6715A42C554FAEF8EB27F36E877CA20 /* table.cc in Sources */ = {isa = PBXBuildFile; fileRef = 794FB584900DC2C9932AC53A681FF10C /* table.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
-		E6775BF598A27C32D40B1DCA108C595A /* cct.nanopb.c in Sources */ = {isa = PBXBuildFile; fileRef = E9558FB6E3417EEB6ACC4BAC9665F3A6 /* cct.nanopb.c */; };
-		E6B16206329066116FE37EE1220DF3C2 /* FBLPromise+Retry.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = D2A24B05955F1EE99EBC76E88971F2D8 /* FBLPromise+Retry.h */; };
-		E6B5EE50C0455FC011163FDB310BD3AB /* FTupleStringNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D6D098D6D2D89BD890B660DDC02B2C5 /* FTupleStringNode.m */; };
-		E7157FF950C22E9D530BCE35DB1B7B9D /* FTupleTransaction.m in Sources */ = {isa = PBXBuildFile; fileRef = B5182676AC9060524937E8799614DFAC /* FTupleTransaction.m */; };
-		E80BFE452CF64B1A92B59699AAA3FBBD /* GDTCORAssert.h in Headers */ = {isa = PBXBuildFile; fileRef = BBE58D8C7B4DF5B650E6528061BAF00C /* GDTCORAssert.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		E8BB147D613CF877470C822F05E42DFD /* GDTCCTPrioritizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E328AFED73206DE3C41B2F236188BAA /* GDTCCTPrioritizer.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		E9267477B2E0A130107F04B268914775 /* FIRComponentType.m in Sources */ = {isa = PBXBuildFile; fileRef = D95FFC4B09BC1ED974D778A5C00737B1 /* FIRComponentType.m */; };
-		E98AEA2493832610AD36E545FB8EF061 /* FNextPushId.h in Headers */ = {isa = PBXBuildFile; fileRef = E1FC5A36113AB7A7F53F63FA047F3B95 /* FNextPushId.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		E9D939A583E0F24A7AA009FB06342C44 /* FClock.h in Headers */ = {isa = PBXBuildFile; fileRef = 3EA2D82B72EC58BCC44AD8106CB4E716 /* FClock.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		E9E439558089E50E50FB264B2206CF34 /* FValueIndex.m in Sources */ = {isa = PBXBuildFile; fileRef = 8454AAD8C7BABB4D4FC9DC6D3F1FC788 /* FValueIndex.m */; };
-		E9EEB22091465F6135B7ECE0ED0A287E /* FPath.m in Sources */ = {isa = PBXBuildFile; fileRef = 43744D2FF04A8F6E07656E852E3190B2 /* FPath.m */; };
-		EA1E8453723787E846BF722D1313A31A /* filename.h in Headers */ = {isa = PBXBuildFile; fileRef = 1942EA14A957EE8A1FD53150BCF5FC1E /* filename.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		EA4B84BFA49549860AB720711432D5FB /* FIRRetryHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = B33DBADEF735E61DC443B9753E707E98 /* FIRRetryHelper.m */; };
-		EA91FA2AA434FF82E02F1E5357C0CDEE /* FCacheNode.m in Sources */ = {isa = PBXBuildFile; fileRef = EC6B40288A57CC407F022CB43E26AAF1 /* FCacheNode.m */; };
-		EC4C01441144260658084EF24BB4FE3D /* nanopb-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 12AD2385ABCEF551C7DB322A63BDA8B6 /* nanopb-dummy.m */; };
-		EC64299425B5180EDF4E687B084C7A04 /* write_batch_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = DE08BA4A6C1A53923EC02F9A515107F8 /* write_batch_internal.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		ED1750A66B141E046BD9686F5840A055 /* filter_block.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2B470A9772DB8914D65302D7E669FDAF /* filter_block.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
-		ED55C0E5FE9C2F5E7782F82C6671DA37 /* repair.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8F89CFE3165AF36055F7014246855162 /* repair.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
-		ED565D95563F4B8C38042F390537F8BD /* PromisesObjC-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 47CD1AEAB4C797A6A730DB00DE47D9CB /* PromisesObjC-dummy.m */; };
-		ED781FD0390EF8635A826B3B14C440CC /* GDTCORAssert.m in Sources */ = {isa = PBXBuildFile; fileRef = 94828B387C56139BACCCEDC781E42B5B /* GDTCORAssert.m */; };
-		EE2CFDF3946068BE4CA5824235CC15B6 /* GDTCORRegistrar.m in Sources */ = {isa = PBXBuildFile; fileRef = F4DC65C04D076732C25AE29A2908DF95 /* GDTCORRegistrar.m */; };
-		EEF056693CD4BFDEFDCDF74271D1682B /* FArraySortedDictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FB6A055AAC08E126DD875D10F1681BE /* FArraySortedDictionary.m */; };
-		EF101A4A352EAF4EDE9A0F75DC37AAEC /* FTreeSortedDictionaryEnumerator.h in Headers */ = {isa = PBXBuildFile; fileRef = A9D70C09F8DDD9DFB26AC7F97FAB70ED /* FTreeSortedDictionaryEnumerator.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		EF47B845839E293A5AF11EF2F7946CC8 /* FIRDependency.m in Sources */ = {isa = PBXBuildFile; fileRef = 873B2D52C27790E76C58F17E637447EA /* FIRDependency.m */; };
-		EF84EEE29E8E694C0B5352DC64618DBC /* skiplist.h in Headers */ = {isa = PBXBuildFile; fileRef = 15DFFF5A3D3D914F480B877952EFAFBD /* skiplist.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		F0F32B4EEF9319CAE2FD9492C961AD46 /* arena.h in Headers */ = {isa = PBXBuildFile; fileRef = B9D7744ACAB828228094C7FE549D9408 /* arena.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		F12D3A396FD4AFB5E00C6DB18698306B /* FTrackedQueryManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F1EA207BC255E9BA95DB0C99A876B3 /* FTrackedQueryManager.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		F1ADBEBF87EDAC904CFE9724211D4D55 /* FBLPromise+Async.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E5714B2DDE9933EA30C49F766B5E69A /* FBLPromise+Async.h */; };
-		F2334D62F8ADA1D46807BB5F10F7F71C /* GDTCORPlatform.m in Sources */ = {isa = PBXBuildFile; fileRef = B2A6FBBC1582B73F699D2622665AD418 /* GDTCORPlatform.m */; };
-		F30E60AFC01B39D14ABC67D9949E7996 /* PromisesObjC-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 394D1BEAD6AA9B9EFDBAA0EAAB06D478 /* PromisesObjC-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		F382F5EE61B5A56B06F26BE8C4E98657 /* FStorageEngine.h in Headers */ = {isa = PBXBuildFile; fileRef = 59F59F63C4615D2ABBA8D3688DE5C1A2 /* FStorageEngine.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		F42B8685FA5C3492C6D5C7B606BCD01E /* FBLPromisePrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 83AD72E6FF9339276439BA4350ABDA13 /* FBLPromisePrivate.h */; };
-		F48022BCC822C16AF2D17202FEE170F3 /* GDTCORRegistrar_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D9C044CDB58F661488097BB87AF131F0 /* GDTCORRegistrar_Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		F52BE9EA5A6FA30AD7591AA7243324B6 /* FTree.m in Sources */ = {isa = PBXBuildFile; fileRef = F8514701493814AB84C06709B66B8991 /* FTree.m */; };
-		F5B003C652AC2DE5B5FAF1CD8026F51F /* coding.cc in Sources */ = {isa = PBXBuildFile; fileRef = E4CF0D1BCDD54ABB40EE9AD5F541C198 /* coding.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
-		F61055D1ACAD3A04A2E02885B9E5428E /* FArraySortedDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = 77C24E7828CDD9A00B0A92ECEB5CFDB0 /* FArraySortedDictionary.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		F68771A6212458CF307A3A236AA3CC2E /* logging.cc in Sources */ = {isa = PBXBuildFile; fileRef = E0B7CD0C231C6586963B625078141F9B /* logging.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
-		F6B3E03523BAFADB7293332CE15F6B35 /* FIRConfigurationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 914AA32349DFFE43B88FD2C41C2E3880 /* FIRConfigurationInternal.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		F7F640FAEB3616081ADA43308E65F784 /* FIRDatabaseConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = B1AEACA1BDF2D31AC8B5E8D8883CD1CA /* FIRDatabaseConfig.m */; };
-		F8ECC6E59188EE721B9AC5C2EC1C4C4F /* FBLPromise+Always.h in Headers */ = {isa = PBXBuildFile; fileRef = F8FDB31CF6B1C1358EE35ADE19844DC7 /* FBLPromise+Always.h */; };
-		F9193842F4C05FA2AABF0EB1215B74AB /* FIRErrorCode.h in Headers */ = {isa = PBXBuildFile; fileRef = 2392A33D7F9C9CB28B956D731DA8F557 /* FIRErrorCode.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		F96DA5EE1BC259712FEB86A4E864D5C8 /* FSnapshotUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = C22C5C60494445166C096866D5BC162E /* FSnapshotUtilities.m */; };
-		F9FC3FD462F8BBAA08CFA4281BEDAA05 /* FPendingPut.h in Headers */ = {isa = PBXBuildFile; fileRef = 460A5884CBCEBDCCDD70D08A0D2EE516 /* FPendingPut.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		FAA990BC4EB21DBA7A5B4C96DD13C0BA /* testharness.h in Headers */ = {isa = PBXBuildFile; fileRef = B25E09C5A052F1C3A6AE26E97F071ED2 /* testharness.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		FBDC3E3A58C6FABFD180549A49CF313E /* FValidation.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D049B599CD35B1EBCCFB40378A858E0 /* FValidation.m */; };
-		FD35B35ABAF436987B500776F6D1CCF6 /* FSRWebSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 45EAA633A2105904DF70B93DB59F865A /* FSRWebSocket.m */; };
-		FD9FFF2F68300DC16B9A1A9F20F816B2 /* FWebSocketConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B380EF7F940448A641CDF3A87516109 /* FWebSocketConnection.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		FEEC3CEC5F56947B1E9391C9FDD24D1F /* Pods-openTok-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B87707E352D3B5520BAD0A84C358DC8 /* Pods-openTok-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		FF8265E682F5B31C4127924028A5C92E /* FPersistentConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = CB4A191F4483E65DD757ECF72435553C /* FPersistentConnection.m */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXContainerItemProxy section */
-		0C3750C14BFEE6DCB91698B371188BD1 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 736AF68F6527ACF6B4A4C54728824A1C;
-			remoteInfo = FirebaseDatabase;
-		};
-		16E1CC5892022AC6D93441FE0947BE52 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 5EB4B0B6DA6D5C0C3365733BEAA1C485;
-			remoteInfo = FirebaseCoreDiagnosticsInterop;
-		};
-		17A83CD745ED9427888166B74CCA8AA6 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 736AF68F6527ACF6B4A4C54728824A1C;
-			remoteInfo = FirebaseDatabase;
-		};
-		3526AE8FAA4DD630EC08B2BF0649B0D3 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = F4F25FCAC51B51FD5F986EB939BF1F87;
-			remoteInfo = GoogleDataTransportCCTSupport;
-		};
-		3D48395263091A504DA16225B783026E /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 5C0371EE948D0357B8EE0E34ABB44BF0;
-			remoteInfo = GoogleDataTransport;
-		};
-		3D7F773867E49CB7532EFACCAC2F1714 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 5EB4B0B6DA6D5C0C3365733BEAA1C485;
-			remoteInfo = FirebaseCoreDiagnosticsInterop;
-		};
-		453F6F4B3941F2DDC491BA016BEFCC56 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 4402AFF83DBDC4DD07E198685FDC2DF2;
-			remoteInfo = FirebaseCore;
-		};
-		47EA61FDD7BE25B0A48F212E5DE80D99 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 8EC0F2618965C875A96BFDBEE5D9734C;
-			remoteInfo = FirebaseAuthInterop;
-		};
-		52EF848D791FD6DDA402C00E55148A89 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 5EB4B0B6DA6D5C0C3365733BEAA1C485;
-			remoteInfo = FirebaseCoreDiagnosticsInterop;
-		};
-		53B79F606CFFAA47F665B32E8F9C490A /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 620E05868772C10B4920DC7E324F2C87;
-			remoteInfo = FirebaseCoreDiagnostics;
-		};
-		57A4993B3210E1A73A547FE58FDFC4CA /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 4402AFF83DBDC4DD07E198685FDC2DF2;
-			remoteInfo = FirebaseCore;
-		};
-		59C4EFE1F72233CA5B8C02CAC2E6BEA5 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 2BBF7206D7FAC92C82A042A99C4A98F8;
-			remoteInfo = PromisesObjC;
-		};
-		783C76F76F51EC5DD0E2D622915C4850 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = D2B5E7DCCBBFB32341D857D01211A1A3;
-			remoteInfo = nanopb;
-		};
-		7B60E879A1FD2B8A4E3F3B9B1CFC00B9 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 2BBF7206D7FAC92C82A042A99C4A98F8;
-			remoteInfo = PromisesObjC;
-		};
-		7C4ADE3DDF4CD2F8B1EB81B93C8ABE5F /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 8D7F5D5DD528D21A72DC87ADA5B12E2D;
-			remoteInfo = GoogleUtilities;
-		};
-		7F91E721DFEDFBB5E30593902EB52CE4 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 620E05868772C10B4920DC7E324F2C87;
-			remoteInfo = FirebaseCoreDiagnostics;
-		};
-		8942FC65F5D10C793A3EF698556652F5 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 8EC0F2618965C875A96BFDBEE5D9734C;
-			remoteInfo = FirebaseAuthInterop;
-		};
-		A95D6AA02759E76DD3232368EC9FA7F1 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 5C0371EE948D0357B8EE0E34ABB44BF0;
-			remoteInfo = GoogleDataTransport;
-		};
-		ADA3739072A1821D42EB71A7617E24FD /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = F4F25FCAC51B51FD5F986EB939BF1F87;
-			remoteInfo = GoogleDataTransportCCTSupport;
-		};
-		B085E5DE0E10CF6717C5962F9C615468 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 8D7F5D5DD528D21A72DC87ADA5B12E2D;
-			remoteInfo = GoogleUtilities;
-		};
-		B60388A49AD55B2CAE0D5EE55C2F0BAA /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 9307B7A119490930CF70393AB529AAC1;
-			remoteInfo = "leveldb-library";
-		};
-		B8337BC1105FE08969FAB5579066DFEC /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 8D7F5D5DD528D21A72DC87ADA5B12E2D;
-			remoteInfo = GoogleUtilities;
-		};
-		B85683E36FDD2784B99A2DC92732182A /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = D2B5E7DCCBBFB32341D857D01211A1A3;
-			remoteInfo = nanopb;
-		};
-		C61D3141DC2127BA7701380C913ECBAC /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 9307B7A119490930CF70393AB529AAC1;
-			remoteInfo = "leveldb-library";
-		};
-		EE2C7655BA40D7BB4854DF3E8E05AB46 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = D2B5E7DCCBBFB32341D857D01211A1A3;
-			remoteInfo = nanopb;
-		};
-		FD085A011A569371BA35C6F802B3758F /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 4402AFF83DBDC4DD07E198685FDC2DF2;
-			remoteInfo = FirebaseCore;
-		};
-		FE00ED7FF4D83C4A11CDB1C602DD4DB9 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 072CEA044D2EF26F03496D5996BBF59F;
-			remoteInfo = Firebase;
-		};
-/* End PBXContainerItemProxy section */
-
-/* Begin PBXCopyFilesBuildPhase section */
-		342034DA9FFE74C862EB3037761FED1A /* Copy . Private Headers */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "$(PRIVATE_HEADERS_FOLDER_PATH)/.";
-			dstSubfolderSpec = 16;
-			files = (
-				2A5280DC4E951A91563235956880C2C9 /* FBLPromisePrivate.h in Copy . Private Headers */,
-			);
-			name = "Copy . Private Headers";
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		D22D6CC9B78A3B46B528EE4DF61DFADC /* Copy . Public Headers */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "$(PUBLIC_HEADERS_FOLDER_PATH)/.";
-			dstSubfolderSpec = 16;
-			files = (
-				3C314BBEE5CB4C12086B625B62473B77 /* FBLPromise+All.h in Copy . Public Headers */,
-				401F125256DE8121A6B94E169FFBF98B /* FBLPromise+Always.h in Copy . Public Headers */,
-				62990D2BB6C4C0DDD3CD1848667C6388 /* FBLPromise+Any.h in Copy . Public Headers */,
-				8F09F46C97F3D1719E79448426D90B88 /* FBLPromise+Async.h in Copy . Public Headers */,
-				AA11D72BE245291456CCB9C76F81AF67 /* FBLPromise+Await.h in Copy . Public Headers */,
-				79738317AEFE3E41A8478317CBAE9857 /* FBLPromise+Catch.h in Copy . Public Headers */,
-				8B768C3E4BBABB6AB30C627C17A6D8CB /* FBLPromise+Delay.h in Copy . Public Headers */,
-				CA46156BB5C577F8BB7A3844B182E3BB /* FBLPromise+Do.h in Copy . Public Headers */,
-				849FAADFAA2CDF0E00587B785C3A25B6 /* FBLPromise+Race.h in Copy . Public Headers */,
-				714FC27A789BAFB9847D2AC476F65A51 /* FBLPromise+Recover.h in Copy . Public Headers */,
-				2CE28A088EBEA9D0D1F0F97DF716A275 /* FBLPromise+Reduce.h in Copy . Public Headers */,
-				E6B16206329066116FE37EE1220DF3C2 /* FBLPromise+Retry.h in Copy . Public Headers */,
-				DB89733216DE2D40031AE2F5CABAB31F /* FBLPromise+Testing.h in Copy . Public Headers */,
-				206954412978B5B20D9BDD19FA7D005A /* FBLPromise+Then.h in Copy . Public Headers */,
-				1C0C2E325B5B0967FD788E20393E1651 /* FBLPromise+Timeout.h in Copy . Public Headers */,
-				664B0232A289CCBBBCABF3F6C8177BDB /* FBLPromise+Validate.h in Copy . Public Headers */,
-				93C4DC49847D79F57FE9081C860C838A /* FBLPromise+Wrap.h in Copy . Public Headers */,
-				78F88029EAA27CCBFFE43A944B455A24 /* FBLPromise.h in Copy . Public Headers */,
-				52F492F288C85C2A28527E4B6C9B4E07 /* FBLPromiseError.h in Copy . Public Headers */,
-				97A79F93977B5D83B4B24AADC6E55F99 /* FBLPromises.h in Copy . Public Headers */,
-			);
-			name = "Copy . Public Headers";
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXCopyFilesBuildPhase section */
-
-/* Begin PBXFileReference section */
-		0180C3C1B654EF6C601C67697BC4EC62 /* FSnapshotHolder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSnapshotHolder.h; path = Firebase/Database/Core/FSnapshotHolder.h; sourceTree = "<group>"; };
-		026599AE480DD91768D8F683E59FE6CC /* FViewProcessorResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FViewProcessorResult.h; path = Firebase/Database/FViewProcessorResult.h; sourceTree = "<group>"; };
-		02FF0A3B1C66CF58CBF6ED0DA70E2CF2 /* leveldb-library.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "leveldb-library.modulemap"; sourceTree = "<group>"; };
-		0496F85216D9C79A563C82C7CDB45620 /* FBLPromiseError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBLPromiseError.m; path = Sources/FBLPromises/FBLPromiseError.m; sourceTree = "<group>"; };
-		04F745AE9D062907C9D1CDD8FCCA4A43 /* nanopb.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = nanopb.modulemap; sourceTree = "<group>"; };
-		052D1A59D81CF3189CCE9443B2F2ADE7 /* FIRDatabaseReference_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDatabaseReference_Private.h; path = Firebase/Database/Api/Private/FIRDatabaseReference_Private.h; sourceTree = "<group>"; };
-		0541259BE7A9475648BF4DC718F6F409 /* FLeafNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLeafNode.h; path = Firebase/Database/Snapshot/FLeafNode.h; sourceTree = "<group>"; };
-		057F550138403A0C7FD68032C21A0E20 /* GDTCORUploadCoordinator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORUploadCoordinator.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORUploadCoordinator.m; sourceTree = "<group>"; };
-		061A348B4063578DACB2E0C334E75E2E /* FIRLoggerLevel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRLoggerLevel.h; path = FirebaseCore/Sources/Public/FIRLoggerLevel.h; sourceTree = "<group>"; };
-		0639F28CB196245922C7D8D3836E0964 /* FIRCoreDiagnostics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCoreDiagnostics.m; path = Firebase/CoreDiagnostics/FIRCDLibrary/FIRCoreDiagnostics.m; sourceTree = "<group>"; };
-		066378BC5E55BCFB87BFFC5EDAFA4B99 /* FListenProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FListenProvider.m; path = Firebase/Database/Core/FListenProvider.m; sourceTree = "<group>"; };
-		06EC7B364270EE75563BEB149A98E2DC /* GULLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULLogger.m; path = GoogleUtilities/Logger/GULLogger.m; sourceTree = "<group>"; };
-		06FC5C9CF96D60C50FCD47D339C91951 /* nanopb.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = nanopb.framework; path = nanopb.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-		072544F03E5AE2F64EF237E82D81D545 /* FBLPromise+Await.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Await.h"; path = "Sources/FBLPromises/include/FBLPromise+Await.h"; sourceTree = "<group>"; };
-		076B0F9655C1D328103BF4CFB4F0E0EC /* Pods-openTok-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-openTok-acknowledgements.markdown"; sourceTree = "<group>"; };
-		080B6ED2BE515044B2F811627F849632 /* GDTCCTNanopbHelpers.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCCTNanopbHelpers.m; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTNanopbHelpers.m; sourceTree = "<group>"; };
-		083D3597C0190CB5D637CC9EE15579C8 /* env_windows_test_helper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = env_windows_test_helper.h; path = util/env_windows_test_helper.h; sourceTree = "<group>"; };
-		088E9D65F0C3C763F8B1466BDCCEAEED /* GDTCORTransformer_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORTransformer_Private.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransformer_Private.h; sourceTree = "<group>"; };
-		08B4449BD6E520A4C1E8BE42FFE7BAA1 /* FTupleRemovedQueriesEvents.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleRemovedQueriesEvents.h; path = Firebase/Database/Utilities/Tuples/FTupleRemovedQueriesEvents.h; sourceTree = "<group>"; };
-		09306EA07C5E6C3D3EB420111146C811 /* FIRMutableData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMutableData.m; path = Firebase/Database/Api/FIRMutableData.m; sourceTree = "<group>"; };
-		097A95430769429A66795E9E6AC6450A /* FNamedNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FNamedNode.h; path = Firebase/Database/FNamedNode.h; sourceTree = "<group>"; };
-		0A186237A208BD1CF32D3CDD83B8CAF2 /* leveldb-library-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "leveldb-library-dummy.m"; sourceTree = "<group>"; };
-		0A9F46A999C47653013D3AD854352507 /* leveldb.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = leveldb.framework; path = "leveldb-library.framework"; sourceTree = BUILT_PRODUCTS_DIR; };
-		0AC4A9BC66B8D2CD0D2CB7874781F3E5 /* GDTCCTUploader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCCTUploader.h; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTUploader.h; sourceTree = "<group>"; };
-		0B3E8D29A38AED64881329262599A505 /* GoogleDataTransportCCTSupport-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "GoogleDataTransportCCTSupport-Info.plist"; sourceTree = "<group>"; };
-		0B4C64BD56CF6985E80B66695B59DF88 /* GULKeychainUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULKeychainUtils.m; path = GoogleUtilities/Environment/SecureStorage/GULKeychainUtils.m; sourceTree = "<group>"; };
-		0B51796ECD501253EDB5FCF8F42BCF07 /* FIRTransactionResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRTransactionResult.m; path = Firebase/Database/Api/FIRTransactionResult.m; sourceTree = "<group>"; };
-		0BAC11B5BD73140CC06EBFFB33C6E3E4 /* GDTCORTransformer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORTransformer.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransformer.h; sourceTree = "<group>"; };
-		0BD62334D7DD704E7183CB5CD05D5FEF /* FAuthTokenProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FAuthTokenProvider.h; path = Firebase/Database/Login/FAuthTokenProvider.h; sourceTree = "<group>"; };
-		0C6CB77E47E775AC8AC2B8FE8C3C1874 /* nanopb-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "nanopb-prefix.pch"; sourceTree = "<group>"; };
-		0D46DA763E703DDDB7846A3B498EA469 /* Pods-openTok.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-openTok.debug.xcconfig"; sourceTree = "<group>"; };
-		0D5A4DB629B5B17E2F7AB448096A4572 /* FImmutableSortedSet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FImmutableSortedSet.m; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedSet.m; sourceTree = "<group>"; };
-		0E14920ECDB2908894AFBB2FDC931F02 /* GULSecureCoding.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULSecureCoding.h; path = GoogleUtilities/Environment/Public/GULSecureCoding.h; sourceTree = "<group>"; };
-		0E5714B2DDE9933EA30C49F766B5E69A /* FBLPromise+Async.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Async.h"; path = "Sources/FBLPromises/include/FBLPromise+Async.h"; sourceTree = "<group>"; };
-		0E8161CED1C17230153CB59CBAA2ABA9 /* FBLPromise+Any.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Any.h"; path = "Sources/FBLPromises/include/FBLPromise+Any.h"; sourceTree = "<group>"; };
-		0EF03490A41396D7B4FB796D16239538 /* GDTCORLifecycle.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORLifecycle.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORLifecycle.m; sourceTree = "<group>"; };
-		102352296297C117CC7869815C0B18C2 /* FEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FEvent.h; path = Firebase/Database/Core/View/FEvent.h; sourceTree = "<group>"; };
-		1135C43506403E886D86BDFF9D1CC4A5 /* FAtomicNumber.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FAtomicNumber.m; path = Firebase/Database/Utilities/FAtomicNumber.m; sourceTree = "<group>"; };
-		11480D63F4E0BD36E1D198F5A9A73FB2 /* FSyncPoint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSyncPoint.h; path = Firebase/Database/Core/FSyncPoint.h; sourceTree = "<group>"; };
-		119F6DBEC2830D0007421DCE8BF46135 /* FirebaseCoreDiagnostics-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FirebaseCoreDiagnostics-dummy.m"; sourceTree = "<group>"; };
-		11BE64F7B2DF4B6B01EDEE2BB90359CE /* FTupleFirebase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleFirebase.h; path = Firebase/Database/Utilities/Tuples/FTupleFirebase.h; sourceTree = "<group>"; };
-		11E7D6789B496C8DAF72B8FF1F569778 /* FPersistenceManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FPersistenceManager.m; path = Firebase/Database/Persistence/FPersistenceManager.m; sourceTree = "<group>"; };
-		1248B00EF3BE8EB5FDF7E92EE8995ABF /* options.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = options.cc; path = util/options.cc; sourceTree = "<group>"; };
-		12AD2385ABCEF551C7DB322A63BDA8B6 /* nanopb-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "nanopb-dummy.m"; sourceTree = "<group>"; };
-		12F7E2F7B784439C5476A1EF8BD49AF0 /* GDTCOREvent+NetworkConnectionInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "GDTCOREvent+NetworkConnectionInfo.m"; path = "GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCOREvent+NetworkConnectionInfo.m"; sourceTree = "<group>"; };
-		1313113294676D69BB1A6FB6FC2AC8D9 /* GDTCORTargets.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORTargets.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORTargets.h; sourceTree = "<group>"; };
-		148C3A198D5DEC1D04F9AC25F9963A0F /* FirebaseDatabase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FirebaseDatabase.h; path = Firebase/Database/Public/FirebaseDatabase.h; sourceTree = "<group>"; };
-		14B5225C335FF4E58484DB38F7D71113 /* FView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FView.h; path = Firebase/Database/Core/View/FView.h; sourceTree = "<group>"; };
-		151EDA5ED0508649DD81C32BBAB5B133 /* FIRDatabaseConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDatabaseConfig.h; path = Firebase/Database/Api/FIRDatabaseConfig.h; sourceTree = "<group>"; };
-		15DFFF5A3D3D914F480B877952EFAFBD /* skiplist.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = skiplist.h; path = db/skiplist.h; sourceTree = "<group>"; };
-		1648A0F596A5947A31091A8D2A3F2DD5 /* FConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FConstants.h; path = Firebase/Database/Constants/FConstants.h; sourceTree = "<group>"; };
-		17A5FB2BB510D58010F5154CE559C2C3 /* Pods_openTok.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_openTok.framework; path = "Pods-openTok.framework"; sourceTree = BUILT_PRODUCTS_DIR; };
-		1823A9ACE2C8152C1B82264C89EE7A22 /* FListenComplete.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FListenComplete.m; path = Firebase/Database/FListenComplete.m; sourceTree = "<group>"; };
-		1891D121FC2FBC6537BC90D17D133401 /* FBLPromise+Await.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Await.m"; path = "Sources/FBLPromises/FBLPromise+Await.m"; sourceTree = "<group>"; };
-		18E5CB0D0571E1527E8DCD0C6A5690A7 /* FIndexedNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIndexedNode.h; path = Firebase/Database/Snapshot/FIndexedNode.h; sourceTree = "<group>"; };
-		193284F73773846AA3A34879EC56EF86 /* FOperationSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FOperationSource.h; path = Firebase/Database/Core/Operation/FOperationSource.h; sourceTree = "<group>"; };
-		1942EA14A957EE8A1FD53150BCF5FC1E /* filename.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = filename.h; path = db/filename.h; sourceTree = "<group>"; };
-		196DCB453BE1CEE606A4656ED3F3DCBB /* GDTCCTPrioritizer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCCTPrioritizer.m; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTPrioritizer.m; sourceTree = "<group>"; };
-		19E1B93177BA8A0D2F8885B9BFF9D994 /* firebasecore.nanopb.c */ = {isa = PBXFileReference; includeInIndex = 1; name = firebasecore.nanopb.c; path = Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.c; sourceTree = "<group>"; };
-		19E2FAFAF8471A64BF957711063D1E73 /* FSparseSnapshotTree.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSparseSnapshotTree.h; path = Firebase/Database/Core/FSparseSnapshotTree.h; sourceTree = "<group>"; };
-		1A2422E97EFCFEA1741CB84A57211468 /* FNamedNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FNamedNode.m; path = Firebase/Database/FNamedNode.m; sourceTree = "<group>"; };
-		1A2A620A27AF95651BEB93E9CE562A04 /* FIRMutableData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMutableData.h; path = Firebase/Database/Public/FIRMutableData.h; sourceTree = "<group>"; };
-		1ADE589487EE027BD9C1EBD727FC2E9E /* FBLPromise+Validate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Validate.m"; path = "Sources/FBLPromises/FBLPromise+Validate.m"; sourceTree = "<group>"; };
-		1B004F3F21ACD69E835051891AC01C17 /* FIRAuthInterop.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthInterop.h; path = Interop/Auth/Public/FIRAuthInterop.h; sourceTree = "<group>"; };
-		1B12871BB34F2EA4AC753A384DD80F71 /* FIRErrors.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRErrors.h; path = FirebaseCore/Sources/Private/FIRErrors.h; sourceTree = "<group>"; };
-		1B380EF7F940448A641CDF3A87516109 /* FWebSocketConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FWebSocketConnection.h; path = Firebase/Database/Realtime/FWebSocketConnection.h; sourceTree = "<group>"; };
-		1B54F40D4D8961A88689128664F1E34C /* GDTCORTransformer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORTransformer.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORTransformer.m; sourceTree = "<group>"; };
-		1BBD1F80252B16388D8A2E0DC2FC7D9E /* FEmptyNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FEmptyNode.h; path = Firebase/Database/Snapshot/FEmptyNode.h; sourceTree = "<group>"; };
-		1D07B68D86353EF71AF26AD8633ED011 /* FIRComponentContainer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRComponentContainer.m; path = FirebaseCore/Sources/FIRComponentContainer.m; sourceTree = "<group>"; };
-		1E1C4E4A64421A0A894E0DDA64147BDD /* FSRWebSocket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSRWebSocket.h; path = Firebase/Database/third_party/SocketRocket/FSRWebSocket.h; sourceTree = "<group>"; };
-		1EAE4B9FB26CEEA47D06DB17655CBB32 /* FirebaseCoreDiagnostics.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FirebaseCoreDiagnostics.modulemap; sourceTree = "<group>"; };
-		1EF34E159FC9FB47A99C6BA51BBFA12D /* FRangedFilter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FRangedFilter.m; path = Firebase/Database/FRangedFilter.m; sourceTree = "<group>"; };
-		1F51C701E1D20698B669E1172FD5E4CB /* FIRDiagnosticsData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRDiagnosticsData.m; path = FirebaseCore/Sources/FIRDiagnosticsData.m; sourceTree = "<group>"; };
-		1F616D4FBC71458933254CDA110C11CA /* GDTCOREvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCOREvent.m; path = GoogleDataTransport/GDTCORLibrary/GDTCOREvent.m; sourceTree = "<group>"; };
-		2085AB8AA9E4822704336873BF314E65 /* FWriteTreeRef.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FWriteTreeRef.m; path = Firebase/Database/Core/FWriteTreeRef.m; sourceTree = "<group>"; };
-		20A93D898B3FF479357C52053210F552 /* FLimitedFilter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLimitedFilter.m; path = Firebase/Database/Core/View/Filter/FLimitedFilter.m; sourceTree = "<group>"; };
-		218E7BC1C220924B1D6785CA4C25DC96 /* FSyncPoint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FSyncPoint.m; path = Firebase/Database/Core/FSyncPoint.m; sourceTree = "<group>"; };
-		21EDE18558B70D38E006596E26788D36 /* FEventEmitter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FEventEmitter.h; path = Firebase/Database/Utilities/FEventEmitter.h; sourceTree = "<group>"; };
-		2392A33D7F9C9CB28B956D731DA8F557 /* FIRErrorCode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRErrorCode.h; path = FirebaseCore/Sources/Private/FIRErrorCode.h; sourceTree = "<group>"; };
-		23C1A4E1F44845DC103D917C703A455A /* GoogleUtilities-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GoogleUtilities-umbrella.h"; sourceTree = "<group>"; };
-		23DF0DDD2310CC408B1DBE663F9C3CAA /* GDTCORDataFuture.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORDataFuture.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORDataFuture.m; sourceTree = "<group>"; };
-		24AD25CF950ACF35024D9FAC762DD3A3 /* FEventEmitter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FEventEmitter.m; path = Firebase/Database/Utilities/FEventEmitter.m; sourceTree = "<group>"; };
-		24C765C6EE99FAF5BDC49CFE9E15D8A5 /* Firebase.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Firebase.release.xcconfig; sourceTree = "<group>"; };
-		25581B666C44E4E2526DFBDCAF320168 /* FPriorityIndex.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FPriorityIndex.h; path = Firebase/Database/FPriorityIndex.h; sourceTree = "<group>"; };
-		25DCDEF8A7F32E0E3701AD90BC946FDD /* FQuerySpec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FQuerySpec.h; path = Firebase/Database/Core/FQuerySpec.h; sourceTree = "<group>"; };
-		25EBF5F50A964142282100BB3127D79D /* FIRConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRConfiguration.h; path = FirebaseCore/Sources/Public/FIRConfiguration.h; sourceTree = "<group>"; };
-		25F19CE11FB446E8B2C37D3F9C3B1BFC /* GoogleDataTransportCCTSupport.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleDataTransportCCTSupport.release.xcconfig; sourceTree = "<group>"; };
-		2601511FCCD0B4CE7A74652349B3779A /* db_iter.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = db_iter.cc; path = db/db_iter.cc; sourceTree = "<group>"; };
-		272A06E4DFA111E0A5504FF347BBF984 /* FBLPromise+Then.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Then.h"; path = "Sources/FBLPromises/include/FBLPromise+Then.h"; sourceTree = "<group>"; };
-		27B04C54C4F176938DD4A50E3DAD384D /* status.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = status.h; path = include/leveldb/status.h; sourceTree = "<group>"; };
-		27DA1AAEA65D58C03CF0B6628644FE95 /* Pods-openTok-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-openTok-frameworks.sh"; sourceTree = "<group>"; };
-		27F81C53060A8621A2223C2F50CD241B /* filter_block.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = filter_block.h; path = table/filter_block.h; sourceTree = "<group>"; };
-		2902A4C38873FCFF5786F23795F66406 /* port_stdcxx.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = port_stdcxx.h; path = port/port_stdcxx.h; sourceTree = "<group>"; };
-		29BD25E1380AF136F830D5ADC46CB53E /* FBLPromise+All.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+All.h"; path = "Sources/FBLPromises/include/FBLPromise+All.h"; sourceTree = "<group>"; };
-		2A0B383E88DBB23E8139375596467FAC /* log_writer.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = log_writer.cc; path = db/log_writer.cc; sourceTree = "<group>"; };
-		2AF11CCF6B730B0458E39354C36DB72A /* FCachePolicy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FCachePolicy.m; path = Firebase/Database/Persistence/FCachePolicy.m; sourceTree = "<group>"; };
-		2AF24CAB681011F26CE27B6CD0DA5E53 /* FWriteTreeRef.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FWriteTreeRef.h; path = Firebase/Database/Core/FWriteTreeRef.h; sourceTree = "<group>"; };
-		2B470A9772DB8914D65302D7E669FDAF /* filter_block.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = filter_block.cc; path = table/filter_block.cc; sourceTree = "<group>"; };
-		2C3685222F5D9D2662CE36EF1DF7D307 /* GDTCOREvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCOREvent.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCOREvent.h; sourceTree = "<group>"; };
-		2E86539022322DD1F5296F3214CEC49E /* log_writer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = log_writer.h; path = db/log_writer.h; sourceTree = "<group>"; };
-		2EB182B0C82CC8AEF45E12CE2FE0023A /* FQuerySpec.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FQuerySpec.m; path = Firebase/Database/Core/FQuerySpec.m; sourceTree = "<group>"; };
-		2F468A47D4B1484163852DBA4C01BDC2 /* FIRComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRComponent.h; path = FirebaseCore/Sources/Private/FIRComponent.h; sourceTree = "<group>"; };
-		2FB3B6224E0EA157E5E5C71782ADA330 /* version_set.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = version_set.cc; path = db/version_set.cc; sourceTree = "<group>"; };
-		2FD56C3309CCD46F670D5CC2DEA4B8F6 /* FCompoundHash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FCompoundHash.h; path = Firebase/Database/Core/FCompoundHash.h; sourceTree = "<group>"; };
-		2FE487E9D169B1987ED50BF7CA45AB85 /* table_cache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = table_cache.h; path = db/table_cache.h; sourceTree = "<group>"; };
-		301EA1964717D61EA78FF69CC56657C3 /* FLimitedFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLimitedFilter.h; path = Firebase/Database/Core/View/Filter/FLimitedFilter.h; sourceTree = "<group>"; };
-		301F5A9AE16774CF0D41657DAD925B78 /* FIRComponentContainer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRComponentContainer.h; path = FirebaseCore/Sources/Private/FIRComponentContainer.h; sourceTree = "<group>"; };
-		30798651CA0BD508AD85DC790BB2D9B1 /* FWebSocketConnection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FWebSocketConnection.m; path = Firebase/Database/Realtime/FWebSocketConnection.m; sourceTree = "<group>"; };
-		3096846386F3836A75FB794288AA257E /* GDTCORConsoleLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORConsoleLogger.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORConsoleLogger.m; sourceTree = "<group>"; };
-		30D3A7460028A9EA81EADFC2C2A322F8 /* FIRDatabase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRDatabase.m; path = Firebase/Database/Api/FIRDatabase.m; sourceTree = "<group>"; };
-		3144BEFF69AFAEDE619B25FE59B16969 /* GULLoggerLevel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULLoggerLevel.h; path = GoogleUtilities/Logger/Public/GULLoggerLevel.h; sourceTree = "<group>"; };
-		31965476AB0C9A0CA09E0AC2D405690B /* write_batch.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = write_batch.cc; path = db/write_batch.cc; sourceTree = "<group>"; };
-		31E464D7B81E4278F8FB81146755F379 /* pb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pb.h; sourceTree = "<group>"; };
-		3275B1466A10C59A57FA855C3AC6DECD /* GoogleDataTransport-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GoogleDataTransport-dummy.m"; sourceTree = "<group>"; };
-		3294C1F7B7748B520AFE0A6E3E5FDE30 /* FTupleUserCallback.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleUserCallback.m; path = Firebase/Database/Utilities/Tuples/FTupleUserCallback.m; sourceTree = "<group>"; };
-		32B7228504715C2E4B9E3D0DD3622543 /* FServerValues.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FServerValues.m; path = Firebase/Database/Core/FServerValues.m; sourceTree = "<group>"; };
-		3347A1AB6546F0A3977529B8F199DC41 /* FBLPromises.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FBLPromises.framework; path = PromisesObjC.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-		338E9E4797BEAD2FFF893017AB97CC8B /* format.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = format.cc; path = table/format.cc; sourceTree = "<group>"; };
-		33D40A09F8C5975F8B550A0483033801 /* FBLPromiseError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBLPromiseError.h; path = Sources/FBLPromises/include/FBLPromiseError.h; sourceTree = "<group>"; };
-		33ECE23F2ECD946250E06C49AD38D464 /* PromisesObjC.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = PromisesObjC.debug.xcconfig; sourceTree = "<group>"; };
-		3455A08B816E9633E67F45031FC9F6CD /* merger.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = merger.cc; path = table/merger.cc; sourceTree = "<group>"; };
-		34621C372310B419B41B61763C42149F /* table_builder.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = table_builder.cc; path = table/table_builder.cc; sourceTree = "<group>"; };
-		357108ED8E1BE0FAC53EFE9A522C6D0C /* FTupleStringNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleStringNode.h; path = Firebase/Database/Utilities/Tuples/FTupleStringNode.h; sourceTree = "<group>"; };
-		35CE8D2A98B792BEEDD0D72E89B33BAD /* table.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = table.h; path = include/leveldb/table.h; sourceTree = "<group>"; };
-		35EAD172ED92244F64C80D04A17BDE79 /* FSnapshotHolder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FSnapshotHolder.m; path = Firebase/Database/Core/FSnapshotHolder.m; sourceTree = "<group>"; };
-		361D5CC60A972E92E4E30CAE036573B2 /* FImmutableSortedSet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FImmutableSortedSet.h; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedSet.h; sourceTree = "<group>"; };
-		3639E6825CB07BF545A128E69034513C /* FIRCoreDiagnosticsInterop.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCoreDiagnosticsInterop.h; path = Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsInterop.h; sourceTree = "<group>"; };
-		36E86F31E1010E4369DFD5A8B2C46D99 /* FDataEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FDataEvent.m; path = Firebase/Database/Core/View/FDataEvent.m; sourceTree = "<group>"; };
-		36FBDDD8326F0B0C781905C5CF742D68 /* NSData+SRB64Additions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+SRB64Additions.m"; path = "Firebase/Database/third_party/SocketRocket/NSData+SRB64Additions.m"; sourceTree = "<group>"; };
-		371751A703B71351DE13FF939FF962D6 /* FIRAppAssociationRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAppAssociationRegistration.h; path = FirebaseCore/Sources/Private/FIRAppAssociationRegistration.h; sourceTree = "<group>"; };
-		3787BE6B13B4E6006135EB46DB54DC42 /* arena.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = arena.cc; path = util/arena.cc; sourceTree = "<group>"; };
-		378857989CF09BD719CBDF32E1B87FBA /* FTrackedQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTrackedQuery.h; path = Firebase/Database/Persistence/FTrackedQuery.h; sourceTree = "<group>"; };
-		37991EF098780E2D9FBD3B42EA8175D3 /* pb_common.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pb_common.h; sourceTree = "<group>"; };
-		37C3A94692642015055302CE6D458CCE /* FirebaseDatabase-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "FirebaseDatabase-Info.plist"; sourceTree = "<group>"; };
-		37E34EE4B371BB8626B0ECA106A5B8E0 /* FTupleTransaction.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleTransaction.h; path = Firebase/Database/Utilities/Tuples/FTupleTransaction.h; sourceTree = "<group>"; };
-		37FBC87BF2448D86A7BDADF009B9803B /* FLevelDBStorageEngine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLevelDBStorageEngine.m; path = Firebase/Database/Persistence/FLevelDBStorageEngine.m; sourceTree = "<group>"; };
-		385FA78D355DA5FF4ED09DE6A1AB8057 /* FWriteTree.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FWriteTree.h; path = Firebase/Database/Core/FWriteTree.h; sourceTree = "<group>"; };
-		38795B0F87C340F69CFEDED0CCBFAC37 /* FIRAppAssociationRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAppAssociationRegistration.m; path = FirebaseCore/Sources/FIRAppAssociationRegistration.m; sourceTree = "<group>"; };
-		38A43235156A1459847105BB4F2B300D /* FTupleObjects.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleObjects.h; path = Firebase/Database/Utilities/Tuples/FTupleObjects.h; sourceTree = "<group>"; };
-		393AE47449FD921FAD26AC79342F7367 /* GDTCOREvent+NetworkConnectionInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "GDTCOREvent+NetworkConnectionInfo.h"; path = "GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCOREvent+NetworkConnectionInfo.h"; sourceTree = "<group>"; };
-		394D1BEAD6AA9B9EFDBAA0EAAB06D478 /* PromisesObjC-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PromisesObjC-umbrella.h"; sourceTree = "<group>"; };
-		39587D5ABC154C593C4C834BD6058580 /* FEventRaiser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FEventRaiser.h; path = Firebase/Database/Core/View/FEventRaiser.h; sourceTree = "<group>"; };
-		39A3D499C991661974D88771D65ED755 /* FConnection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FConnection.m; path = Firebase/Database/Realtime/FConnection.m; sourceTree = "<group>"; };
-		39B71F3A4C20F71B0FA8620190D0629E /* FIRDatabase_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDatabase_Private.h; path = Firebase/Database/Api/Private/FIRDatabase_Private.h; sourceTree = "<group>"; };
-		39E847F87FE098403E173AF071476BF0 /* FIRTransactionResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRTransactionResult.h; path = Firebase/Database/Public/FIRTransactionResult.h; sourceTree = "<group>"; };
-		3A78563412DD19D641BB6F1F170DA015 /* FirebaseCore.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseCore.release.xcconfig; sourceTree = "<group>"; };
-		3AC6719935B3430DE4E11C520944D8BF /* FIRDataSnapshot.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDataSnapshot.h; path = Firebase/Database/Public/FIRDataSnapshot.h; sourceTree = "<group>"; };
-		3B2312F44AC0B0A5F30BD2D7E4AD31E1 /* FViewProcessor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FViewProcessor.h; path = Firebase/Database/FViewProcessor.h; sourceTree = "<group>"; };
-		3B32762245BBA7D25AC72093BF9D75E6 /* GDTCORReachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORReachability.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORReachability.m; sourceTree = "<group>"; };
-		3B87707E352D3B5520BAD0A84C358DC8 /* Pods-openTok-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-openTok-umbrella.h"; sourceTree = "<group>"; };
-		3BAE9DB2B881172814343BCA44C7BC98 /* FCancelEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FCancelEvent.h; path = Firebase/Database/Core/View/FCancelEvent.h; sourceTree = "<group>"; };
-		3BDC69FEF92061A1018272C226777880 /* FViewProcessorResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FViewProcessorResult.m; path = Firebase/Database/FViewProcessorResult.m; sourceTree = "<group>"; };
-		3C101CA28A87922BFF183FCB605139A6 /* write_batch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = write_batch.h; path = include/leveldb/write_batch.h; sourceTree = "<group>"; };
-		3C38FD08C4002E8A3E088547DD0523ED /* iterator.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = iterator.cc; path = table/iterator.cc; sourceTree = "<group>"; };
-		3C86C564F525877739284E8120ACBE75 /* FChildrenNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FChildrenNode.h; path = Firebase/Database/Snapshot/FChildrenNode.h; sourceTree = "<group>"; };
-		3CC76FAD8FA0F6D23526A68F7A0EDE8E /* FTupleTSN.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleTSN.h; path = Firebase/Database/Utilities/Tuples/FTupleTSN.h; sourceTree = "<group>"; };
-		3D339BC8AB099B5E05C88DAA77FBD0DF /* windows_logger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = windows_logger.h; path = util/windows_logger.h; sourceTree = "<group>"; };
-		3D7B530E73F5DDD639F32EA9C53A45C2 /* FBLPromise+Always.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Always.m"; path = "Sources/FBLPromises/FBLPromise+Always.m"; sourceTree = "<group>"; };
-		3DE1D8D85EC90A32E28154D880378587 /* pb_decode.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pb_decode.c; sourceTree = "<group>"; };
-		3E328AFED73206DE3C41B2F236188BAA /* GDTCCTPrioritizer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCCTPrioritizer.h; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTPrioritizer.h; sourceTree = "<group>"; };
-		3E54B1318AB1AA3CC7468878C8B0C39E /* GoogleDataTransportCCTSupport.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleDataTransportCCTSupport.debug.xcconfig; sourceTree = "<group>"; };
-		3E711BF9F9249CDACE333119FED50E76 /* FRangeMerge.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FRangeMerge.m; path = Firebase/Database/Core/FRangeMerge.m; sourceTree = "<group>"; };
-		3E7DD82D268001C64258EB45BA0470F2 /* GDTCCTCompressionHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCCTCompressionHelper.m; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTCompressionHelper.m; sourceTree = "<group>"; };
-		3E80C7D2190CFBE7BF524863C6D694D7 /* GoogleUtilities-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "GoogleUtilities-Info.plist"; sourceTree = "<group>"; };
-		3EA2D82B72EC58BCC44AD8106CB4E716 /* FClock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FClock.h; path = Firebase/Database/FClock.h; sourceTree = "<group>"; };
-		3F2E840DE3E5096DD4B221B61ABE94B4 /* FIRLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRLogger.m; path = FirebaseCore/Sources/FIRLogger.m; sourceTree = "<group>"; };
-		3F3A37BF930274FDB2AF3C64E5BA6C63 /* two_level_iterator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = two_level_iterator.h; path = table/two_level_iterator.h; sourceTree = "<group>"; };
-		3F8222E00AF134E0711FE08042A039C2 /* FIRAnalyticsConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAnalyticsConfiguration.m; path = FirebaseCore/Sources/FIRAnalyticsConfiguration.m; sourceTree = "<group>"; };
-		3F89EABDE73772529AA4D1632A76AB10 /* GDTCORPlatform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORPlatform.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORPlatform.h; sourceTree = "<group>"; };
-		3FDA53CDBFCA82B7F7184B44BC7FBC7C /* filter_policy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = filter_policy.h; path = include/leveldb/filter_policy.h; sourceTree = "<group>"; };
-		3FE1ACAC1C23FF4E29B8821ADC8ED85F /* FIRRetryHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRRetryHelper.h; path = Firebase/Database/Core/Utilities/FIRRetryHelper.h; sourceTree = "<group>"; };
-		40FE1C2937524054AB15B3A3F4272345 /* log_reader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = log_reader.h; path = db/log_reader.h; sourceTree = "<group>"; };
-		41FD95F75B109D21E5C0FF3B47B92CEA /* FirebaseAuthInterop.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseAuthInterop.release.xcconfig; sourceTree = "<group>"; };
-		428B977BF39D31F8F69EF02D8F825E96 /* GDTCORUploadPackage_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORUploadPackage_Private.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadPackage_Private.h; sourceTree = "<group>"; };
-		4321B4C224765D94C7503E3C6431F9B9 /* log_format.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = log_format.h; path = db/log_format.h; sourceTree = "<group>"; };
-		43744D2FF04A8F6E07656E852E3190B2 /* FPath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FPath.m; path = Firebase/Database/Core/Utilities/FPath.m; sourceTree = "<group>"; };
-		43C180B98E9AA37DFE45416D2E782F89 /* FQueryParams.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FQueryParams.m; path = Firebase/Database/Core/FQueryParams.m; sourceTree = "<group>"; };
-		4421DDED849BD83DC71031CD3143C0DD /* FBLPromise+Race.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Race.m"; path = "Sources/FBLPromises/FBLPromise+Race.m"; sourceTree = "<group>"; };
-		446761389CFA822783FA41B1CAB429AA /* GULKeychainStorage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULKeychainStorage.m; path = GoogleUtilities/Environment/SecureStorage/GULKeychainStorage.m; sourceTree = "<group>"; };
-		44BF5A2F11832E18FAA9160A4734E51B /* FAuthTokenProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FAuthTokenProvider.m; path = Firebase/Database/Login/FAuthTokenProvider.m; sourceTree = "<group>"; };
-		4517272EC7E584B42E4C304B2779D6B2 /* PromisesObjC.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = PromisesObjC.release.xcconfig; sourceTree = "<group>"; };
-		45586F5816585DB8B45FE1C976525A1C /* FPruneForest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FPruneForest.h; path = Firebase/Database/Persistence/FPruneForest.h; sourceTree = "<group>"; };
-		45EAA633A2105904DF70B93DB59F865A /* FSRWebSocket.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FSRWebSocket.m; path = Firebase/Database/third_party/SocketRocket/FSRWebSocket.m; sourceTree = "<group>"; };
-		460A5884CBCEBDCCDD70D08A0D2EE516 /* FPendingPut.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FPendingPut.h; path = Firebase/Database/Persistence/FPendingPut.h; sourceTree = "<group>"; };
-		46440B55B39BD26A9DF8DBAD2638BB2F /* iterator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = iterator.h; path = include/leveldb/iterator.h; sourceTree = "<group>"; };
-		4781B46372655A8914D2F3F4F92B66A8 /* port_example.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = port_example.h; path = port/port_example.h; sourceTree = "<group>"; };
-		47CD1AEAB4C797A6A730DB00DE47D9CB /* PromisesObjC-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "PromisesObjC-dummy.m"; sourceTree = "<group>"; };
-		4860AAD628A98E1A707FF827FF3AF9E9 /* FBLPromise.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBLPromise.m; path = Sources/FBLPromises/FBLPromise.m; sourceTree = "<group>"; };
-		4A10A4C81C220281B540EA7061D36321 /* GoogleDataTransportCCTSupport-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GoogleDataTransportCCTSupport-umbrella.h"; sourceTree = "<group>"; };
-		4AFF92094D4BC33FA831C1108F731A13 /* FIRCoreDiagnosticsConnector.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCoreDiagnosticsConnector.h; path = FirebaseCore/Sources/Private/FIRCoreDiagnosticsConnector.h; sourceTree = "<group>"; };
-		4B04B5BCD905ACB2C2079AFD75AB6597 /* GDTCORUploader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORUploader.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORUploader.h; sourceTree = "<group>"; };
-		4BD6ADA3108223D06CC45B5E4D709C49 /* FLLRBEmptyNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLLRBEmptyNode.h; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBEmptyNode.h; sourceTree = "<group>"; };
-		4C73EAF4D8A7A12724B8D66F3FB39624 /* FIRApp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRApp.h; path = FirebaseCore/Sources/Public/FIRApp.h; sourceTree = "<group>"; };
-		4CB725B760590589CCA74355CA795432 /* FCachePolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FCachePolicy.h; path = Firebase/Database/Persistence/FCachePolicy.h; sourceTree = "<group>"; };
-		4D1AF60094F489C5CAB30597E9300702 /* GULSecureCoding.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULSecureCoding.m; path = GoogleUtilities/Environment/GULSecureCoding.m; sourceTree = "<group>"; };
-		4D6D098D6D2D89BD890B660DDC02B2C5 /* FTupleStringNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleStringNode.m; path = Firebase/Database/Utilities/Tuples/FTupleStringNode.m; sourceTree = "<group>"; };
-		4D75E00B047D89EA15BE5CDEE752D7A0 /* block.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = block.cc; path = table/block.cc; sourceTree = "<group>"; };
-		4D8F88C55CA62E3CEF68D39A29F74646 /* FIRCoreDiagnosticsData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCoreDiagnosticsData.h; path = Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsData.h; sourceTree = "<group>"; };
-		4E65C99CB1E05FEDE149BE32F292733C /* FIRHeartbeatInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRHeartbeatInfo.h; path = FirebaseCore/Sources/Private/FIRHeartbeatInfo.h; sourceTree = "<group>"; };
-		4E856DB50BD68A84A63AE55499872178 /* block_builder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = block_builder.h; path = table/block_builder.h; sourceTree = "<group>"; };
-		5004A374237FC691736F521969A16337 /* FIRLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRLogger.h; path = FirebaseCore/Sources/Private/FIRLogger.h; sourceTree = "<group>"; };
-		50625C3A47D2BE9C9BD6151D17714D80 /* FBLPromise+Wrap.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Wrap.m"; path = "Sources/FBLPromises/FBLPromise+Wrap.m"; sourceTree = "<group>"; };
-		50F19DE27755B2D81E7D4874D093FB38 /* FIRDatabaseQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDatabaseQuery.h; path = Firebase/Database/Public/FIRDatabaseQuery.h; sourceTree = "<group>"; };
-		5151B4B90DF95DFF56C5C5AC51E5B2F1 /* GoogleDataTransportCCTSupport.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GoogleDataTransportCCTSupport.modulemap; sourceTree = "<group>"; };
-		51671C73F008B5C0C3751B3855999213 /* FirebaseDatabase.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FirebaseDatabase.framework; path = FirebaseDatabase.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-		51E90B1F65C14253EDC9375768CCD83C /* nanopb-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "nanopb-Info.plist"; sourceTree = "<group>"; };
-		52176DC15D315EAA2CE7CAE7871EF263 /* FCancelEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FCancelEvent.m; path = Firebase/Database/Core/View/FCancelEvent.m; sourceTree = "<group>"; };
-		52183C4DFF461846157BB45716C61701 /* FOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FOperation.h; path = Firebase/Database/Core/Operation/FOperation.h; sourceTree = "<group>"; };
-		541C1635CF2ACAB31B12B3FD9367089D /* pb_encode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pb_encode.h; sourceTree = "<group>"; };
-		543616AED705E736331D7BF0C4810E1F /* FChildChangeAccumulator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FChildChangeAccumulator.m; path = Firebase/Database/Core/View/Filter/FChildChangeAccumulator.m; sourceTree = "<group>"; };
-		54EDB5C773BAC4698020342F0696F390 /* FIRDatabaseComponent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRDatabaseComponent.m; path = Firebase/Database/Api/FIRDatabaseComponent.m; sourceTree = "<group>"; };
-		569511E399F07ABE1A4CBB713DF08B7B /* db_impl.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = db_impl.cc; path = db/db_impl.cc; sourceTree = "<group>"; };
-		56E0BD3190452F623D2588E2959B1C38 /* FStringUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FStringUtilities.m; path = Firebase/Database/Utilities/FStringUtilities.m; sourceTree = "<group>"; };
-		575EF3111261A829259FBDB6C19F8205 /* APLevelDB.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = APLevelDB.mm; path = "Firebase/Database/third_party/Wrap-leveldb/APLevelDB.mm"; sourceTree = "<group>"; };
-		578B57E50EDBE961E26365AC7EB47A31 /* GoogleUtilities-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GoogleUtilities-prefix.pch"; sourceTree = "<group>"; };
-		57D93D85D4F115B046E9F4E297055F80 /* FLLRBNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLLRBNode.h; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBNode.h; sourceTree = "<group>"; };
-		57FEBC63E8E55E8C1B6847CAEDE77959 /* GDTCORTransport_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORTransport_Private.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransport_Private.h; sourceTree = "<group>"; };
-		58308FFBBA52F24C69542503039DE365 /* status.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = status.cc; path = util/status.cc; sourceTree = "<group>"; };
-		58570F7234627794C4BF02928884354A /* GDTCCTUploader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCCTUploader.m; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTUploader.m; sourceTree = "<group>"; };
-		587ECC487233834DCC0BDFB400FD82FE /* FirebaseDatabase.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseDatabase.release.xcconfig; sourceTree = "<group>"; };
-		593FEB0A405089A855F6A178DC382FFF /* FTreeSortedDictionaryEnumerator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTreeSortedDictionaryEnumerator.m; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionaryEnumerator.m; sourceTree = "<group>"; };
-		59CB9FB4C1679210BE96723BFE245F15 /* FirebaseCoreDiagnostics.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseCoreDiagnostics.release.xcconfig; sourceTree = "<group>"; };
-		59E7355A640C2063FA68A1828CEF33A8 /* dbformat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = dbformat.h; path = db/dbformat.h; sourceTree = "<group>"; };
-		59F59F63C4615D2ABBA8D3688DE5C1A2 /* FStorageEngine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FStorageEngine.h; path = Firebase/Database/Persistence/FStorageEngine.h; sourceTree = "<group>"; };
-		5AF6CFF33C19AC6817222406C326E673 /* FTupleCallbackStatus.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleCallbackStatus.h; path = Firebase/Database/Utilities/Tuples/FTupleCallbackStatus.h; sourceTree = "<group>"; };
-		5AF9DE0337F8113B726962277B249DA5 /* GDTCORFlatFileStorage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORFlatFileStorage.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORFlatFileStorage.m; sourceTree = "<group>"; };
-		5B65DAC962609F2CA5CAF579C31133A7 /* FAckUserWrite.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FAckUserWrite.h; path = Firebase/Database/Core/Operation/FAckUserWrite.h; sourceTree = "<group>"; };
-		5B797E52A5E7D33056211AE0FE28030B /* filename.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = filename.cc; path = db/filename.cc; sourceTree = "<group>"; };
-		5C1A3ED649EAA4D369C665A9C4887D7D /* Pods-openTok.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-openTok.modulemap"; sourceTree = "<group>"; };
-		5CE08AC03F18A07FFDE865B02C63441E /* nanopb.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = nanopb.debug.xcconfig; sourceTree = "<group>"; };
-		5D57A1F107BF9AB8D7F78C220FD7D3FE /* FImmutableTree.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FImmutableTree.m; path = Firebase/Database/Core/Utilities/FImmutableTree.m; sourceTree = "<group>"; };
-		5D7BD1D203706AD133B003DE154D40AC /* c.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = c.cc; path = db/c.cc; sourceTree = "<group>"; };
-		5E7D64340689B27CEC98862A2A1558BA /* FView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FView.m; path = Firebase/Database/Core/View/FView.m; sourceTree = "<group>"; };
-		5EFC7D206D5469364E21D58DD4E6C7A8 /* FTupleNodePath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleNodePath.h; path = Firebase/Database/Utilities/Tuples/FTupleNodePath.h; sourceTree = "<group>"; };
-		5F0C162A1408DFD87160990CD1C5B5FE /* FBLPromise+Validate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Validate.h"; path = "Sources/FBLPromises/include/FBLPromise+Validate.h"; sourceTree = "<group>"; };
-		5F3DC736CC472D8C083FEE2D95582EF6 /* FirebaseCore.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseCore.debug.xcconfig; sourceTree = "<group>"; };
-		5F69F234C57436B1A1499CE33ED96AAA /* FTuplePathValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTuplePathValue.m; path = Firebase/Database/Utilities/Tuples/FTuplePathValue.m; sourceTree = "<group>"; };
-		5FD0137BAD2B0EED669DF6AC601CAB94 /* Pods-openTok.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-openTok.release.xcconfig"; sourceTree = "<group>"; };
-		60129F2C1744E4C6A0B45D363AEEF0FD /* FBLPromises.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBLPromises.h; path = Sources/FBLPromises/include/FBLPromises.h; sourceTree = "<group>"; };
-		6041B5E87AC260ED5B0E6C0B42DDA814 /* FTupleTSN.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleTSN.m; path = Firebase/Database/Utilities/Tuples/FTupleTSN.m; sourceTree = "<group>"; };
-		60FDC5A59E02334D7C8B34614969FCAA /* table_cache.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = table_cache.cc; path = db/table_cache.cc; sourceTree = "<group>"; };
-		612393A8C0D0B02C9ADA7AB38EC11ED1 /* cct.nanopb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = cct.nanopb.h; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.h; sourceTree = "<group>"; };
-		61CCE79B8780E931635E80307FA09EE6 /* FLevelDBStorageEngine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLevelDBStorageEngine.h; path = Firebase/Database/Persistence/FLevelDBStorageEngine.h; sourceTree = "<group>"; };
-		62020A4F2BCB9E86DA99881A00474E3F /* FBLPromises.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FBLPromises.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-		621D483E45E92BE126C17E8261A0E6FA /* db.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = db.h; path = include/leveldb/db.h; sourceTree = "<group>"; };
-		6266F0F67AE31067A90DDC828E91BFB1 /* FTupleOnDisconnect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleOnDisconnect.h; path = Firebase/Database/Utilities/Tuples/FTupleOnDisconnect.h; sourceTree = "<group>"; };
-		632A2A314E4EBB58C7333F3B1B5FA731 /* FWriteTree.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FWriteTree.m; path = Firebase/Database/Core/FWriteTree.m; sourceTree = "<group>"; };
-		635E69A93F16B99D33B27A6452B14DC5 /* logging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = logging.h; path = util/logging.h; sourceTree = "<group>"; };
-		64705E8D19B8D928285A3720DB0206AE /* GDTCORUploadPackage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORUploadPackage.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORUploadPackage.m; sourceTree = "<group>"; };
-		6581D2C778C2FD723629A78872C61FDC /* dumpfile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = dumpfile.h; path = include/leveldb/dumpfile.h; sourceTree = "<group>"; };
-		65A2EA4B48BA25E5F852CFA3518CEAC9 /* FCompoundWrite.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FCompoundWrite.h; path = Firebase/Database/Snapshot/FCompoundWrite.h; sourceTree = "<group>"; };
-		666F60F1D8D46D275395769502141CD1 /* FirebaseCore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FirebaseCore.h; path = FirebaseCore/Sources/Public/FirebaseCore.h; sourceTree = "<group>"; };
-		66E4FD9B631E9F35722D53A6EC999ACE /* Pods-openTok-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-openTok-dummy.m"; sourceTree = "<group>"; };
-		673B1B561ACB418F330B4478AE33C9F3 /* builder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = builder.h; path = db/builder.h; sourceTree = "<group>"; };
-		674391F19F12A6728205D726D39B24BC /* GDTCORTransport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORTransport.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORTransport.h; sourceTree = "<group>"; };
-		674C8CF50302A87EC7519C90AF0C6F61 /* posix_logger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = posix_logger.h; path = util/posix_logger.h; sourceTree = "<group>"; };
-		67AA07E8EC09CCB7FE04406017A4C519 /* FBLPromise+Do.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Do.m"; path = "Sources/FBLPromises/FBLPromise+Do.m"; sourceTree = "<group>"; };
-		6836B2C094BEE9CCC043393E936B87BE /* FViewProcessor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FViewProcessor.m; path = Firebase/Database/FViewProcessor.m; sourceTree = "<group>"; };
-		68949119150AE37E2185C8D318D06060 /* FOverwrite.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FOverwrite.h; path = Firebase/Database/Core/Operation/FOverwrite.h; sourceTree = "<group>"; };
-		68B02E7BEB2979723066B27907E0A636 /* FChange.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FChange.h; path = Firebase/Database/Core/View/FChange.h; sourceTree = "<group>"; };
-		6942351307BC1F54575D9853307EAE0E /* GoogleDataTransportCCTSupport.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = GoogleDataTransportCCTSupport.framework; path = GoogleDataTransportCCTSupport.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-		695B08F258794D8BA0F5ADA821C842AA /* GDTCORClock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORClock.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORClock.h; sourceTree = "<group>"; };
-		6A37D0DC62ADF6DFECBB8C229F50AF93 /* GDTCORDataFuture.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORDataFuture.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORDataFuture.h; sourceTree = "<group>"; };
-		6A9D85795C3AB0FC818197A64F6ADC1F /* GDTCORPrioritizer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORPrioritizer.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORPrioritizer.h; sourceTree = "<group>"; };
-		6AFC8703934BB1696C9104DD93F8811C /* FirebaseAuthInterop.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseAuthInterop.debug.xcconfig; sourceTree = "<group>"; };
-		6B4F0813AD0FE6A019D69BEE02FE48B2 /* FIRDatabaseComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDatabaseComponent.h; path = Firebase/Database/Api/FIRDatabaseComponent.h; sourceTree = "<group>"; };
-		6BD31C9DAA421C4A8E24D11F5161689F /* FIRVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRVersion.h; path = FirebaseCore/Sources/FIRVersion.h; sourceTree = "<group>"; };
-		6C25234BF51BE9602848231B7842472C /* FIRNoopAuthTokenProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRNoopAuthTokenProvider.m; path = Firebase/Database/Login/FIRNoopAuthTokenProvider.m; sourceTree = "<group>"; };
-		6C35F58B895845211A8017AAC391E1B7 /* FEventRaiser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FEventRaiser.m; path = Firebase/Database/Core/View/FEventRaiser.m; sourceTree = "<group>"; };
-		6C3C1EB539A57B6F7CBF5F5F61AEC46A /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; };
-		6CC2D13BD17F41391BB88C73E58BDA77 /* FIRDatabaseQuery_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDatabaseQuery_Private.h; path = Firebase/Database/Api/Private/FIRDatabaseQuery_Private.h; sourceTree = "<group>"; };
-		6D9B952974F6B3F89F6399C831D99CC2 /* FirebaseDatabase.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseDatabase.debug.xcconfig; sourceTree = "<group>"; };
-		6EB5D83F05D2269F33466C7DCFCD26A0 /* block_builder.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = block_builder.cc; path = table/block_builder.cc; sourceTree = "<group>"; };
-		6EBB17129E01D8CF54893F948D47D963 /* FIndexedFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIndexedFilter.h; path = Firebase/Database/Core/View/Filter/FIndexedFilter.h; sourceTree = "<group>"; };
-		6F2ED88980ADD02F9CD95D5F802803F1 /* FIRNoopAuthTokenProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRNoopAuthTokenProvider.h; path = Firebase/Database/Login/FIRNoopAuthTokenProvider.h; sourceTree = "<group>"; };
-		6FBAE93D87DDDF2F1354A512B9055879 /* FIRDatabaseReference.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDatabaseReference.h; path = Firebase/Database/Public/FIRDatabaseReference.h; sourceTree = "<group>"; };
-		70515A5CBED5171BEE1A7FD8B06C8338 /* GoogleDataTransport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GoogleDataTransport.h; path = GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport.h; sourceTree = "<group>"; };
-		7054A55E885CFA0B88E9B303F1CA6A8D /* FImmutableSortedDictionary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FImmutableSortedDictionary.h; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedDictionary.h; sourceTree = "<group>"; };
-		70C80FE5FEC8E37CDC7A3FECCC392C9C /* nanopb.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = nanopb.release.xcconfig; sourceTree = "<group>"; };
-		70E9D5DB507166468AF0FA89B51E2176 /* FLLRBValueNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLLRBValueNode.m; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBValueNode.m; sourceTree = "<group>"; };
-		7114FD0EFDDFA8EFD0B729F54CA0E299 /* FTreeSortedDictionary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTreeSortedDictionary.h; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionary.h; sourceTree = "<group>"; };
-		7193CDB6EF41B0AEB292E144AC86B962 /* firebasecore.nanopb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = firebasecore.nanopb.h; path = Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.h; sourceTree = "<group>"; };
-		71D624A72A3D5A4BBC3E8E85FF70070C /* FIRAppInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAppInternal.h; path = FirebaseCore/Sources/Private/FIRAppInternal.h; sourceTree = "<group>"; };
-		72EB4F6047A67ABF94B6F8BA86D2D234 /* format.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = format.h; path = table/format.h; sourceTree = "<group>"; };
-		744466560FAD76B6239D54402C0C52DC /* FBLPromise+Retry.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Retry.m"; path = "Sources/FBLPromises/FBLPromise+Retry.m"; sourceTree = "<group>"; };
-		76009627450555684FFB602D5CDB66C8 /* FAtomicNumber.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FAtomicNumber.h; path = Firebase/Database/Utilities/FAtomicNumber.h; sourceTree = "<group>"; };
-		7608FC4EC17E98020B24155456A3AA39 /* FWriteRecord.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FWriteRecord.h; path = Firebase/Database/Core/FWriteRecord.h; sourceTree = "<group>"; };
-		7610135E50DA4D208AF3E88330FCBDC1 /* FBLPromise+Recover.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Recover.h"; path = "Sources/FBLPromises/include/FBLPromise+Recover.h"; sourceTree = "<group>"; };
-		76A86C67D20E7FD637F775A4E9F95B51 /* memtable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = memtable.h; path = db/memtable.h; sourceTree = "<group>"; };
-		77B8D860A5693BAB27B03B2D8262FBBB /* FIRHeartbeatInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRHeartbeatInfo.m; path = FirebaseCore/Sources/FIRHeartbeatInfo.m; sourceTree = "<group>"; };
-		77C1062B06298DDB3CE7B3ADE0C5DE14 /* FBLPromise+Async.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Async.m"; path = "Sources/FBLPromises/FBLPromise+Async.m"; sourceTree = "<group>"; };
-		77C24E7828CDD9A00B0A92ECEB5CFDB0 /* FArraySortedDictionary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FArraySortedDictionary.h; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FArraySortedDictionary.h; sourceTree = "<group>"; };
-		784C73A1380FA3D7D7A731214DE53A13 /* export.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = export.h; path = include/leveldb/export.h; sourceTree = "<group>"; };
-		78AE048F46E327022930DDCA71CF3271 /* GDTCORClock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORClock.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORClock.m; sourceTree = "<group>"; };
-		78BAF0D547E00F0767C0DD113ADF19C0 /* GULKeychainStorage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULKeychainStorage.h; path = GoogleUtilities/Environment/Public/GULKeychainStorage.h; sourceTree = "<group>"; };
-		78CE4FC4674E17E99E511BCA4E3D89E0 /* FTupleObjectNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleObjectNode.m; path = Firebase/Database/Utilities/Tuples/FTupleObjectNode.m; sourceTree = "<group>"; };
-		7910CA09A4822C96B09D982D5AA1AAFD /* PromisesObjC-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "PromisesObjC-Info.plist"; sourceTree = "<group>"; };
-		7919424CA56B24B6F497FCB11FF6DB93 /* FChildEventRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FChildEventRegistration.h; path = Firebase/Database/Core/View/FChildEventRegistration.h; sourceTree = "<group>"; };
-		794FB584900DC2C9932AC53A681FF10C /* table.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = table.cc; path = table/table.cc; sourceTree = "<group>"; };
-		79E2BF71AE254982334583E815969709 /* FChange.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FChange.m; path = Firebase/Database/Core/View/FChange.m; sourceTree = "<group>"; };
-		7B7C8165FC40E1432F5EB7EA2782E04B /* coding.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = coding.h; path = util/coding.h; sourceTree = "<group>"; };
-		7B9509605188658AC6DAEB774F27217B /* FIRDataSnapshot.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRDataSnapshot.m; path = Firebase/Database/Api/FIRDataSnapshot.m; sourceTree = "<group>"; };
-		7CF6606C0578E7CDF7EDEF3D4B178B60 /* FirebaseCoreDiagnostics-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "FirebaseCoreDiagnostics-Info.plist"; sourceTree = "<group>"; };
-		7D6E47B616DE755714427591880125AE /* env.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = env.h; path = include/leveldb/env.h; sourceTree = "<group>"; };
-		7DF8ED92CC74E5A76731E6B0F0B23799 /* GoogleDataTransport.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GoogleDataTransport.modulemap; sourceTree = "<group>"; };
-		7E58E1A27F0803C11F2250F1DCEC0741 /* GoogleUtilities.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleUtilities.release.xcconfig; sourceTree = "<group>"; };
-		7EDEB0636E82100515CA48503A4D022C /* FViewCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FViewCache.m; path = Firebase/Database/Core/View/FViewCache.m; sourceTree = "<group>"; };
-		80AE48D6611499F9E4910CA9F46D2191 /* FRangeMerge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FRangeMerge.h; path = Firebase/Database/Core/FRangeMerge.h; sourceTree = "<group>"; };
-		81F3FD7983F8C4391CC30B4E7370767E /* cache.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = cache.cc; path = util/cache.cc; sourceTree = "<group>"; };
-		823E7E73D27229EF57D62A2C3C62E62C /* GDTCORReachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORReachability.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORReachability.h; sourceTree = "<group>"; };
-		825631D04FA349AC9CAE016BE347234D /* FIRErrors.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRErrors.m; path = FirebaseCore/Sources/FIRErrors.m; sourceTree = "<group>"; };
-		82BD2B064A081DE7FB1B130EDCAAA263 /* FBLPromise+Wrap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Wrap.h"; path = "Sources/FBLPromises/include/FBLPromise+Wrap.h"; sourceTree = "<group>"; };
-		838FEFECD8DD58DE24E9A5A672A11E81 /* FParsedUrl.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FParsedUrl.m; path = Firebase/Database/Utilities/FParsedUrl.m; sourceTree = "<group>"; };
-		83AC43378C350989A6B691A3B81051E5 /* merger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = merger.h; path = table/merger.h; sourceTree = "<group>"; };
-		83AD72E6FF9339276439BA4350ABDA13 /* FBLPromisePrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBLPromisePrivate.h; path = Sources/FBLPromises/include/FBLPromisePrivate.h; sourceTree = "<group>"; };
-		8454AAD8C7BABB4D4FC9DC6D3F1FC788 /* FValueIndex.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FValueIndex.m; path = Firebase/Database/FValueIndex.m; sourceTree = "<group>"; };
-		856B5CD56F194FAD26EA91620B66D614 /* GoogleDataTransport.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = GoogleDataTransport.framework; path = GoogleDataTransport.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-		85F1AE2EBEC3ACE6F7F8518590D0F6A2 /* FBLPromise+Any.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Any.m"; path = "Sources/FBLPromises/FBLPromise+Any.m"; sourceTree = "<group>"; };
-		860B744356EA183E469CA636F94AEB50 /* FPath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FPath.h; path = Firebase/Database/Core/Utilities/FPath.h; sourceTree = "<group>"; };
-		8734EC42113C4820AC918A2ECB6EE41C /* FIRConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRConfiguration.m; path = FirebaseCore/Sources/FIRConfiguration.m; sourceTree = "<group>"; };
-		873B2D52C27790E76C58F17E637447EA /* FIRDependency.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRDependency.m; path = FirebaseCore/Sources/FIRDependency.m; sourceTree = "<group>"; };
-		875DAAA3905FD883291E5E4ED1AE9052 /* GoogleDataTransport-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "GoogleDataTransport-Info.plist"; sourceTree = "<group>"; };
-		87A11B9808FEF3BD00DEAAF8F1F7A1E8 /* FBLPromise.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBLPromise.h; path = Sources/FBLPromises/include/FBLPromise.h; sourceTree = "<group>"; };
-		87AE9B4D3596ECB04407EB93492E47BD /* dumpfile.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = dumpfile.cc; path = db/dumpfile.cc; sourceTree = "<group>"; };
-		87C8D393D6580BF43944DB0760788D06 /* FIROptionsInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIROptionsInternal.h; path = FirebaseCore/Sources/Private/FIROptionsInternal.h; sourceTree = "<group>"; };
-		88B434AB00179B49FC2340C88AA79645 /* FCompoundHash.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FCompoundHash.m; path = Firebase/Database/Core/FCompoundHash.m; sourceTree = "<group>"; };
-		89813D1225296221B8A1CD2141389CB2 /* GoogleDataTransport.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleDataTransport.release.xcconfig; sourceTree = "<group>"; };
-		8A0818CE0BCE0C31BA702F922277305F /* GULKeychainUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULKeychainUtils.h; path = GoogleUtilities/Environment/Public/GULKeychainUtils.h; sourceTree = "<group>"; };
-		8A4EB59A5D57265DCE22DAF6B0F62EC4 /* FIRDatabaseReference.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRDatabaseReference.m; path = Firebase/Database/FIRDatabaseReference.m; sourceTree = "<group>"; };
-		8A4F5BC1A826B07C0F4C1030B7CBA8CD /* FirebaseCore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FirebaseCore-dummy.m"; sourceTree = "<group>"; };
-		8B05621A5EF759E47A44989B0245FC6A /* dbformat.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = dbformat.cc; path = db/dbformat.cc; sourceTree = "<group>"; };
-		8BC4618A1AB60D74C5C3EE23BEC70362 /* mutexlock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = mutexlock.h; path = util/mutexlock.h; sourceTree = "<group>"; };
-		8BD8AF5861BD6D8277CCB8D46458CE6F /* FCacheNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FCacheNode.h; path = Firebase/Database/Core/View/FCacheNode.h; sourceTree = "<group>"; };
-		8BE48E3EE3333BF5E2BE4F1CD5787E3D /* FLLRBEmptyNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLLRBEmptyNode.m; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBEmptyNode.m; sourceTree = "<group>"; };
-		8CC9178C366942FD6FF6A115604EAD58 /* FirebaseCoreDiagnostics.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FirebaseCoreDiagnostics.framework; path = FirebaseCoreDiagnostics.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-		8DB35C5A4E090537BCD1F8382ACCD601 /* hash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = hash.h; path = util/hash.h; sourceTree = "<group>"; };
-		8EAA3C6BA44BAFE3C08D2B7B5567778D /* FTrackedQueryManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTrackedQueryManager.m; path = Firebase/Database/Persistence/FTrackedQueryManager.m; sourceTree = "<group>"; };
-		8F2DF0513C9DB23D691523760E8A297A /* FIRBundleUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRBundleUtil.h; path = FirebaseCore/Sources/FIRBundleUtil.h; sourceTree = "<group>"; };
-		8F623F7FBC6EF232A1F47AACADC4C561 /* FLLRBValueNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLLRBValueNode.h; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBValueNode.h; sourceTree = "<group>"; };
-		8F89CFE3165AF36055F7014246855162 /* repair.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = repair.cc; path = db/repair.cc; sourceTree = "<group>"; };
-		8FB6A055AAC08E126DD875D10F1681BE /* FArraySortedDictionary.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FArraySortedDictionary.m; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FArraySortedDictionary.m; sourceTree = "<group>"; };
-		902E6002602A44EB342BBC2142E66B0D /* FIRMutableData_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMutableData_Private.h; path = Firebase/Database/Api/Private/FIRMutableData_Private.h; sourceTree = "<group>"; };
-		90316C54AEDD432C7EDDA954D02A16E0 /* APLevelDB.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APLevelDB.h; path = "Firebase/Database/third_party/Wrap-leveldb/APLevelDB.h"; sourceTree = "<group>"; };
-		90D45AEDE9F7AD08010F5EE9B389652E /* GDTCORTransport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORTransport.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORTransport.m; sourceTree = "<group>"; };
-		914AA32349DFFE43B88FD2C41C2E3880 /* FIRConfigurationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRConfigurationInternal.h; path = FirebaseCore/Sources/Private/FIRConfigurationInternal.h; sourceTree = "<group>"; };
-		916D739034B004E106182204228D42C0 /* FConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FConstants.m; path = Firebase/Database/Constants/FConstants.m; sourceTree = "<group>"; };
-		917F14DB5F41240C3D285C5384050E2C /* FirebaseCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FirebaseCore-umbrella.h"; sourceTree = "<group>"; };
-		91811F71C2FA9265B03192507FD0715D /* crc32c.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = crc32c.h; path = util/crc32c.h; sourceTree = "<group>"; };
-		922204FA6D1655751812D541250FEA72 /* FBLPromise+Then.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Then.m"; path = "Sources/FBLPromises/FBLPromise+Then.m"; sourceTree = "<group>"; };
-		9258D0107323650D356F6D0323D79CC3 /* FBLPromise+Catch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Catch.h"; path = "Sources/FBLPromises/include/FBLPromise+Catch.h"; sourceTree = "<group>"; };
-		92CD283D96DCA1B1A70CCFCEDE5A47B2 /* FIRComponentContainerInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRComponentContainerInternal.h; path = FirebaseCore/Sources/Private/FIRComponentContainerInternal.h; sourceTree = "<group>"; };
-		941ACF372F977D2EFD95A9310219B60A /* pb_decode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pb_decode.h; sourceTree = "<group>"; };
-		945B168B765E0149A40FCDD1B383D898 /* FTupleCallbackStatus.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleCallbackStatus.m; path = Firebase/Database/Utilities/Tuples/FTupleCallbackStatus.m; sourceTree = "<group>"; };
-		94828B387C56139BACCCEDC781E42B5B /* GDTCORAssert.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORAssert.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORAssert.m; sourceTree = "<group>"; };
-		94B46AAE0848AD9B3F922BBB8DA40DC5 /* GDTCORStorageProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORStorageProtocol.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORStorageProtocol.h; sourceTree = "<group>"; };
-		955193171396A5F7FDA4F76ECCAEAC78 /* FIRDatabaseConfig_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDatabaseConfig_Private.h; path = Firebase/Database/FIRDatabaseConfig_Private.h; sourceTree = "<group>"; };
-		95728A376DED6052F25B119402483838 /* testutil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = testutil.h; path = util/testutil.h; sourceTree = "<group>"; };
-		95D786CDC75102E908AC12A8FCEC111A /* GULAppEnvironmentUtil.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULAppEnvironmentUtil.m; path = GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.m; sourceTree = "<group>"; };
-		95EDE74C6DE1F87EE3663A0AD366B7B5 /* FMerge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FMerge.h; path = Firebase/Database/Core/Operation/FMerge.h; sourceTree = "<group>"; };
-		96B97BCFDFB29A395ECEFEEE53D89889 /* log_reader.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = log_reader.cc; path = db/log_reader.cc; sourceTree = "<group>"; };
-		975D7F0C4BD02609E2E89C0BDB223652 /* FStringUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FStringUtilities.h; path = Firebase/Database/Utilities/FStringUtilities.h; sourceTree = "<group>"; };
-		97BCB79C675A3B16DD7740908974E9B3 /* FIRVersion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRVersion.m; path = FirebaseCore/Sources/FIRVersion.m; sourceTree = "<group>"; };
-		98859E9B4B250386DEDD7C85EB0716D8 /* FRepoManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FRepoManager.h; path = Firebase/Database/Core/FRepoManager.h; sourceTree = "<group>"; };
-		98B5D3DAE49B0B1F304E5AAF9095F733 /* random.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = random.h; path = util/random.h; sourceTree = "<group>"; };
-		98F196A197AFD44C0C2A0FB7E9BACF4C /* comparator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = comparator.h; path = include/leveldb/comparator.h; sourceTree = "<group>"; };
-		98FC3E75806D347BDE1998F9D6F7924D /* FBLPromise+Testing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Testing.h"; path = "Sources/FBLPromises/include/FBLPromise+Testing.h"; sourceTree = "<group>"; };
-		991856E8769D32D7006FE848E3EB873D /* FIRServerValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRServerValue.h; path = Firebase/Database/Public/FIRServerValue.h; sourceTree = "<group>"; };
-		99C96C3B40C51D1D79FC28DC8197EB3C /* two_level_iterator.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = two_level_iterator.cc; path = table/two_level_iterator.cc; sourceTree = "<group>"; };
-		99E6B34EBA0A767EED9DFC5E58B87DF5 /* FConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FConnection.h; path = Firebase/Database/Realtime/FConnection.h; sourceTree = "<group>"; };
-		9A971A378B109444D68EC9F1710744D4 /* histogram.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = histogram.h; path = util/histogram.h; sourceTree = "<group>"; };
-		9AB3707E44CE0D64C47BB82321FE3BD4 /* GoogleDataTransportCCTSupport-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GoogleDataTransportCCTSupport-dummy.m"; sourceTree = "<group>"; };
-		9AEA59B436FE7C179D1AA762546E52F0 /* FTreeNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTreeNode.h; path = Firebase/Database/Core/Utilities/FTreeNode.h; sourceTree = "<group>"; };
-		9B25CE4BCD165FCACCCB347BE5C627FA /* FIRDiagnosticsData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDiagnosticsData.h; path = FirebaseCore/Sources/Private/FIRDiagnosticsData.h; sourceTree = "<group>"; };
-		9BC93D2F01BC90BCC406F2269AFF64B1 /* FirebaseCoreDiagnosticsInterop.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseCoreDiagnosticsInterop.debug.xcconfig; sourceTree = "<group>"; };
-		9C997CFFE0B0EB3DB9D6ADAF73854B4E /* testharness.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = testharness.cc; path = util/testharness.cc; sourceTree = "<group>"; };
-		9D049B599CD35B1EBCCFB40378A858E0 /* FValidation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FValidation.m; path = Firebase/Database/Utilities/FValidation.m; sourceTree = "<group>"; };
-		9D85A9AAC775F25C1D9D72DCD09CE492 /* GoogleDataTransport.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleDataTransport.debug.xcconfig; sourceTree = "<group>"; };
-		9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
-		9DC5B45B4B2D0DC0AE3FB7A75E08649A /* FBLPromise+Race.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Race.h"; path = "Sources/FBLPromises/include/FBLPromise+Race.h"; sourceTree = "<group>"; };
-		9E2D65ECD11B6AEB036931D5A3380113 /* GULHeartbeatDateStorage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULHeartbeatDateStorage.m; path = GoogleUtilities/Environment/GULHeartbeatDateStorage.m; sourceTree = "<group>"; };
-		9E7B43761161E27D4FB4903970D91F4F /* FCompleteChildSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FCompleteChildSource.h; path = Firebase/Database/Core/View/Filter/FCompleteChildSource.h; sourceTree = "<group>"; };
-		9F12FA3516B540F46C4E817F486AD87A /* FIROptions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIROptions.h; path = FirebaseCore/Sources/Public/FIROptions.h; sourceTree = "<group>"; };
-		9FFA595A6BC21A8745A22CAC7C9C9678 /* NSData+SRB64Additions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+SRB64Additions.h"; path = "Firebase/Database/third_party/SocketRocket/NSData+SRB64Additions.h"; sourceTree = "<group>"; };
-		A0C2CA4BE08826E478724D7FBB8A6D94 /* FIndex.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIndex.h; path = Firebase/Database/FIndex.h; sourceTree = "<group>"; };
-		A0CDEC73746A123B250DF34810E0C957 /* GDTCORUploadCoordinator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORUploadCoordinator.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadCoordinator.h; sourceTree = "<group>"; };
-		A0D2B9693657353DC78B1C8AA8E503F4 /* FirebaseCoreDiagnosticsInterop.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseCoreDiagnosticsInterop.release.xcconfig; sourceTree = "<group>"; };
-		A11AE0A92B88FC456F083B131B991F1A /* FBLPromise+Reduce.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Reduce.m"; path = "Sources/FBLPromises/FBLPromise+Reduce.m"; sourceTree = "<group>"; };
-		A1B575D60903423A2B9984866581EC10 /* FImmutableTree.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FImmutableTree.h; path = Firebase/Database/Core/Utilities/FImmutableTree.h; sourceTree = "<group>"; };
-		A1B705F633CD48849AE76995D60F22F5 /* FIndexedNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIndexedNode.m; path = Firebase/Database/Snapshot/FIndexedNode.m; sourceTree = "<group>"; };
-		A2D25B8664C78BB8A4AAAF6FA3EF21AB /* env_posix.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = env_posix.cc; path = util/env_posix.cc; sourceTree = "<group>"; };
-		A314FA39C00A05F50CD19B20BE48E0EE /* FDataEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FDataEvent.h; path = Firebase/Database/Core/View/FDataEvent.h; sourceTree = "<group>"; };
-		A320AFD4407CF0B2CE66E62B45145BDB /* FRepoManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FRepoManager.m; path = Firebase/Database/Core/FRepoManager.m; sourceTree = "<group>"; };
-		A3735655FE85A76B2A9B4658B9E1D579 /* GoogleUtilities.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GoogleUtilities.modulemap; sourceTree = "<group>"; };
-		A3823B10AD6A6B24863EBD4ECE0D691C /* cache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = cache.h; path = include/leveldb/cache.h; sourceTree = "<group>"; };
-		A3DD7543FF2C526CD999ADA8530ED5EA /* FOperationSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FOperationSource.m; path = Firebase/Database/Core/Operation/FOperationSource.m; sourceTree = "<group>"; };
-		A43C04A3FED5D0538408B186EB5A4FD1 /* FValidation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FValidation.h; path = Firebase/Database/Utilities/FValidation.h; sourceTree = "<group>"; };
-		A551638736E976C6F89390DB407C4331 /* FIRServerValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRServerValue.m; path = Firebase/Database/Api/FIRServerValue.m; sourceTree = "<group>"; };
-		A674C7C09F1C351BFF34B1C8A0910870 /* env.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = env.cc; path = util/env.cc; sourceTree = "<group>"; };
-		A720480A68376788BC41CE5196AD1D6D /* FSnapshotUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSnapshotUtilities.h; path = Firebase/Database/Snapshot/FSnapshotUtilities.h; sourceTree = "<group>"; };
-		A8D9FCB9E6E7263B05452B4A1E52C57B /* FWriteRecord.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FWriteRecord.m; path = Firebase/Database/Core/FWriteRecord.m; sourceTree = "<group>"; };
-		A8DA6D09CA5BA0ADBB362152B7846961 /* FKeyIndex.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FKeyIndex.h; path = Firebase/Database/FKeyIndex.h; sourceTree = "<group>"; };
-		A908DAA989BEA273B10D102D558F47FD /* GDTCORRegistrar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORRegistrar.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORRegistrar.h; sourceTree = "<group>"; };
-		A9D70C09F8DDD9DFB26AC7F97FAB70ED /* FTreeSortedDictionaryEnumerator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTreeSortedDictionaryEnumerator.h; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionaryEnumerator.h; sourceTree = "<group>"; };
-		AA690BDFA65E8C410A82130B3483B82A /* bloom.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = bloom.cc; path = util/bloom.cc; sourceTree = "<group>"; };
-		AAC5E8282CA57B988CA60B91846B3AB9 /* GULHeartbeatDateStorage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULHeartbeatDateStorage.h; path = GoogleUtilities/Environment/Public/GULHeartbeatDateStorage.h; sourceTree = "<group>"; };
-		AAF98DB258436A94B5CFFCB168CA4E11 /* FIRBundleUtil.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRBundleUtil.m; path = FirebaseCore/Sources/FIRBundleUtil.m; sourceTree = "<group>"; };
-		ABC4D7550679CE90B7A7D2AC9658CD2B /* FTupleNodePath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleNodePath.m; path = Firebase/Database/Utilities/Tuples/FTupleNodePath.m; sourceTree = "<group>"; };
-		AC1A01D6B0D166DA6AAD158D6264F693 /* comparator.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = comparator.cc; path = util/comparator.cc; sourceTree = "<group>"; };
-		ACA4F24A74FE27CDF4351A7341029FC3 /* FRangedFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FRangedFilter.h; path = Firebase/Database/FRangedFilter.h; sourceTree = "<group>"; };
-		AD39F1091B89CC90EB47C76A7740E528 /* FCompoundWrite.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FCompoundWrite.m; path = Firebase/Database/Snapshot/FCompoundWrite.m; sourceTree = "<group>"; };
-		AD6117C150F7C9AEC846B49F6EAA9BAF /* FBLPromise+Timeout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Timeout.m"; path = "Sources/FBLPromises/FBLPromise+Timeout.m"; sourceTree = "<group>"; };
-		AEF3F09834AB87411FD7F6AF1067B39D /* fbase64.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = fbase64.h; path = Firebase/Database/third_party/SocketRocket/fbase64.h; sourceTree = "<group>"; };
-		B1A323E1E6BBE609DB73C75EE7791C2C /* FUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FUtilities.m; path = Firebase/Database/Utilities/FUtilities.m; sourceTree = "<group>"; };
-		B1AEACA1BDF2D31AC8B5E8D8883CD1CA /* FIRDatabaseConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRDatabaseConfig.m; path = Firebase/Database/Api/FIRDatabaseConfig.m; sourceTree = "<group>"; };
-		B25E09C5A052F1C3A6AE26E97F071ED2 /* testharness.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = testharness.h; path = util/testharness.h; sourceTree = "<group>"; };
-		B299C026C8827C5F992F488CCBA2D192 /* FBLPromise+Do.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Do.h"; path = "Sources/FBLPromises/include/FBLPromise+Do.h"; sourceTree = "<group>"; };
-		B2A6FBBC1582B73F699D2622665AD418 /* GDTCORPlatform.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORPlatform.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORPlatform.m; sourceTree = "<group>"; };
-		B338B2C9808C5C0AF778CD7DADCE1AE8 /* FPathIndex.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FPathIndex.h; path = Firebase/Database/FPathIndex.h; sourceTree = "<group>"; };
-		B33A7C7D5DA6BCED7A54588D8B519573 /* FPriorityIndex.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FPriorityIndex.m; path = Firebase/Database/FPriorityIndex.m; sourceTree = "<group>"; };
-		B33DBADEF735E61DC443B9753E707E98 /* FIRRetryHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRRetryHelper.m; path = Firebase/Database/Core/Utilities/FIRRetryHelper.m; sourceTree = "<group>"; };
-		B376CAF865729E1CF465CFCCA52115D9 /* FIRComponent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRComponent.m; path = FirebaseCore/Sources/FIRComponent.m; sourceTree = "<group>"; };
-		B423C55EDD8B0EBA1C93A2C48DD3B22B /* FUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FUtilities.h; path = Firebase/Database/Utilities/FUtilities.h; sourceTree = "<group>"; };
-		B43874C6CBB50E7134FBEC24BABFE14F /* GoogleUtilities.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = GoogleUtilities.framework; path = GoogleUtilities.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-		B4600FE4208AE3E5795D8EBB5F97A617 /* GDTCORLifecycle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORLifecycle.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORLifecycle.h; sourceTree = "<group>"; };
-		B5129F030E10972C371924DB4DCFA600 /* FPruneForest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FPruneForest.m; path = Firebase/Database/Persistence/FPruneForest.m; sourceTree = "<group>"; };
-		B5182676AC9060524937E8799614DFAC /* FTupleTransaction.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleTransaction.m; path = Firebase/Database/Utilities/Tuples/FTupleTransaction.m; sourceTree = "<group>"; };
-		B52430627E2CEB470F4622858A8480DA /* FTreeNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTreeNode.m; path = Firebase/Database/Core/Utilities/FTreeNode.m; sourceTree = "<group>"; };
-		B5D4BE3DC5EADCF63F424C33B95D8E0F /* FIRCoreDiagnosticsConnector.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCoreDiagnosticsConnector.m; path = FirebaseCore/Sources/FIRCoreDiagnosticsConnector.m; sourceTree = "<group>"; };
-		B62F2EFD836B0B4D141B7D3B7A76D1C8 /* env_posix_test_helper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = env_posix_test_helper.h; path = util/env_posix_test_helper.h; sourceTree = "<group>"; };
-		B66C3F856B135140E3571B506C20655B /* leveldb-library-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "leveldb-library-Info.plist"; sourceTree = "<group>"; };
-		B6B1D21BE3FE785C043FD82E5E14181D /* FIRLibrary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRLibrary.h; path = FirebaseCore/Sources/Private/FIRLibrary.h; sourceTree = "<group>"; };
-		B6D497A2AD9B52065632EE2AA511D94A /* Pods-openTok-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-openTok-acknowledgements.plist"; sourceTree = "<group>"; };
-		B781D7A58A91FBED1BE497CD9B527741 /* FMerge.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FMerge.m; path = Firebase/Database/Core/Operation/FMerge.m; sourceTree = "<group>"; };
-		B835A6F7159081070635B80749DFB910 /* FTreeSortedDictionary.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTreeSortedDictionary.m; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionary.m; sourceTree = "<group>"; };
-		B93B0CDE62D8C9C5FE9C7139B4C0867E /* table_builder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = table_builder.h; path = include/leveldb/table_builder.h; sourceTree = "<group>"; };
-		B9D7744ACAB828228094C7FE549D9408 /* arena.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = arena.h; path = util/arena.h; sourceTree = "<group>"; };
-		BA31349F47B178F2D34395E3D9A54B31 /* Pods-openTok-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-openTok-Info.plist"; sourceTree = "<group>"; };
-		BA39E2C48027666F9469709D4DC983B4 /* FirebaseDatabase-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FirebaseDatabase-umbrella.h"; sourceTree = "<group>"; };
-		BACDC3D5A2E777358D664B3A45214F03 /* FAckUserWrite.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FAckUserWrite.m; path = Firebase/Database/Core/Operation/FAckUserWrite.m; sourceTree = "<group>"; };
-		BAE3B72678AB5BFDAF8CA9B8BB4477B6 /* thread_annotations.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = thread_annotations.h; path = port/thread_annotations.h; sourceTree = "<group>"; };
-		BB0D2688C1F6E5C119D27FA7EB2A6087 /* FBLPromise+All.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+All.m"; path = "Sources/FBLPromises/FBLPromise+All.m"; sourceTree = "<group>"; };
-		BB2662A73E4AB039897681B4F9987F6A /* no_destructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = no_destructor.h; path = util/no_destructor.h; sourceTree = "<group>"; };
-		BBCAFB9BB21E3ACB769B48A3B1C75463 /* port.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = port.h; path = port/port.h; sourceTree = "<group>"; };
-		BBE58D8C7B4DF5B650E6528061BAF00C /* GDTCORAssert.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORAssert.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORAssert.h; sourceTree = "<group>"; };
-		BD9507903A6A4787A9BCB8293A9F3826 /* FOverwrite.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FOverwrite.m; path = Firebase/Database/Core/Operation/FOverwrite.m; sourceTree = "<group>"; };
-		BE1A8F7A905D09BE7EB82BBFF174EE78 /* iterator_wrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = iterator_wrapper.h; path = table/iterator_wrapper.h; sourceTree = "<group>"; };
-		BE1FF88442223E72C05A63E1D359C30A /* FTupleFirebase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleFirebase.m; path = Firebase/Database/Utilities/Tuples/FTupleFirebase.m; sourceTree = "<group>"; };
-		BE2B0C81910979BDBCB280D64692E5BF /* FChildEventRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FChildEventRegistration.m; path = Firebase/Database/Core/View/FChildEventRegistration.m; sourceTree = "<group>"; };
-		BF564EDAEE1DA9A93B72737F09F33227 /* crc32c.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = crc32c.cc; path = util/crc32c.cc; sourceTree = "<group>"; };
-		C06D9B56F82CF06972FE49E8E289A7E2 /* PromisesObjC.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = PromisesObjC.modulemap; sourceTree = "<group>"; };
-		C08F5263A7EA97B8AD1A8772345B4295 /* FPathIndex.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FPathIndex.m; path = Firebase/Database/FPathIndex.m; sourceTree = "<group>"; };
-		C10C6020EDDB2016BD64181B672CBC2C /* GDTCORFlatFileStorage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORFlatFileStorage.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORFlatFileStorage.h; sourceTree = "<group>"; };
-		C1138211F92A15BC81CD2389748F9E8B /* FIRDataSnapshot_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDataSnapshot_Private.h; path = Firebase/Database/Api/Private/FIRDataSnapshot_Private.h; sourceTree = "<group>"; };
-		C22C5C60494445166C096866D5BC162E /* FSnapshotUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FSnapshotUtilities.m; path = Firebase/Database/Snapshot/FSnapshotUtilities.m; sourceTree = "<group>"; };
-		C24A10EC10F9B315031342CB463C1F89 /* version_edit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = version_edit.h; path = db/version_edit.h; sourceTree = "<group>"; };
-		C26746AB2A5D53AF8402A1B015403633 /* GoogleUtilities.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleUtilities.debug.xcconfig; sourceTree = "<group>"; };
-		C2760200A696A747EB2BB8996E5F37C0 /* FTuplePathValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTuplePathValue.h; path = Firebase/Database/Utilities/Tuples/FTuplePathValue.h; sourceTree = "<group>"; };
-		C295B47E516F633178D34FA8303E944A /* FMaxNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FMaxNode.h; path = Firebase/Database/FMaxNode.h; sourceTree = "<group>"; };
-		C36919082934B6801606679F9235BAA5 /* FValueEventRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FValueEventRegistration.h; path = Firebase/Database/Core/View/FValueEventRegistration.h; sourceTree = "<group>"; };
-		C3962A70D732F744EB86C655C8904117 /* FirebaseCore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FirebaseCore.modulemap; sourceTree = "<group>"; };
-		C3F1EA207BC255E9BA95DB0C99A876B3 /* FTrackedQueryManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTrackedQueryManager.h; path = Firebase/Database/Persistence/FTrackedQueryManager.h; sourceTree = "<group>"; };
-		C443A630A1668A448ECF8A09F457DEFA /* pb_encode.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pb_encode.c; sourceTree = "<group>"; };
-		C4C0ED34A72FF0624A93EC40E7CF6B37 /* leveldb-library-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "leveldb-library-umbrella.h"; sourceTree = "<group>"; };
-		C5878F2A6B4FDCC6F17613A13676081E /* FBLPromise+Testing.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Testing.m"; path = "Sources/FBLPromises/FBLPromise+Testing.m"; sourceTree = "<group>"; };
-		C659D2D4B99C8CDA79646FE859D2696A /* filter_policy.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = filter_policy.cc; path = util/filter_policy.cc; sourceTree = "<group>"; };
-		C6D8EEB350A4ECED82D557A3EAB5AA77 /* GoogleUtilities-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GoogleUtilities-dummy.m"; sourceTree = "<group>"; };
-		C83F672C79ADC28FEFB9E4671207B48F /* fbase64.c */ = {isa = PBXFileReference; includeInIndex = 1; name = fbase64.c; path = Firebase/Database/third_party/SocketRocket/fbase64.c; sourceTree = "<group>"; };
-		C8ADE11EC03AF033C186B754146EB29F /* FirebaseCoreDiagnostics-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FirebaseCoreDiagnostics-umbrella.h"; sourceTree = "<group>"; };
-		CA283EA1FDCDD01C444F2DFCB23D0B41 /* FImmutableSortedDictionary.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FImmutableSortedDictionary.m; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedDictionary.m; sourceTree = "<group>"; };
-		CA6848D4B1055686D25D93DF40B2C915 /* GDTCORReachability_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORReachability_Private.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORReachability_Private.h; sourceTree = "<group>"; };
-		CAD6EEF839E19AE78EB0C9FF88CBECE2 /* GDTCORConsoleLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORConsoleLogger.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORConsoleLogger.h; sourceTree = "<group>"; };
-		CAD98370F606C47C0E85A961278677BC /* FMaxNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FMaxNode.m; path = Firebase/Database/FMaxNode.m; sourceTree = "<group>"; };
-		CB03CAD9E17D96C89C856908211FD5AB /* GULLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULLogger.h; path = GoogleUtilities/Logger/Private/GULLogger.h; sourceTree = "<group>"; };
-		CB4A191F4483E65DD757ECF72435553C /* FPersistentConnection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FPersistentConnection.m; path = Firebase/Database/Core/FPersistentConnection.m; sourceTree = "<group>"; };
-		CBF9637B074AD29A17C37F3502AF829A /* FIndex.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIndex.m; path = Firebase/Database/FIndex.m; sourceTree = "<group>"; };
-		CD158462CD76FEB1BCB0075BEED53C2A /* FEmptyNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FEmptyNode.m; path = Firebase/Database/Snapshot/FEmptyNode.m; sourceTree = "<group>"; };
-		CD22B20DCEE97C6687C597002DC5BE44 /* FTransformedEnumerator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTransformedEnumerator.m; path = Firebase/Database/FTransformedEnumerator.m; sourceTree = "<group>"; };
-		CE06D2F80F632B8CC85AEB98C01748F7 /* FBLPromise+Delay.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Delay.m"; path = "Sources/FBLPromises/FBLPromise+Delay.m"; sourceTree = "<group>"; };
-		CEDB10734368755E95741BEF1CF380C3 /* FTupleObjectNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleObjectNode.h; path = Firebase/Database/Utilities/Tuples/FTupleObjectNode.h; sourceTree = "<group>"; };
-		D14605E2B290BBFBCFE713BA4B20BA76 /* FChildrenNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FChildrenNode.m; path = Firebase/Database/Snapshot/FChildrenNode.m; sourceTree = "<group>"; };
-		D1E6D1D803B379D5B9D499DC2AEAAD57 /* FTupleBoolBlock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleBoolBlock.h; path = Firebase/Database/Utilities/Tuples/FTupleBoolBlock.h; sourceTree = "<group>"; };
-		D212664CA6B122A499E6AAE0259F5F5D /* GDTCOREventDataObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCOREventDataObject.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCOREventDataObject.h; sourceTree = "<group>"; };
-		D25C535A0ED2942C4E794B83583D12CD /* snapshot.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = snapshot.h; path = db/snapshot.h; sourceTree = "<group>"; };
-		D2A24B05955F1EE99EBC76E88971F2D8 /* FBLPromise+Retry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Retry.h"; path = "Sources/FBLPromises/include/FBLPromise+Retry.h"; sourceTree = "<group>"; };
-		D2C19F3B7A322A65FA2CC3F20A6DF678 /* leveldb-library.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "leveldb-library.release.xcconfig"; sourceTree = "<group>"; };
-		D300E695491585B083A58415F81511F1 /* FTrackedQuery.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTrackedQuery.m; path = Firebase/Database/Persistence/FTrackedQuery.m; sourceTree = "<group>"; };
-		D3B07B31DDBEA3C5582D124B8D3B6443 /* GDTCCTCompressionHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCCTCompressionHelper.h; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTCompressionHelper.h; sourceTree = "<group>"; };
-		D3C76A00399095A4DAA2020273DEE53B /* leveldb-library.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "leveldb-library.debug.xcconfig"; sourceTree = "<group>"; };
-		D595AE273F09F91E6ECCB09DDE4BE1CA /* FRepo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FRepo.h; path = Firebase/Database/Core/FRepo.h; sourceTree = "<group>"; };
-		D5D7486A6BEF323ADBAE7A259186E285 /* FTransformedEnumerator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTransformedEnumerator.h; path = Firebase/Database/FTransformedEnumerator.h; sourceTree = "<group>"; };
-		D60179BD88EF9A234D60E6EDB1EEA0C5 /* FTupleOnDisconnect.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleOnDisconnect.m; path = Firebase/Database/Utilities/Tuples/FTupleOnDisconnect.m; sourceTree = "<group>"; };
-		D6870577D6F4991A666E6914A2F487A4 /* FIRDataEventType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDataEventType.h; path = Firebase/Database/Public/FIRDataEventType.h; sourceTree = "<group>"; };
-		D7C3CEC573454AA3BE96772D20CBD14F /* FIndexedFilter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIndexedFilter.m; path = Firebase/Database/Core/View/Filter/FIndexedFilter.m; sourceTree = "<group>"; };
-		D94F03D0CD3C49BEAAAACD23DB190B70 /* Firebase.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Firebase.debug.xcconfig; sourceTree = "<group>"; };
-		D95FFC4B09BC1ED974D778A5C00737B1 /* FIRComponentType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRComponentType.m; path = FirebaseCore/Sources/FIRComponentType.m; sourceTree = "<group>"; };
-		D96FB1E0748CB2643821DE1953901D3B /* FTypedefs_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTypedefs_Private.h; path = Firebase/Database/Api/Private/FTypedefs_Private.h; sourceTree = "<group>"; };
-		D9A699DB734FC836C80F34584A4A6781 /* FEventRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FEventRegistration.h; path = Firebase/Database/Core/View/FEventRegistration.h; sourceTree = "<group>"; };
-		D9C044CDB58F661488097BB87AF131F0 /* GDTCORRegistrar_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORRegistrar_Private.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORRegistrar_Private.h; sourceTree = "<group>"; };
-		DA1705E3E3B1D427074C708CE40F9CAC /* FLeafNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLeafNode.m; path = Firebase/Database/Snapshot/FLeafNode.m; sourceTree = "<group>"; };
-		DB9220001C09A1747358192EC9ED2C84 /* FRepoInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FRepoInfo.m; path = Firebase/Database/Core/FRepoInfo.m; sourceTree = "<group>"; };
-		DBB2A2E28ED4F674F6370BD3D6B4AB5A /* FChildChangeAccumulator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FChildChangeAccumulator.h; path = Firebase/Database/Core/View/Filter/FChildChangeAccumulator.h; sourceTree = "<group>"; };
-		DBD5F0D6D5607CCC279F0AA16086D019 /* nanopb-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "nanopb-umbrella.h"; sourceTree = "<group>"; };
-		DC29D06EF9DB0608699CE6668F459127 /* FViewCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FViewCache.h; path = Firebase/Database/Core/View/FViewCache.h; sourceTree = "<group>"; };
-		DD34FF93A6587C0B4E47FFD49CA5445E /* FListenComplete.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FListenComplete.h; path = Firebase/Database/FListenComplete.h; sourceTree = "<group>"; };
-		DE08BA4A6C1A53923EC02F9A515107F8 /* write_batch_internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = write_batch_internal.h; path = db/write_batch_internal.h; sourceTree = "<group>"; };
-		DE8DDBC684EAB94B117FB431D6983794 /* FTupleBoolBlock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleBoolBlock.m; path = Firebase/Database/Utilities/Tuples/FTupleBoolBlock.m; sourceTree = "<group>"; };
-		DF3E939FA895E12649FDF094D1D8DC7D /* pb_common.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pb_common.c; sourceTree = "<group>"; };
-		DF67693BB6E8BFC4254953D2178F5408 /* FPersistenceManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FPersistenceManager.h; path = Firebase/Database/Persistence/FPersistenceManager.h; sourceTree = "<group>"; };
-		DF9EDE9DB2CF0517FF04BC31DCAEC0FE /* FNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FNode.h; path = Firebase/Database/Snapshot/FNode.h; sourceTree = "<group>"; };
-		DFDD92BA3AA85D306208B74066AA26E9 /* FNodeFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FNodeFilter.h; path = Firebase/Database/Core/View/Filter/FNodeFilter.h; sourceTree = "<group>"; };
-		E0133CE971C065D957EDE8B9AAF9B36F /* FTupleSetIdPath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleSetIdPath.m; path = Firebase/Database/Utilities/Tuples/FTupleSetIdPath.m; sourceTree = "<group>"; };
-		E090AC85D60368344DE2CF202EDFBFE3 /* FirebaseDatabase-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FirebaseDatabase-dummy.m"; sourceTree = "<group>"; };
-		E0B7CD0C231C6586963B625078141F9B /* logging.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = logging.cc; path = util/logging.cc; sourceTree = "<group>"; };
-		E0EBF5A75E65BAB478184C63E9D29E55 /* FRepo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FRepo.m; path = Firebase/Database/Core/FRepo.m; sourceTree = "<group>"; };
-		E17B23410BF812634C8DD594B2392929 /* FRepo_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FRepo_Private.h; path = Firebase/Database/Core/FRepo_Private.h; sourceTree = "<group>"; };
-		E1FC5A36113AB7A7F53F63FA047F3B95 /* FNextPushId.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FNextPushId.h; path = Firebase/Database/Utilities/FNextPushId.h; sourceTree = "<group>"; };
-		E21CC05454593B859E1DD97BECD0AF1C /* histogram.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = histogram.cc; path = util/histogram.cc; sourceTree = "<group>"; };
-		E2A534E083CF2D8F6EC559D6489659F4 /* GoogleDataTransport-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GoogleDataTransport-umbrella.h"; sourceTree = "<group>"; };
-		E2B63D462DB7F827C4B11FD51E4F8E2D /* FirebaseCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FirebaseCore.framework; path = FirebaseCore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-		E2B8A272C8F2DE84AE5BEE68D7C5A30F /* FPersistentConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FPersistentConnection.h; path = Firebase/Database/Core/FPersistentConnection.h; sourceTree = "<group>"; };
-		E37B33D6D220B28F622B08C2BA4A4DC6 /* FClock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FClock.m; path = Firebase/Database/FClock.m; sourceTree = "<group>"; };
-		E3B99A902AB32FA5853427C93DCEA165 /* db_iter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = db_iter.h; path = db/db_iter.h; sourceTree = "<group>"; };
-		E3E8EF9776569DF1C4FBACF2A05C6984 /* GDTCCTNanopbHelpers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCCTNanopbHelpers.h; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTNanopbHelpers.h; sourceTree = "<group>"; };
-		E4CF0D1BCDD54ABB40EE9AD5F541C198 /* coding.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = coding.cc; path = util/coding.cc; sourceTree = "<group>"; };
-		E58F4E0A35AE5270A10F0B182C0CBC9E /* FNextPushId.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FNextPushId.m; path = Firebase/Database/Utilities/FNextPushId.m; sourceTree = "<group>"; };
-		E5FE3C03918579D14DEB83FD5B810D8C /* FIRAnalyticsConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAnalyticsConfiguration.h; path = FirebaseCore/Sources/Private/FIRAnalyticsConfiguration.h; sourceTree = "<group>"; };
-		E7C728948CE0F1485BF0F4BAFD54D11C /* FSyncTree.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FSyncTree.m; path = Firebase/Database/Core/FSyncTree.m; sourceTree = "<group>"; };
-		E8DE921A3AADBF970D703992669E82E0 /* version_edit.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = version_edit.cc; path = db/version_edit.cc; sourceTree = "<group>"; };
-		E9558FB6E3417EEB6ACC4BAC9665F3A6 /* cct.nanopb.c */ = {isa = PBXFileReference; includeInIndex = 1; name = cct.nanopb.c; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.c; sourceTree = "<group>"; };
-		E9A9F5F708FDFD0E308F6410820EE811 /* FTree.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTree.h; path = Firebase/Database/Core/Utilities/FTree.h; sourceTree = "<group>"; };
-		EA42623F573679F9A5B044DF94A4DDA6 /* FIRTransactionResult_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRTransactionResult_Private.h; path = Firebase/Database/Api/Private/FIRTransactionResult_Private.h; sourceTree = "<group>"; };
-		EAE499B2DF8EBB7143A877BF5CDAEF4E /* FTupleUserCallback.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleUserCallback.h; path = Firebase/Database/Utilities/Tuples/FTupleUserCallback.h; sourceTree = "<group>"; };
-		EAEAD2C37A2F7D54EB5D112BE700E464 /* FTupleRemovedQueriesEvents.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleRemovedQueriesEvents.m; path = Firebase/Database/Utilities/Tuples/FTupleRemovedQueriesEvents.m; sourceTree = "<group>"; };
-		EB37EA4EA45CE7F317015ADC8D64A10E /* FirebaseCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "FirebaseCore-Info.plist"; sourceTree = "<group>"; };
-		EB4E2D2A1C3DEB62CAA9C59348F802D1 /* Firebase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Firebase.h; path = CoreOnly/Sources/Firebase.h; sourceTree = "<group>"; };
-		EB6A33237EFBF55F3A9EBC83F548B03D /* FValueIndex.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FValueIndex.h; path = Firebase/Database/FValueIndex.h; sourceTree = "<group>"; };
-		EBA7E6C2A107483467C6124774CEF75D /* block.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = block.h; path = table/block.h; sourceTree = "<group>"; };
-		EBAA464D5B2F65ED6BE6FB25E8A135C5 /* FKeepSyncedEventRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FKeepSyncedEventRegistration.m; path = Firebase/Database/Core/View/FKeepSyncedEventRegistration.m; sourceTree = "<group>"; };
-		EC267D96A5B075660F91DDA49D90E56C /* FTupleObjects.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleObjects.m; path = Firebase/Database/Utilities/Tuples/FTupleObjects.m; sourceTree = "<group>"; };
-		EC6B40288A57CC407F022CB43E26AAF1 /* FCacheNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FCacheNode.m; path = Firebase/Database/Core/View/FCacheNode.m; sourceTree = "<group>"; };
-		EC794BDF881104077CA6D858C004F116 /* GDTCORUploadPackage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORUploadPackage.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORUploadPackage.h; sourceTree = "<group>"; };
-		ED14BCF081A83EBB8A978CDDD5E13ADD /* FBLPromise+Reduce.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Reduce.h"; path = "Sources/FBLPromises/include/FBLPromise+Reduce.h"; sourceTree = "<group>"; };
-		ED2B093C80BA032660F888C7F81B1D9D /* c.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = c.h; path = include/leveldb/c.h; sourceTree = "<group>"; };
-		EE5C51CE831C623408DB778C1ABA0148 /* FBLPromise+Catch.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Catch.m"; path = "Sources/FBLPromises/FBLPromise+Catch.m"; sourceTree = "<group>"; };
-		EEAFB8AE27936F24FCBC0EBF570E19DF /* FIROptions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIROptions.m; path = FirebaseCore/Sources/FIROptions.m; sourceTree = "<group>"; };
-		EEFA0E6408C1EE9694F24C8CDD87CC8E /* FSparseSnapshotTree.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FSparseSnapshotTree.m; path = Firebase/Database/Core/FSparseSnapshotTree.m; sourceTree = "<group>"; };
-		F0534E9B7F9A2AC947BBFFCC17B73753 /* FParsedUrl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FParsedUrl.h; path = Firebase/Database/Utilities/FParsedUrl.h; sourceTree = "<group>"; };
-		F13DF5348224F0D6CBA0689639782254 /* slice.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = slice.h; path = include/leveldb/slice.h; sourceTree = "<group>"; };
-		F21172F501A44D23EDDB3AEA5234235C /* builder.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = builder.cc; path = db/builder.cc; sourceTree = "<group>"; };
-		F229899516D0622E81CAD20651193F00 /* FIRDatabaseQuery.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRDatabaseQuery.m; path = Firebase/Database/Api/FIRDatabaseQuery.m; sourceTree = "<group>"; };
-		F24B2FE999A991B0FB72A88254F127A9 /* GDTCOREvent_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCOREvent_Private.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCOREvent_Private.h; sourceTree = "<group>"; };
-		F2560D7CA1567608F6BCDCD70881AFB4 /* FTypedefs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTypedefs.h; path = Firebase/Database/Utilities/FTypedefs.h; sourceTree = "<group>"; };
-		F26C357D95872C344F908100D46E5153 /* FEventGenerator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FEventGenerator.m; path = Firebase/Database/FEventGenerator.m; sourceTree = "<group>"; };
-		F28A8199104EC2C984FA676FED6D9FBF /* FBLPromise+Delay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Delay.h"; path = "Sources/FBLPromises/include/FBLPromise+Delay.h"; sourceTree = "<group>"; };
-		F3082C73B86C39432F3BEE1DB2F53924 /* GDTCOREventTransformer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCOREventTransformer.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCOREventTransformer.h; sourceTree = "<group>"; };
-		F34FEBEB586D8DDC4CE36905BFC79C9B /* FListenProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FListenProvider.h; path = Firebase/Database/Core/FListenProvider.h; sourceTree = "<group>"; };
-		F42C7C268617DB7675F42B8B5E5495AA /* FKeepSyncedEventRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FKeepSyncedEventRegistration.h; path = Firebase/Database/Core/View/FKeepSyncedEventRegistration.h; sourceTree = "<group>"; };
-		F47CA6F1F12ACAF9B0755A517EEF8774 /* FQueryParams.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FQueryParams.h; path = Firebase/Database/Core/FQueryParams.h; sourceTree = "<group>"; };
-		F4D50B06AA311127F439590F709F5807 /* FIRComponentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRComponentType.h; path = FirebaseCore/Sources/Private/FIRComponentType.h; sourceTree = "<group>"; };
-		F4DC65C04D076732C25AE29A2908DF95 /* GDTCORRegistrar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORRegistrar.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORRegistrar.m; sourceTree = "<group>"; };
-		F64C9236D303103F4D3C397C4862BAA9 /* FServerValues.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FServerValues.h; path = Firebase/Database/Core/FServerValues.h; sourceTree = "<group>"; };
-		F7A2885FF922A7315C564CF997DC7503 /* FirebaseDatabase.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FirebaseDatabase.modulemap; sourceTree = "<group>"; };
-		F8514701493814AB84C06709B66B8991 /* FTree.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTree.m; path = Firebase/Database/Core/Utilities/FTree.m; sourceTree = "<group>"; };
-		F86A2D7DF81C3E8869A794D7E0292C97 /* db_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = db_impl.h; path = db/db_impl.h; sourceTree = "<group>"; };
-		F8A34FFCCCD318ED0E09E4B62FAF6EA8 /* options.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = options.h; path = include/leveldb/options.h; sourceTree = "<group>"; };
-		F8B8FAE3380266FF581E5704B032BC1D /* FBLPromise+Timeout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Timeout.h"; path = "Sources/FBLPromises/include/FBLPromise+Timeout.h"; sourceTree = "<group>"; };
-		F8CC6FBC5815D2063DB2E3808DC024DB /* leveldb-library-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "leveldb-library-prefix.pch"; sourceTree = "<group>"; };
-		F8FDB31CF6B1C1358EE35ADE19844DC7 /* FBLPromise+Always.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Always.h"; path = "Sources/FBLPromises/include/FBLPromise+Always.h"; sourceTree = "<group>"; };
-		F907DDF83A30F1299472C033320155FC /* version_set.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = version_set.h; path = db/version_set.h; sourceTree = "<group>"; };
-		F9B57561D347F59214C52B97CB5421A8 /* FRepoInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FRepoInfo.h; path = Firebase/Database/Core/FRepoInfo.h; sourceTree = "<group>"; };
-		FA32E456E1C52FF9AC73AE5949A43B5E /* FBLPromise+Recover.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Recover.m"; path = "Sources/FBLPromises/FBLPromise+Recover.m"; sourceTree = "<group>"; };
-		FA42256409F6AE11E423BC2D052A2AB3 /* FPendingPut.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FPendingPut.m; path = Firebase/Database/Persistence/FPendingPut.m; sourceTree = "<group>"; };
-		FA47D62FD3660036076067B875D655A9 /* FEventGenerator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FEventGenerator.h; path = Firebase/Database/FEventGenerator.h; sourceTree = "<group>"; };
-		FAD139992C71368B1D6232300F330E1E /* FIRApp.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRApp.m; path = FirebaseCore/Sources/FIRApp.m; sourceTree = "<group>"; };
-		FB1BD93373D49F12576A33ADBC3BB1E8 /* FTupleSetIdPath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleSetIdPath.h; path = Firebase/Database/Utilities/Tuples/FTupleSetIdPath.h; sourceTree = "<group>"; };
-		FB1CF18DE410CAADC9B10DDD72B0B536 /* GULAppEnvironmentUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULAppEnvironmentUtil.h; path = GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.h; sourceTree = "<group>"; };
-		FBA2C6C1EE48B9B639ED048474EB4157 /* hash.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = hash.cc; path = util/hash.cc; sourceTree = "<group>"; };
-		FC1EFE2DCD55CE417891AFDE45E7C27A /* FSyncTree.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSyncTree.h; path = Firebase/Database/Core/FSyncTree.h; sourceTree = "<group>"; };
-		FC65A9652178080D84042446A2B9C021 /* FIRDependency.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDependency.h; path = FirebaseCore/Sources/Private/FIRDependency.h; sourceTree = "<group>"; };
-		FD7581EECCCABA4BECF7F34AA2731B64 /* FIRDatabase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDatabase.h; path = Firebase/Database/Public/FIRDatabase.h; sourceTree = "<group>"; };
-		FD83A1F8DD099D0395534007C8A5EA71 /* memtable.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = memtable.cc; path = db/memtable.cc; sourceTree = "<group>"; };
-		FE464F7C6ACA43984F0CE6C4734378E8 /* FirebaseCoreDiagnostics.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseCoreDiagnostics.debug.xcconfig; sourceTree = "<group>"; };
-		FE5998250B73CE8F1C7FC072542E79C7 /* FKeyIndex.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FKeyIndex.m; path = Firebase/Database/FKeyIndex.m; sourceTree = "<group>"; };
-		FFADC6E448C500341452C5E5C14C8B48 /* FValueEventRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FValueEventRegistration.m; path = Firebase/Database/Core/View/FValueEventRegistration.m; sourceTree = "<group>"; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
-		2B847EC9F642EFA623AF85427D7F5D6C /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				7C53A6196C34CBBE5F47F4B30215F6A8 /* Foundation.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		301942F9FBB54A7C29EC65FB93D084B5 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				665579D80965906C049310B67DB8A18F /* Foundation.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		477B1EBCCA0EF7E6D74F2C2243B920B9 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				22A247A90EF8093E9BA1B0D58AD11D6D /* Foundation.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		4D795267449E2E77F2C9E12DF3785D06 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				8464F1BABCF4CAA35574FDCFF3BB99DE /* Foundation.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		4F00AE09C48E9A5504870A90CE6F1EAE /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				36AFEF5F38B16A22C7ACE7DD9037AD76 /* Foundation.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		5617A0BB9C5753E42E7D79212AF605E0 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				95075C8107ED96F6C5E393C0528BAA24 /* Foundation.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		5BCF26CE614C85AC64F9F81B7F404C0F /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				D3AA7BFC4F1811139A87AED29C65B568 /* Foundation.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		6751468BB80C4AF1CF6394E0BD57CF9F /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				C7A5F5CE6CDF617255F34E95436634B0 /* Foundation.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		7B7CEF043B39B6E95CBFE1B56CED771E /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				ABD93BC90532E19EC023F2EF7F9D9371 /* Foundation.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		B959A7F826CE815470B03B08C71E5942 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				43A804271733F4A147E063DC379C6060 /* FBLPromises.framework in Frameworks */,
-				2791FE6C4F39B16C3799C83AA518523B /* Foundation.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
-		0090480FAAAF214A35BF433A410D49DF /* FirebaseCoreDiagnostics */ = {
-			isa = PBXGroup;
-			children = (
-				0639F28CB196245922C7D8D3836E0964 /* FIRCoreDiagnostics.m */,
-				19E1B93177BA8A0D2F8885B9BFF9D994 /* firebasecore.nanopb.c */,
-				7193CDB6EF41B0AEB292E144AC86B962 /* firebasecore.nanopb.h */,
-				D7A929CB0184DEB473B7B44F17CFF47E /* Support Files */,
-			);
-			name = FirebaseCoreDiagnostics;
-			path = FirebaseCoreDiagnostics;
-			sourceTree = "<group>";
-		};
-		00FFE1454901BD5E4F8B7C065C6C99D3 /* Support Files */ = {
-			isa = PBXGroup;
-			children = (
-				C3962A70D732F744EB86C655C8904117 /* FirebaseCore.modulemap */,
-				8A4F5BC1A826B07C0F4C1030B7CBA8CD /* FirebaseCore-dummy.m */,
-				EB37EA4EA45CE7F317015ADC8D64A10E /* FirebaseCore-Info.plist */,
-				917F14DB5F41240C3D285C5384050E2C /* FirebaseCore-umbrella.h */,
-				5F3DC736CC472D8C083FEE2D95582EF6 /* FirebaseCore.debug.xcconfig */,
-				3A78563412DD19D641BB6F1F170DA015 /* FirebaseCore.release.xcconfig */,
-			);
-			name = "Support Files";
-			path = "../Target Support Files/FirebaseCore";
-			sourceTree = "<group>";
-		};
-		08FCE314B2BEFDBD429FDE4BAA06FB80 /* Support Files */ = {
-			isa = PBXGroup;
-			children = (
-				C06D9B56F82CF06972FE49E8E289A7E2 /* PromisesObjC.modulemap */,
-				47CD1AEAB4C797A6A730DB00DE47D9CB /* PromisesObjC-dummy.m */,
-				7910CA09A4822C96B09D982D5AA1AAFD /* PromisesObjC-Info.plist */,
-				394D1BEAD6AA9B9EFDBAA0EAAB06D478 /* PromisesObjC-umbrella.h */,
-				33ECE23F2ECD946250E06C49AD38D464 /* PromisesObjC.debug.xcconfig */,
-				4517272EC7E584B42E4C304B2779D6B2 /* PromisesObjC.release.xcconfig */,
-			);
-			name = "Support Files";
-			path = "../Target Support Files/PromisesObjC";
-			sourceTree = "<group>";
-		};
-		106133EDDEB417663076A59D4FFAD214 /* Pods-openTok */ = {
-			isa = PBXGroup;
-			children = (
-				5C1A3ED649EAA4D369C665A9C4887D7D /* Pods-openTok.modulemap */,
-				076B0F9655C1D328103BF4CFB4F0E0EC /* Pods-openTok-acknowledgements.markdown */,
-				B6D497A2AD9B52065632EE2AA511D94A /* Pods-openTok-acknowledgements.plist */,
-				66E4FD9B631E9F35722D53A6EC999ACE /* Pods-openTok-dummy.m */,
-				27DA1AAEA65D58C03CF0B6628644FE95 /* Pods-openTok-frameworks.sh */,
-				BA31349F47B178F2D34395E3D9A54B31 /* Pods-openTok-Info.plist */,
-				3B87707E352D3B5520BAD0A84C358DC8 /* Pods-openTok-umbrella.h */,
-				0D46DA763E703DDDB7846A3B498EA469 /* Pods-openTok.debug.xcconfig */,
-				5FD0137BAD2B0EED669DF6AC601CAB94 /* Pods-openTok.release.xcconfig */,
-			);
-			name = "Pods-openTok";
-			path = "Target Support Files/Pods-openTok";
-			sourceTree = "<group>";
-		};
-		14A5A8D41905FA5E4A0C0A5BFAB417B0 /* Logger */ = {
-			isa = PBXGroup;
-			children = (
-				CB03CAD9E17D96C89C856908211FD5AB /* GULLogger.h */,
-				06EC7B364270EE75563BEB149A98E2DC /* GULLogger.m */,
-				3144BEFF69AFAEDE619B25FE59B16969 /* GULLoggerLevel.h */,
-			);
-			name = Logger;
-			sourceTree = "<group>";
-		};
-		1B4EBD07C7FF3B9DFD52CF040166F1D6 /* Pods */ = {
-			isa = PBXGroup;
-			children = (
-				40C69A44B1557415FA9F57EE5FB199F4 /* Firebase */,
-				90ADE0A91FF96131961B084B8649A310 /* FirebaseAuthInterop */,
-				EEEC29BDBC15B23A4B68997A977DC826 /* FirebaseCore */,
-				0090480FAAAF214A35BF433A410D49DF /* FirebaseCoreDiagnostics */,
-				1C34D934CD8D16CE8F713143FB40BA94 /* FirebaseCoreDiagnosticsInterop */,
-				85B110C7B614BAAC33765E8011E188F9 /* FirebaseDatabase */,
-				4750F567B1A83B07A3BF48753AA7299F /* GoogleDataTransport */,
-				7D921290F3FEF47501F3B36519940850 /* GoogleDataTransportCCTSupport */,
-				6ECE8D03379F08D25D8C811D33C5B4C5 /* GoogleUtilities */,
-				21229610F5553CCF2953E99B9EADF8F9 /* leveldb-library */,
-				5DA437DAF035B2E772BC1AE4E1506CF1 /* nanopb */,
-				61C4012B92C92E604D92F4DD2F5639D7 /* PromisesObjC */,
-			);
-			name = Pods;
-			sourceTree = "<group>";
-		};
-		1C34D934CD8D16CE8F713143FB40BA94 /* FirebaseCoreDiagnosticsInterop */ = {
-			isa = PBXGroup;
-			children = (
-				4D8F88C55CA62E3CEF68D39A29F74646 /* FIRCoreDiagnosticsData.h */,
-				3639E6825CB07BF545A128E69034513C /* FIRCoreDiagnosticsInterop.h */,
-				AA07292FD2905535EE2E39FF9206B8EF /* Support Files */,
-			);
-			name = FirebaseCoreDiagnosticsInterop;
-			path = FirebaseCoreDiagnosticsInterop;
-			sourceTree = "<group>";
-		};
-		21229610F5553CCF2953E99B9EADF8F9 /* leveldb-library */ = {
-			isa = PBXGroup;
-			children = (
-				3787BE6B13B4E6006135EB46DB54DC42 /* arena.cc */,
-				B9D7744ACAB828228094C7FE549D9408 /* arena.h */,
-				4D75E00B047D89EA15BE5CDEE752D7A0 /* block.cc */,
-				EBA7E6C2A107483467C6124774CEF75D /* block.h */,
-				6EB5D83F05D2269F33466C7DCFCD26A0 /* block_builder.cc */,
-				4E856DB50BD68A84A63AE55499872178 /* block_builder.h */,
-				AA690BDFA65E8C410A82130B3483B82A /* bloom.cc */,
-				F21172F501A44D23EDDB3AEA5234235C /* builder.cc */,
-				673B1B561ACB418F330B4478AE33C9F3 /* builder.h */,
-				5D7BD1D203706AD133B003DE154D40AC /* c.cc */,
-				ED2B093C80BA032660F888C7F81B1D9D /* c.h */,
-				81F3FD7983F8C4391CC30B4E7370767E /* cache.cc */,
-				A3823B10AD6A6B24863EBD4ECE0D691C /* cache.h */,
-				E4CF0D1BCDD54ABB40EE9AD5F541C198 /* coding.cc */,
-				7B7C8165FC40E1432F5EB7EA2782E04B /* coding.h */,
-				AC1A01D6B0D166DA6AAD158D6264F693 /* comparator.cc */,
-				98F196A197AFD44C0C2A0FB7E9BACF4C /* comparator.h */,
-				BF564EDAEE1DA9A93B72737F09F33227 /* crc32c.cc */,
-				91811F71C2FA9265B03192507FD0715D /* crc32c.h */,
-				621D483E45E92BE126C17E8261A0E6FA /* db.h */,
-				569511E399F07ABE1A4CBB713DF08B7B /* db_impl.cc */,
-				F86A2D7DF81C3E8869A794D7E0292C97 /* db_impl.h */,
-				2601511FCCD0B4CE7A74652349B3779A /* db_iter.cc */,
-				E3B99A902AB32FA5853427C93DCEA165 /* db_iter.h */,
-				8B05621A5EF759E47A44989B0245FC6A /* dbformat.cc */,
-				59E7355A640C2063FA68A1828CEF33A8 /* dbformat.h */,
-				87AE9B4D3596ECB04407EB93492E47BD /* dumpfile.cc */,
-				6581D2C778C2FD723629A78872C61FDC /* dumpfile.h */,
-				A674C7C09F1C351BFF34B1C8A0910870 /* env.cc */,
-				7D6E47B616DE755714427591880125AE /* env.h */,
-				A2D25B8664C78BB8A4AAAF6FA3EF21AB /* env_posix.cc */,
-				B62F2EFD836B0B4D141B7D3B7A76D1C8 /* env_posix_test_helper.h */,
-				083D3597C0190CB5D637CC9EE15579C8 /* env_windows_test_helper.h */,
-				784C73A1380FA3D7D7A731214DE53A13 /* export.h */,
-				5B797E52A5E7D33056211AE0FE28030B /* filename.cc */,
-				1942EA14A957EE8A1FD53150BCF5FC1E /* filename.h */,
-				2B470A9772DB8914D65302D7E669FDAF /* filter_block.cc */,
-				27F81C53060A8621A2223C2F50CD241B /* filter_block.h */,
-				C659D2D4B99C8CDA79646FE859D2696A /* filter_policy.cc */,
-				3FDA53CDBFCA82B7F7184B44BC7FBC7C /* filter_policy.h */,
-				338E9E4797BEAD2FFF893017AB97CC8B /* format.cc */,
-				72EB4F6047A67ABF94B6F8BA86D2D234 /* format.h */,
-				FBA2C6C1EE48B9B639ED048474EB4157 /* hash.cc */,
-				8DB35C5A4E090537BCD1F8382ACCD601 /* hash.h */,
-				E21CC05454593B859E1DD97BECD0AF1C /* histogram.cc */,
-				9A971A378B109444D68EC9F1710744D4 /* histogram.h */,
-				3C38FD08C4002E8A3E088547DD0523ED /* iterator.cc */,
-				46440B55B39BD26A9DF8DBAD2638BB2F /* iterator.h */,
-				BE1A8F7A905D09BE7EB82BBFF174EE78 /* iterator_wrapper.h */,
-				4321B4C224765D94C7503E3C6431F9B9 /* log_format.h */,
-				96B97BCFDFB29A395ECEFEEE53D89889 /* log_reader.cc */,
-				40FE1C2937524054AB15B3A3F4272345 /* log_reader.h */,
-				2A0B383E88DBB23E8139375596467FAC /* log_writer.cc */,
-				2E86539022322DD1F5296F3214CEC49E /* log_writer.h */,
-				E0B7CD0C231C6586963B625078141F9B /* logging.cc */,
-				635E69A93F16B99D33B27A6452B14DC5 /* logging.h */,
-				FD83A1F8DD099D0395534007C8A5EA71 /* memtable.cc */,
-				76A86C67D20E7FD637F775A4E9F95B51 /* memtable.h */,
-				3455A08B816E9633E67F45031FC9F6CD /* merger.cc */,
-				83AC43378C350989A6B691A3B81051E5 /* merger.h */,
-				8BC4618A1AB60D74C5C3EE23BEC70362 /* mutexlock.h */,
-				BB2662A73E4AB039897681B4F9987F6A /* no_destructor.h */,
-				1248B00EF3BE8EB5FDF7E92EE8995ABF /* options.cc */,
-				F8A34FFCCCD318ED0E09E4B62FAF6EA8 /* options.h */,
-				BBCAFB9BB21E3ACB769B48A3B1C75463 /* port.h */,
-				4781B46372655A8914D2F3F4F92B66A8 /* port_example.h */,
-				2902A4C38873FCFF5786F23795F66406 /* port_stdcxx.h */,
-				674C8CF50302A87EC7519C90AF0C6F61 /* posix_logger.h */,
-				98B5D3DAE49B0B1F304E5AAF9095F733 /* random.h */,
-				8F89CFE3165AF36055F7014246855162 /* repair.cc */,
-				15DFFF5A3D3D914F480B877952EFAFBD /* skiplist.h */,
-				F13DF5348224F0D6CBA0689639782254 /* slice.h */,
-				D25C535A0ED2942C4E794B83583D12CD /* snapshot.h */,
-				58308FFBBA52F24C69542503039DE365 /* status.cc */,
-				27B04C54C4F176938DD4A50E3DAD384D /* status.h */,
-				794FB584900DC2C9932AC53A681FF10C /* table.cc */,
-				35CE8D2A98B792BEEDD0D72E89B33BAD /* table.h */,
-				34621C372310B419B41B61763C42149F /* table_builder.cc */,
-				B93B0CDE62D8C9C5FE9C7139B4C0867E /* table_builder.h */,
-				60FDC5A59E02334D7C8B34614969FCAA /* table_cache.cc */,
-				2FE487E9D169B1987ED50BF7CA45AB85 /* table_cache.h */,
-				9C997CFFE0B0EB3DB9D6ADAF73854B4E /* testharness.cc */,
-				B25E09C5A052F1C3A6AE26E97F071ED2 /* testharness.h */,
-				95728A376DED6052F25B119402483838 /* testutil.h */,
-				BAE3B72678AB5BFDAF8CA9B8BB4477B6 /* thread_annotations.h */,
-				99C96C3B40C51D1D79FC28DC8197EB3C /* two_level_iterator.cc */,
-				3F3A37BF930274FDB2AF3C64E5BA6C63 /* two_level_iterator.h */,
-				E8DE921A3AADBF970D703992669E82E0 /* version_edit.cc */,
-				C24A10EC10F9B315031342CB463C1F89 /* version_edit.h */,
-				2FB3B6224E0EA157E5E5C71782ADA330 /* version_set.cc */,
-				F907DDF83A30F1299472C033320155FC /* version_set.h */,
-				3D339BC8AB099B5E05C88DAA77FBD0DF /* windows_logger.h */,
-				31965476AB0C9A0CA09E0AC2D405690B /* write_batch.cc */,
-				3C101CA28A87922BFF183FCB605139A6 /* write_batch.h */,
-				DE08BA4A6C1A53923EC02F9A515107F8 /* write_batch_internal.h */,
-				CEF4BDF97A3F68AB11FD0F39F6FC818A /* Support Files */,
-			);
-			name = "leveldb-library";
-			path = "leveldb-library";
-			sourceTree = "<group>";
-		};
-		28DC2CE1ADE7CB9A548DB101E5CF8D11 /* Support Files */ = {
-			isa = PBXGroup;
-			children = (
-				F7A2885FF922A7315C564CF997DC7503 /* FirebaseDatabase.modulemap */,
-				E090AC85D60368344DE2CF202EDFBFE3 /* FirebaseDatabase-dummy.m */,
-				37C3A94692642015055302CE6D458CCE /* FirebaseDatabase-Info.plist */,
-				BA39E2C48027666F9469709D4DC983B4 /* FirebaseDatabase-umbrella.h */,
-				6D9B952974F6B3F89F6399C831D99CC2 /* FirebaseDatabase.debug.xcconfig */,
-				587ECC487233834DCC0BDFB400FD82FE /* FirebaseDatabase.release.xcconfig */,
-			);
-			name = "Support Files";
-			path = "../Target Support Files/FirebaseDatabase";
-			sourceTree = "<group>";
-		};
-		2A95F72240D94B812814C6F95A1C4E74 /* Products */ = {
-			isa = PBXGroup;
-			children = (
-				3347A1AB6546F0A3977529B8F199DC41 /* FBLPromises.framework */,
-				E2B63D462DB7F827C4B11FD51E4F8E2D /* FirebaseCore.framework */,
-				8CC9178C366942FD6FF6A115604EAD58 /* FirebaseCoreDiagnostics.framework */,
-				51671C73F008B5C0C3751B3855999213 /* FirebaseDatabase.framework */,
-				856B5CD56F194FAD26EA91620B66D614 /* GoogleDataTransport.framework */,
-				6942351307BC1F54575D9853307EAE0E /* GoogleDataTransportCCTSupport.framework */,
-				B43874C6CBB50E7134FBEC24BABFE14F /* GoogleUtilities.framework */,
-				0A9F46A999C47653013D3AD854352507 /* leveldb.framework */,
-				06FC5C9CF96D60C50FCD47D339C91951 /* nanopb.framework */,
-				17A5FB2BB510D58010F5154CE559C2C3 /* Pods_openTok.framework */,
-			);
-			name = Products;
-			sourceTree = "<group>";
-		};
-		2D7219444627D2D5238868A4CCD5704D /* Frameworks */ = {
-			isa = PBXGroup;
-			children = (
-				62020A4F2BCB9E86DA99881A00474E3F /* FBLPromises.framework */,
-				901C6573DC7352F89FD5AC0EC3EA7C88 /* iOS */,
-			);
-			name = Frameworks;
-			sourceTree = "<group>";
-		};
-		388C5FB09807DDDA166121B8CF8F7961 /* Support Files */ = {
-			isa = PBXGroup;
-			children = (
-				5151B4B90DF95DFF56C5C5AC51E5B2F1 /* GoogleDataTransportCCTSupport.modulemap */,
-				9AB3707E44CE0D64C47BB82321FE3BD4 /* GoogleDataTransportCCTSupport-dummy.m */,
-				0B3E8D29A38AED64881329262599A505 /* GoogleDataTransportCCTSupport-Info.plist */,
-				4A10A4C81C220281B540EA7061D36321 /* GoogleDataTransportCCTSupport-umbrella.h */,
-				3E54B1318AB1AA3CC7468878C8B0C39E /* GoogleDataTransportCCTSupport.debug.xcconfig */,
-				25F19CE11FB446E8B2C37D3F9C3B1BFC /* GoogleDataTransportCCTSupport.release.xcconfig */,
-			);
-			name = "Support Files";
-			path = "../Target Support Files/GoogleDataTransportCCTSupport";
-			sourceTree = "<group>";
-		};
-		40C69A44B1557415FA9F57EE5FB199F4 /* Firebase */ = {
-			isa = PBXGroup;
-			children = (
-				C92BEB878EA261B63A3FE8C6F070519D /* CoreOnly */,
-				87D0DDB613352CCCCBF092FE5653A0E6 /* Support Files */,
-			);
-			name = Firebase;
-			path = Firebase;
-			sourceTree = "<group>";
-		};
-		4750F567B1A83B07A3BF48753AA7299F /* GoogleDataTransport */ = {
-			isa = PBXGroup;
-			children = (
-				BBE58D8C7B4DF5B650E6528061BAF00C /* GDTCORAssert.h */,
-				94828B387C56139BACCCEDC781E42B5B /* GDTCORAssert.m */,
-				695B08F258794D8BA0F5ADA821C842AA /* GDTCORClock.h */,
-				78AE048F46E327022930DDCA71CF3271 /* GDTCORClock.m */,
-				CAD6EEF839E19AE78EB0C9FF88CBECE2 /* GDTCORConsoleLogger.h */,
-				3096846386F3836A75FB794288AA257E /* GDTCORConsoleLogger.m */,
-				6A37D0DC62ADF6DFECBB8C229F50AF93 /* GDTCORDataFuture.h */,
-				23DF0DDD2310CC408B1DBE663F9C3CAA /* GDTCORDataFuture.m */,
-				2C3685222F5D9D2662CE36EF1DF7D307 /* GDTCOREvent.h */,
-				1F616D4FBC71458933254CDA110C11CA /* GDTCOREvent.m */,
-				F24B2FE999A991B0FB72A88254F127A9 /* GDTCOREvent_Private.h */,
-				D212664CA6B122A499E6AAE0259F5F5D /* GDTCOREventDataObject.h */,
-				F3082C73B86C39432F3BEE1DB2F53924 /* GDTCOREventTransformer.h */,
-				C10C6020EDDB2016BD64181B672CBC2C /* GDTCORFlatFileStorage.h */,
-				5AF9DE0337F8113B726962277B249DA5 /* GDTCORFlatFileStorage.m */,
-				B4600FE4208AE3E5795D8EBB5F97A617 /* GDTCORLifecycle.h */,
-				0EF03490A41396D7B4FB796D16239538 /* GDTCORLifecycle.m */,
-				3F89EABDE73772529AA4D1632A76AB10 /* GDTCORPlatform.h */,
-				B2A6FBBC1582B73F699D2622665AD418 /* GDTCORPlatform.m */,
-				6A9D85795C3AB0FC818197A64F6ADC1F /* GDTCORPrioritizer.h */,
-				823E7E73D27229EF57D62A2C3C62E62C /* GDTCORReachability.h */,
-				3B32762245BBA7D25AC72093BF9D75E6 /* GDTCORReachability.m */,
-				CA6848D4B1055686D25D93DF40B2C915 /* GDTCORReachability_Private.h */,
-				A908DAA989BEA273B10D102D558F47FD /* GDTCORRegistrar.h */,
-				F4DC65C04D076732C25AE29A2908DF95 /* GDTCORRegistrar.m */,
-				D9C044CDB58F661488097BB87AF131F0 /* GDTCORRegistrar_Private.h */,
-				94B46AAE0848AD9B3F922BBB8DA40DC5 /* GDTCORStorageProtocol.h */,
-				1313113294676D69BB1A6FB6FC2AC8D9 /* GDTCORTargets.h */,
-				0BAC11B5BD73140CC06EBFFB33C6E3E4 /* GDTCORTransformer.h */,
-				1B54F40D4D8961A88689128664F1E34C /* GDTCORTransformer.m */,
-				088E9D65F0C3C763F8B1466BDCCEAEED /* GDTCORTransformer_Private.h */,
-				674391F19F12A6728205D726D39B24BC /* GDTCORTransport.h */,
-				90D45AEDE9F7AD08010F5EE9B389652E /* GDTCORTransport.m */,
-				57FEBC63E8E55E8C1B6847CAEDE77959 /* GDTCORTransport_Private.h */,
-				A0CDEC73746A123B250DF34810E0C957 /* GDTCORUploadCoordinator.h */,
-				057F550138403A0C7FD68032C21A0E20 /* GDTCORUploadCoordinator.m */,
-				4B04B5BCD905ACB2C2079AFD75AB6597 /* GDTCORUploader.h */,
-				EC794BDF881104077CA6D858C004F116 /* GDTCORUploadPackage.h */,
-				64705E8D19B8D928285A3720DB0206AE /* GDTCORUploadPackage.m */,
-				428B977BF39D31F8F69EF02D8F825E96 /* GDTCORUploadPackage_Private.h */,
-				70515A5CBED5171BEE1A7FD8B06C8338 /* GoogleDataTransport.h */,
-				ABFF73A025C87B0FA649525A4C415222 /* Support Files */,
-			);
-			name = GoogleDataTransport;
-			path = GoogleDataTransport;
-			sourceTree = "<group>";
-		};
-		5DA437DAF035B2E772BC1AE4E1506CF1 /* nanopb */ = {
-			isa = PBXGroup;
-			children = (
-				31E464D7B81E4278F8FB81146755F379 /* pb.h */,
-				DF3E939FA895E12649FDF094D1D8DC7D /* pb_common.c */,
-				37991EF098780E2D9FBD3B42EA8175D3 /* pb_common.h */,
-				3DE1D8D85EC90A32E28154D880378587 /* pb_decode.c */,
-				941ACF372F977D2EFD95A9310219B60A /* pb_decode.h */,
-				C443A630A1668A448ECF8A09F457DEFA /* pb_encode.c */,
-				541C1635CF2ACAB31B12B3FD9367089D /* pb_encode.h */,
-				B47ED0E63DA98525AF50E7EDD3D4ACFF /* decode */,
-				FC0E1F21ECE4473409254E531F75BC91 /* encode */,
-				7F88036529DCEC6C37CF5D9F36F2875B /* Support Files */,
-			);
-			name = nanopb;
-			path = nanopb;
-			sourceTree = "<group>";
-		};
-		61C4012B92C92E604D92F4DD2F5639D7 /* PromisesObjC */ = {
-			isa = PBXGroup;
-			children = (
-				87A11B9808FEF3BD00DEAAF8F1F7A1E8 /* FBLPromise.h */,
-				4860AAD628A98E1A707FF827FF3AF9E9 /* FBLPromise.m */,
-				29BD25E1380AF136F830D5ADC46CB53E /* FBLPromise+All.h */,
-				BB0D2688C1F6E5C119D27FA7EB2A6087 /* FBLPromise+All.m */,
-				F8FDB31CF6B1C1358EE35ADE19844DC7 /* FBLPromise+Always.h */,
-				3D7B530E73F5DDD639F32EA9C53A45C2 /* FBLPromise+Always.m */,
-				0E8161CED1C17230153CB59CBAA2ABA9 /* FBLPromise+Any.h */,
-				85F1AE2EBEC3ACE6F7F8518590D0F6A2 /* FBLPromise+Any.m */,
-				0E5714B2DDE9933EA30C49F766B5E69A /* FBLPromise+Async.h */,
-				77C1062B06298DDB3CE7B3ADE0C5DE14 /* FBLPromise+Async.m */,
-				072544F03E5AE2F64EF237E82D81D545 /* FBLPromise+Await.h */,
-				1891D121FC2FBC6537BC90D17D133401 /* FBLPromise+Await.m */,
-				9258D0107323650D356F6D0323D79CC3 /* FBLPromise+Catch.h */,
-				EE5C51CE831C623408DB778C1ABA0148 /* FBLPromise+Catch.m */,
-				F28A8199104EC2C984FA676FED6D9FBF /* FBLPromise+Delay.h */,
-				CE06D2F80F632B8CC85AEB98C01748F7 /* FBLPromise+Delay.m */,
-				B299C026C8827C5F992F488CCBA2D192 /* FBLPromise+Do.h */,
-				67AA07E8EC09CCB7FE04406017A4C519 /* FBLPromise+Do.m */,
-				9DC5B45B4B2D0DC0AE3FB7A75E08649A /* FBLPromise+Race.h */,
-				4421DDED849BD83DC71031CD3143C0DD /* FBLPromise+Race.m */,
-				7610135E50DA4D208AF3E88330FCBDC1 /* FBLPromise+Recover.h */,
-				FA32E456E1C52FF9AC73AE5949A43B5E /* FBLPromise+Recover.m */,
-				ED14BCF081A83EBB8A978CDDD5E13ADD /* FBLPromise+Reduce.h */,
-				A11AE0A92B88FC456F083B131B991F1A /* FBLPromise+Reduce.m */,
-				D2A24B05955F1EE99EBC76E88971F2D8 /* FBLPromise+Retry.h */,
-				744466560FAD76B6239D54402C0C52DC /* FBLPromise+Retry.m */,
-				98FC3E75806D347BDE1998F9D6F7924D /* FBLPromise+Testing.h */,
-				C5878F2A6B4FDCC6F17613A13676081E /* FBLPromise+Testing.m */,
-				272A06E4DFA111E0A5504FF347BBF984 /* FBLPromise+Then.h */,
-				922204FA6D1655751812D541250FEA72 /* FBLPromise+Then.m */,
-				F8B8FAE3380266FF581E5704B032BC1D /* FBLPromise+Timeout.h */,
-				AD6117C150F7C9AEC846B49F6EAA9BAF /* FBLPromise+Timeout.m */,
-				5F0C162A1408DFD87160990CD1C5B5FE /* FBLPromise+Validate.h */,
-				1ADE589487EE027BD9C1EBD727FC2E9E /* FBLPromise+Validate.m */,
-				82BD2B064A081DE7FB1B130EDCAAA263 /* FBLPromise+Wrap.h */,
-				50625C3A47D2BE9C9BD6151D17714D80 /* FBLPromise+Wrap.m */,
-				33D40A09F8C5975F8B550A0483033801 /* FBLPromiseError.h */,
-				0496F85216D9C79A563C82C7CDB45620 /* FBLPromiseError.m */,
-				83AD72E6FF9339276439BA4350ABDA13 /* FBLPromisePrivate.h */,
-				60129F2C1744E4C6A0B45D363AEEF0FD /* FBLPromises.h */,
-				08FCE314B2BEFDBD429FDE4BAA06FB80 /* Support Files */,
-			);
-			name = PromisesObjC;
-			path = PromisesObjC;
-			sourceTree = "<group>";
-		};
-		6ECE8D03379F08D25D8C811D33C5B4C5 /* GoogleUtilities */ = {
-			isa = PBXGroup;
-			children = (
-				C8FD4308F0FB96CCA4A83437B052AD3D /* Environment */,
-				14A5A8D41905FA5E4A0C0A5BFAB417B0 /* Logger */,
-				787B78FE0DFF84C33C5F4082383111D6 /* Support Files */,
-			);
-			name = GoogleUtilities;
-			path = GoogleUtilities;
-			sourceTree = "<group>";
-		};
-		734DDD76806A8BB7989DEC328634F270 /* Targets Support Files */ = {
-			isa = PBXGroup;
-			children = (
-				106133EDDEB417663076A59D4FFAD214 /* Pods-openTok */,
-			);
-			name = "Targets Support Files";
-			sourceTree = "<group>";
-		};
-		787B78FE0DFF84C33C5F4082383111D6 /* Support Files */ = {
-			isa = PBXGroup;
-			children = (
-				A3735655FE85A76B2A9B4658B9E1D579 /* GoogleUtilities.modulemap */,
-				C6D8EEB350A4ECED82D557A3EAB5AA77 /* GoogleUtilities-dummy.m */,
-				3E80C7D2190CFBE7BF524863C6D694D7 /* GoogleUtilities-Info.plist */,
-				578B57E50EDBE961E26365AC7EB47A31 /* GoogleUtilities-prefix.pch */,
-				23C1A4E1F44845DC103D917C703A455A /* GoogleUtilities-umbrella.h */,
-				C26746AB2A5D53AF8402A1B015403633 /* GoogleUtilities.debug.xcconfig */,
-				7E58E1A27F0803C11F2250F1DCEC0741 /* GoogleUtilities.release.xcconfig */,
-			);
-			name = "Support Files";
-			path = "../Target Support Files/GoogleUtilities";
-			sourceTree = "<group>";
-		};
-		7D921290F3FEF47501F3B36519940850 /* GoogleDataTransportCCTSupport */ = {
-			isa = PBXGroup;
-			children = (
-				E9558FB6E3417EEB6ACC4BAC9665F3A6 /* cct.nanopb.c */,
-				612393A8C0D0B02C9ADA7AB38EC11ED1 /* cct.nanopb.h */,
-				D3B07B31DDBEA3C5582D124B8D3B6443 /* GDTCCTCompressionHelper.h */,
-				3E7DD82D268001C64258EB45BA0470F2 /* GDTCCTCompressionHelper.m */,
-				E3E8EF9776569DF1C4FBACF2A05C6984 /* GDTCCTNanopbHelpers.h */,
-				080B6ED2BE515044B2F811627F849632 /* GDTCCTNanopbHelpers.m */,
-				3E328AFED73206DE3C41B2F236188BAA /* GDTCCTPrioritizer.h */,
-				196DCB453BE1CEE606A4656ED3F3DCBB /* GDTCCTPrioritizer.m */,
-				0AC4A9BC66B8D2CD0D2CB7874781F3E5 /* GDTCCTUploader.h */,
-				58570F7234627794C4BF02928884354A /* GDTCCTUploader.m */,
-				393AE47449FD921FAD26AC79342F7367 /* GDTCOREvent+NetworkConnectionInfo.h */,
-				12F7E2F7B784439C5476A1EF8BD49AF0 /* GDTCOREvent+NetworkConnectionInfo.m */,
-				388C5FB09807DDDA166121B8CF8F7961 /* Support Files */,
-			);
-			name = GoogleDataTransportCCTSupport;
-			path = GoogleDataTransportCCTSupport;
-			sourceTree = "<group>";
-		};
-		7F88036529DCEC6C37CF5D9F36F2875B /* Support Files */ = {
-			isa = PBXGroup;
-			children = (
-				04F745AE9D062907C9D1CDD8FCCA4A43 /* nanopb.modulemap */,
-				12AD2385ABCEF551C7DB322A63BDA8B6 /* nanopb-dummy.m */,
-				51E90B1F65C14253EDC9375768CCD83C /* nanopb-Info.plist */,
-				0C6CB77E47E775AC8AC2B8FE8C3C1874 /* nanopb-prefix.pch */,
-				DBD5F0D6D5607CCC279F0AA16086D019 /* nanopb-umbrella.h */,
-				5CE08AC03F18A07FFDE865B02C63441E /* nanopb.debug.xcconfig */,
-				70C80FE5FEC8E37CDC7A3FECCC392C9C /* nanopb.release.xcconfig */,
-			);
-			name = "Support Files";
-			path = "../Target Support Files/nanopb";
-			sourceTree = "<group>";
-		};
-		80A0FF1F0D09427F7B4E660E38EBF3BA /* Support Files */ = {
-			isa = PBXGroup;
-			children = (
-				6AFC8703934BB1696C9104DD93F8811C /* FirebaseAuthInterop.debug.xcconfig */,
-				41FD95F75B109D21E5C0FF3B47B92CEA /* FirebaseAuthInterop.release.xcconfig */,
-			);
-			name = "Support Files";
-			path = "../Target Support Files/FirebaseAuthInterop";
-			sourceTree = "<group>";
-		};
-		85B110C7B614BAAC33765E8011E188F9 /* FirebaseDatabase */ = {
-			isa = PBXGroup;
-			children = (
-				90316C54AEDD432C7EDDA954D02A16E0 /* APLevelDB.h */,
-				575EF3111261A829259FBDB6C19F8205 /* APLevelDB.mm */,
-				5B65DAC962609F2CA5CAF579C31133A7 /* FAckUserWrite.h */,
-				BACDC3D5A2E777358D664B3A45214F03 /* FAckUserWrite.m */,
-				77C24E7828CDD9A00B0A92ECEB5CFDB0 /* FArraySortedDictionary.h */,
-				8FB6A055AAC08E126DD875D10F1681BE /* FArraySortedDictionary.m */,
-				76009627450555684FFB602D5CDB66C8 /* FAtomicNumber.h */,
-				1135C43506403E886D86BDFF9D1CC4A5 /* FAtomicNumber.m */,
-				0BD62334D7DD704E7183CB5CD05D5FEF /* FAuthTokenProvider.h */,
-				44BF5A2F11832E18FAA9160A4734E51B /* FAuthTokenProvider.m */,
-				C83F672C79ADC28FEFB9E4671207B48F /* fbase64.c */,
-				AEF3F09834AB87411FD7F6AF1067B39D /* fbase64.h */,
-				8BD8AF5861BD6D8277CCB8D46458CE6F /* FCacheNode.h */,
-				EC6B40288A57CC407F022CB43E26AAF1 /* FCacheNode.m */,
-				4CB725B760590589CCA74355CA795432 /* FCachePolicy.h */,
-				2AF11CCF6B730B0458E39354C36DB72A /* FCachePolicy.m */,
-				3BAE9DB2B881172814343BCA44C7BC98 /* FCancelEvent.h */,
-				52176DC15D315EAA2CE7CAE7871EF263 /* FCancelEvent.m */,
-				68B02E7BEB2979723066B27907E0A636 /* FChange.h */,
-				79E2BF71AE254982334583E815969709 /* FChange.m */,
-				DBB2A2E28ED4F674F6370BD3D6B4AB5A /* FChildChangeAccumulator.h */,
-				543616AED705E736331D7BF0C4810E1F /* FChildChangeAccumulator.m */,
-				7919424CA56B24B6F497FCB11FF6DB93 /* FChildEventRegistration.h */,
-				BE2B0C81910979BDBCB280D64692E5BF /* FChildEventRegistration.m */,
-				3C86C564F525877739284E8120ACBE75 /* FChildrenNode.h */,
-				D14605E2B290BBFBCFE713BA4B20BA76 /* FChildrenNode.m */,
-				3EA2D82B72EC58BCC44AD8106CB4E716 /* FClock.h */,
-				E37B33D6D220B28F622B08C2BA4A4DC6 /* FClock.m */,
-				9E7B43761161E27D4FB4903970D91F4F /* FCompleteChildSource.h */,
-				2FD56C3309CCD46F670D5CC2DEA4B8F6 /* FCompoundHash.h */,
-				88B434AB00179B49FC2340C88AA79645 /* FCompoundHash.m */,
-				65A2EA4B48BA25E5F852CFA3518CEAC9 /* FCompoundWrite.h */,
-				AD39F1091B89CC90EB47C76A7740E528 /* FCompoundWrite.m */,
-				99E6B34EBA0A767EED9DFC5E58B87DF5 /* FConnection.h */,
-				39A3D499C991661974D88771D65ED755 /* FConnection.m */,
-				1648A0F596A5947A31091A8D2A3F2DD5 /* FConstants.h */,
-				916D739034B004E106182204228D42C0 /* FConstants.m */,
-				A314FA39C00A05F50CD19B20BE48E0EE /* FDataEvent.h */,
-				36E86F31E1010E4369DFD5A8B2C46D99 /* FDataEvent.m */,
-				1BBD1F80252B16388D8A2E0DC2FC7D9E /* FEmptyNode.h */,
-				CD158462CD76FEB1BCB0075BEED53C2A /* FEmptyNode.m */,
-				102352296297C117CC7869815C0B18C2 /* FEvent.h */,
-				21EDE18558B70D38E006596E26788D36 /* FEventEmitter.h */,
-				24AD25CF950ACF35024D9FAC762DD3A3 /* FEventEmitter.m */,
-				FA47D62FD3660036076067B875D655A9 /* FEventGenerator.h */,
-				F26C357D95872C344F908100D46E5153 /* FEventGenerator.m */,
-				39587D5ABC154C593C4C834BD6058580 /* FEventRaiser.h */,
-				6C35F58B895845211A8017AAC391E1B7 /* FEventRaiser.m */,
-				D9A699DB734FC836C80F34584A4A6781 /* FEventRegistration.h */,
-				7054A55E885CFA0B88E9B303F1CA6A8D /* FImmutableSortedDictionary.h */,
-				CA283EA1FDCDD01C444F2DFCB23D0B41 /* FImmutableSortedDictionary.m */,
-				361D5CC60A972E92E4E30CAE036573B2 /* FImmutableSortedSet.h */,
-				0D5A4DB629B5B17E2F7AB448096A4572 /* FImmutableSortedSet.m */,
-				A1B575D60903423A2B9984866581EC10 /* FImmutableTree.h */,
-				5D57A1F107BF9AB8D7F78C220FD7D3FE /* FImmutableTree.m */,
-				A0C2CA4BE08826E478724D7FBB8A6D94 /* FIndex.h */,
-				CBF9637B074AD29A17C37F3502AF829A /* FIndex.m */,
-				6EBB17129E01D8CF54893F948D47D963 /* FIndexedFilter.h */,
-				D7C3CEC573454AA3BE96772D20CBD14F /* FIndexedFilter.m */,
-				18E5CB0D0571E1527E8DCD0C6A5690A7 /* FIndexedNode.h */,
-				A1B705F633CD48849AE76995D60F22F5 /* FIndexedNode.m */,
-				FD7581EECCCABA4BECF7F34AA2731B64 /* FIRDatabase.h */,
-				30D3A7460028A9EA81EADFC2C2A322F8 /* FIRDatabase.m */,
-				39B71F3A4C20F71B0FA8620190D0629E /* FIRDatabase_Private.h */,
-				6B4F0813AD0FE6A019D69BEE02FE48B2 /* FIRDatabaseComponent.h */,
-				54EDB5C773BAC4698020342F0696F390 /* FIRDatabaseComponent.m */,
-				151EDA5ED0508649DD81C32BBAB5B133 /* FIRDatabaseConfig.h */,
-				B1AEACA1BDF2D31AC8B5E8D8883CD1CA /* FIRDatabaseConfig.m */,
-				955193171396A5F7FDA4F76ECCAEAC78 /* FIRDatabaseConfig_Private.h */,
-				50F19DE27755B2D81E7D4874D093FB38 /* FIRDatabaseQuery.h */,
-				F229899516D0622E81CAD20651193F00 /* FIRDatabaseQuery.m */,
-				6CC2D13BD17F41391BB88C73E58BDA77 /* FIRDatabaseQuery_Private.h */,
-				6FBAE93D87DDDF2F1354A512B9055879 /* FIRDatabaseReference.h */,
-				8A4EB59A5D57265DCE22DAF6B0F62EC4 /* FIRDatabaseReference.m */,
-				052D1A59D81CF3189CCE9443B2F2ADE7 /* FIRDatabaseReference_Private.h */,
-				D6870577D6F4991A666E6914A2F487A4 /* FIRDataEventType.h */,
-				3AC6719935B3430DE4E11C520944D8BF /* FIRDataSnapshot.h */,
-				7B9509605188658AC6DAEB774F27217B /* FIRDataSnapshot.m */,
-				C1138211F92A15BC81CD2389748F9E8B /* FIRDataSnapshot_Private.h */,
-				148C3A198D5DEC1D04F9AC25F9963A0F /* FirebaseDatabase.h */,
-				1A2A620A27AF95651BEB93E9CE562A04 /* FIRMutableData.h */,
-				09306EA07C5E6C3D3EB420111146C811 /* FIRMutableData.m */,
-				902E6002602A44EB342BBC2142E66B0D /* FIRMutableData_Private.h */,
-				6F2ED88980ADD02F9CD95D5F802803F1 /* FIRNoopAuthTokenProvider.h */,
-				6C25234BF51BE9602848231B7842472C /* FIRNoopAuthTokenProvider.m */,
-				3FE1ACAC1C23FF4E29B8821ADC8ED85F /* FIRRetryHelper.h */,
-				B33DBADEF735E61DC443B9753E707E98 /* FIRRetryHelper.m */,
-				991856E8769D32D7006FE848E3EB873D /* FIRServerValue.h */,
-				A551638736E976C6F89390DB407C4331 /* FIRServerValue.m */,
-				39E847F87FE098403E173AF071476BF0 /* FIRTransactionResult.h */,
-				0B51796ECD501253EDB5FCF8F42BCF07 /* FIRTransactionResult.m */,
-				EA42623F573679F9A5B044DF94A4DDA6 /* FIRTransactionResult_Private.h */,
-				F42C7C268617DB7675F42B8B5E5495AA /* FKeepSyncedEventRegistration.h */,
-				EBAA464D5B2F65ED6BE6FB25E8A135C5 /* FKeepSyncedEventRegistration.m */,
-				A8DA6D09CA5BA0ADBB362152B7846961 /* FKeyIndex.h */,
-				FE5998250B73CE8F1C7FC072542E79C7 /* FKeyIndex.m */,
-				0541259BE7A9475648BF4DC718F6F409 /* FLeafNode.h */,
-				DA1705E3E3B1D427074C708CE40F9CAC /* FLeafNode.m */,
-				61CCE79B8780E931635E80307FA09EE6 /* FLevelDBStorageEngine.h */,
-				37FBC87BF2448D86A7BDADF009B9803B /* FLevelDBStorageEngine.m */,
-				301EA1964717D61EA78FF69CC56657C3 /* FLimitedFilter.h */,
-				20A93D898B3FF479357C52053210F552 /* FLimitedFilter.m */,
-				DD34FF93A6587C0B4E47FFD49CA5445E /* FListenComplete.h */,
-				1823A9ACE2C8152C1B82264C89EE7A22 /* FListenComplete.m */,
-				F34FEBEB586D8DDC4CE36905BFC79C9B /* FListenProvider.h */,
-				066378BC5E55BCFB87BFFC5EDAFA4B99 /* FListenProvider.m */,
-				4BD6ADA3108223D06CC45B5E4D709C49 /* FLLRBEmptyNode.h */,
-				8BE48E3EE3333BF5E2BE4F1CD5787E3D /* FLLRBEmptyNode.m */,
-				57D93D85D4F115B046E9F4E297055F80 /* FLLRBNode.h */,
-				8F623F7FBC6EF232A1F47AACADC4C561 /* FLLRBValueNode.h */,
-				70E9D5DB507166468AF0FA89B51E2176 /* FLLRBValueNode.m */,
-				C295B47E516F633178D34FA8303E944A /* FMaxNode.h */,
-				CAD98370F606C47C0E85A961278677BC /* FMaxNode.m */,
-				95EDE74C6DE1F87EE3663A0AD366B7B5 /* FMerge.h */,
-				B781D7A58A91FBED1BE497CD9B527741 /* FMerge.m */,
-				097A95430769429A66795E9E6AC6450A /* FNamedNode.h */,
-				1A2422E97EFCFEA1741CB84A57211468 /* FNamedNode.m */,
-				E1FC5A36113AB7A7F53F63FA047F3B95 /* FNextPushId.h */,
-				E58F4E0A35AE5270A10F0B182C0CBC9E /* FNextPushId.m */,
-				DF9EDE9DB2CF0517FF04BC31DCAEC0FE /* FNode.h */,
-				DFDD92BA3AA85D306208B74066AA26E9 /* FNodeFilter.h */,
-				52183C4DFF461846157BB45716C61701 /* FOperation.h */,
-				193284F73773846AA3A34879EC56EF86 /* FOperationSource.h */,
-				A3DD7543FF2C526CD999ADA8530ED5EA /* FOperationSource.m */,
-				68949119150AE37E2185C8D318D06060 /* FOverwrite.h */,
-				BD9507903A6A4787A9BCB8293A9F3826 /* FOverwrite.m */,
-				F0534E9B7F9A2AC947BBFFCC17B73753 /* FParsedUrl.h */,
-				838FEFECD8DD58DE24E9A5A672A11E81 /* FParsedUrl.m */,
-				860B744356EA183E469CA636F94AEB50 /* FPath.h */,
-				43744D2FF04A8F6E07656E852E3190B2 /* FPath.m */,
-				B338B2C9808C5C0AF778CD7DADCE1AE8 /* FPathIndex.h */,
-				C08F5263A7EA97B8AD1A8772345B4295 /* FPathIndex.m */,
-				460A5884CBCEBDCCDD70D08A0D2EE516 /* FPendingPut.h */,
-				FA42256409F6AE11E423BC2D052A2AB3 /* FPendingPut.m */,
-				DF67693BB6E8BFC4254953D2178F5408 /* FPersistenceManager.h */,
-				11E7D6789B496C8DAF72B8FF1F569778 /* FPersistenceManager.m */,
-				E2B8A272C8F2DE84AE5BEE68D7C5A30F /* FPersistentConnection.h */,
-				CB4A191F4483E65DD757ECF72435553C /* FPersistentConnection.m */,
-				25581B666C44E4E2526DFBDCAF320168 /* FPriorityIndex.h */,
-				B33A7C7D5DA6BCED7A54588D8B519573 /* FPriorityIndex.m */,
-				45586F5816585DB8B45FE1C976525A1C /* FPruneForest.h */,
-				B5129F030E10972C371924DB4DCFA600 /* FPruneForest.m */,
-				F47CA6F1F12ACAF9B0755A517EEF8774 /* FQueryParams.h */,
-				43C180B98E9AA37DFE45416D2E782F89 /* FQueryParams.m */,
-				25DCDEF8A7F32E0E3701AD90BC946FDD /* FQuerySpec.h */,
-				2EB182B0C82CC8AEF45E12CE2FE0023A /* FQuerySpec.m */,
-				ACA4F24A74FE27CDF4351A7341029FC3 /* FRangedFilter.h */,
-				1EF34E159FC9FB47A99C6BA51BBFA12D /* FRangedFilter.m */,
-				80AE48D6611499F9E4910CA9F46D2191 /* FRangeMerge.h */,
-				3E711BF9F9249CDACE333119FED50E76 /* FRangeMerge.m */,
-				D595AE273F09F91E6ECCB09DDE4BE1CA /* FRepo.h */,
-				E0EBF5A75E65BAB478184C63E9D29E55 /* FRepo.m */,
-				E17B23410BF812634C8DD594B2392929 /* FRepo_Private.h */,
-				F9B57561D347F59214C52B97CB5421A8 /* FRepoInfo.h */,
-				DB9220001C09A1747358192EC9ED2C84 /* FRepoInfo.m */,
-				98859E9B4B250386DEDD7C85EB0716D8 /* FRepoManager.h */,
-				A320AFD4407CF0B2CE66E62B45145BDB /* FRepoManager.m */,
-				F64C9236D303103F4D3C397C4862BAA9 /* FServerValues.h */,
-				32B7228504715C2E4B9E3D0DD3622543 /* FServerValues.m */,
-				0180C3C1B654EF6C601C67697BC4EC62 /* FSnapshotHolder.h */,
-				35EAD172ED92244F64C80D04A17BDE79 /* FSnapshotHolder.m */,
-				A720480A68376788BC41CE5196AD1D6D /* FSnapshotUtilities.h */,
-				C22C5C60494445166C096866D5BC162E /* FSnapshotUtilities.m */,
-				19E2FAFAF8471A64BF957711063D1E73 /* FSparseSnapshotTree.h */,
-				EEFA0E6408C1EE9694F24C8CDD87CC8E /* FSparseSnapshotTree.m */,
-				1E1C4E4A64421A0A894E0DDA64147BDD /* FSRWebSocket.h */,
-				45EAA633A2105904DF70B93DB59F865A /* FSRWebSocket.m */,
-				59F59F63C4615D2ABBA8D3688DE5C1A2 /* FStorageEngine.h */,
-				975D7F0C4BD02609E2E89C0BDB223652 /* FStringUtilities.h */,
-				56E0BD3190452F623D2588E2959B1C38 /* FStringUtilities.m */,
-				11480D63F4E0BD36E1D198F5A9A73FB2 /* FSyncPoint.h */,
-				218E7BC1C220924B1D6785CA4C25DC96 /* FSyncPoint.m */,
-				FC1EFE2DCD55CE417891AFDE45E7C27A /* FSyncTree.h */,
-				E7C728948CE0F1485BF0F4BAFD54D11C /* FSyncTree.m */,
-				378857989CF09BD719CBDF32E1B87FBA /* FTrackedQuery.h */,
-				D300E695491585B083A58415F81511F1 /* FTrackedQuery.m */,
-				C3F1EA207BC255E9BA95DB0C99A876B3 /* FTrackedQueryManager.h */,
-				8EAA3C6BA44BAFE3C08D2B7B5567778D /* FTrackedQueryManager.m */,
-				D5D7486A6BEF323ADBAE7A259186E285 /* FTransformedEnumerator.h */,
-				CD22B20DCEE97C6687C597002DC5BE44 /* FTransformedEnumerator.m */,
-				E9A9F5F708FDFD0E308F6410820EE811 /* FTree.h */,
-				F8514701493814AB84C06709B66B8991 /* FTree.m */,
-				9AEA59B436FE7C179D1AA762546E52F0 /* FTreeNode.h */,
-				B52430627E2CEB470F4622858A8480DA /* FTreeNode.m */,
-				7114FD0EFDDFA8EFD0B729F54CA0E299 /* FTreeSortedDictionary.h */,
-				B835A6F7159081070635B80749DFB910 /* FTreeSortedDictionary.m */,
-				A9D70C09F8DDD9DFB26AC7F97FAB70ED /* FTreeSortedDictionaryEnumerator.h */,
-				593FEB0A405089A855F6A178DC382FFF /* FTreeSortedDictionaryEnumerator.m */,
-				D1E6D1D803B379D5B9D499DC2AEAAD57 /* FTupleBoolBlock.h */,
-				DE8DDBC684EAB94B117FB431D6983794 /* FTupleBoolBlock.m */,
-				5AF6CFF33C19AC6817222406C326E673 /* FTupleCallbackStatus.h */,
-				945B168B765E0149A40FCDD1B383D898 /* FTupleCallbackStatus.m */,
-				11BE64F7B2DF4B6B01EDEE2BB90359CE /* FTupleFirebase.h */,
-				BE1FF88442223E72C05A63E1D359C30A /* FTupleFirebase.m */,
-				5EFC7D206D5469364E21D58DD4E6C7A8 /* FTupleNodePath.h */,
-				ABC4D7550679CE90B7A7D2AC9658CD2B /* FTupleNodePath.m */,
-				CEDB10734368755E95741BEF1CF380C3 /* FTupleObjectNode.h */,
-				78CE4FC4674E17E99E511BCA4E3D89E0 /* FTupleObjectNode.m */,
-				38A43235156A1459847105BB4F2B300D /* FTupleObjects.h */,
-				EC267D96A5B075660F91DDA49D90E56C /* FTupleObjects.m */,
-				6266F0F67AE31067A90DDC828E91BFB1 /* FTupleOnDisconnect.h */,
-				D60179BD88EF9A234D60E6EDB1EEA0C5 /* FTupleOnDisconnect.m */,
-				C2760200A696A747EB2BB8996E5F37C0 /* FTuplePathValue.h */,
-				5F69F234C57436B1A1499CE33ED96AAA /* FTuplePathValue.m */,
-				08B4449BD6E520A4C1E8BE42FFE7BAA1 /* FTupleRemovedQueriesEvents.h */,
-				EAEAD2C37A2F7D54EB5D112BE700E464 /* FTupleRemovedQueriesEvents.m */,
-				FB1BD93373D49F12576A33ADBC3BB1E8 /* FTupleSetIdPath.h */,
-				E0133CE971C065D957EDE8B9AAF9B36F /* FTupleSetIdPath.m */,
-				357108ED8E1BE0FAC53EFE9A522C6D0C /* FTupleStringNode.h */,
-				4D6D098D6D2D89BD890B660DDC02B2C5 /* FTupleStringNode.m */,
-				37E34EE4B371BB8626B0ECA106A5B8E0 /* FTupleTransaction.h */,
-				B5182676AC9060524937E8799614DFAC /* FTupleTransaction.m */,
-				3CC76FAD8FA0F6D23526A68F7A0EDE8E /* FTupleTSN.h */,
-				6041B5E87AC260ED5B0E6C0B42DDA814 /* FTupleTSN.m */,
-				EAE499B2DF8EBB7143A877BF5CDAEF4E /* FTupleUserCallback.h */,
-				3294C1F7B7748B520AFE0A6E3E5FDE30 /* FTupleUserCallback.m */,
-				F2560D7CA1567608F6BCDCD70881AFB4 /* FTypedefs.h */,
-				D96FB1E0748CB2643821DE1953901D3B /* FTypedefs_Private.h */,
-				B423C55EDD8B0EBA1C93A2C48DD3B22B /* FUtilities.h */,
-				B1A323E1E6BBE609DB73C75EE7791C2C /* FUtilities.m */,
-				A43C04A3FED5D0538408B186EB5A4FD1 /* FValidation.h */,
-				9D049B599CD35B1EBCCFB40378A858E0 /* FValidation.m */,
-				C36919082934B6801606679F9235BAA5 /* FValueEventRegistration.h */,
-				FFADC6E448C500341452C5E5C14C8B48 /* FValueEventRegistration.m */,
-				EB6A33237EFBF55F3A9EBC83F548B03D /* FValueIndex.h */,
-				8454AAD8C7BABB4D4FC9DC6D3F1FC788 /* FValueIndex.m */,
-				14B5225C335FF4E58484DB38F7D71113 /* FView.h */,
-				5E7D64340689B27CEC98862A2A1558BA /* FView.m */,
-				DC29D06EF9DB0608699CE6668F459127 /* FViewCache.h */,
-				7EDEB0636E82100515CA48503A4D022C /* FViewCache.m */,
-				3B2312F44AC0B0A5F30BD2D7E4AD31E1 /* FViewProcessor.h */,
-				6836B2C094BEE9CCC043393E936B87BE /* FViewProcessor.m */,
-				026599AE480DD91768D8F683E59FE6CC /* FViewProcessorResult.h */,
-				3BDC69FEF92061A1018272C226777880 /* FViewProcessorResult.m */,
-				1B380EF7F940448A641CDF3A87516109 /* FWebSocketConnection.h */,
-				30798651CA0BD508AD85DC790BB2D9B1 /* FWebSocketConnection.m */,
-				7608FC4EC17E98020B24155456A3AA39 /* FWriteRecord.h */,
-				A8D9FCB9E6E7263B05452B4A1E52C57B /* FWriteRecord.m */,
-				385FA78D355DA5FF4ED09DE6A1AB8057 /* FWriteTree.h */,
-				632A2A314E4EBB58C7333F3B1B5FA731 /* FWriteTree.m */,
-				2AF24CAB681011F26CE27B6CD0DA5E53 /* FWriteTreeRef.h */,
-				2085AB8AA9E4822704336873BF314E65 /* FWriteTreeRef.m */,
-				9FFA595A6BC21A8745A22CAC7C9C9678 /* NSData+SRB64Additions.h */,
-				36FBDDD8326F0B0C781905C5CF742D68 /* NSData+SRB64Additions.m */,
-				28DC2CE1ADE7CB9A548DB101E5CF8D11 /* Support Files */,
-			);
-			name = FirebaseDatabase;
-			path = FirebaseDatabase;
-			sourceTree = "<group>";
-		};
-		87D0DDB613352CCCCBF092FE5653A0E6 /* Support Files */ = {
-			isa = PBXGroup;
-			children = (
-				D94F03D0CD3C49BEAAAACD23DB190B70 /* Firebase.debug.xcconfig */,
-				24C765C6EE99FAF5BDC49CFE9E15D8A5 /* Firebase.release.xcconfig */,
-			);
-			name = "Support Files";
-			path = "../Target Support Files/Firebase";
-			sourceTree = "<group>";
-		};
-		901C6573DC7352F89FD5AC0EC3EA7C88 /* iOS */ = {
-			isa = PBXGroup;
-			children = (
-				6C3C1EB539A57B6F7CBF5F5F61AEC46A /* Foundation.framework */,
-			);
-			name = iOS;
-			sourceTree = "<group>";
-		};
-		90ADE0A91FF96131961B084B8649A310 /* FirebaseAuthInterop */ = {
-			isa = PBXGroup;
-			children = (
-				1B004F3F21ACD69E835051891AC01C17 /* FIRAuthInterop.h */,
-				80A0FF1F0D09427F7B4E660E38EBF3BA /* Support Files */,
-			);
-			name = FirebaseAuthInterop;
-			path = FirebaseAuthInterop;
-			sourceTree = "<group>";
-		};
-		AA07292FD2905535EE2E39FF9206B8EF /* Support Files */ = {
-			isa = PBXGroup;
-			children = (
-				9BC93D2F01BC90BCC406F2269AFF64B1 /* FirebaseCoreDiagnosticsInterop.debug.xcconfig */,
-				A0D2B9693657353DC78B1C8AA8E503F4 /* FirebaseCoreDiagnosticsInterop.release.xcconfig */,
-			);
-			name = "Support Files";
-			path = "../Target Support Files/FirebaseCoreDiagnosticsInterop";
-			sourceTree = "<group>";
-		};
-		ABFF73A025C87B0FA649525A4C415222 /* Support Files */ = {
-			isa = PBXGroup;
-			children = (
-				7DF8ED92CC74E5A76731E6B0F0B23799 /* GoogleDataTransport.modulemap */,
-				3275B1466A10C59A57FA855C3AC6DECD /* GoogleDataTransport-dummy.m */,
-				875DAAA3905FD883291E5E4ED1AE9052 /* GoogleDataTransport-Info.plist */,
-				E2A534E083CF2D8F6EC559D6489659F4 /* GoogleDataTransport-umbrella.h */,
-				9D85A9AAC775F25C1D9D72DCD09CE492 /* GoogleDataTransport.debug.xcconfig */,
-				89813D1225296221B8A1CD2141389CB2 /* GoogleDataTransport.release.xcconfig */,
-			);
-			name = "Support Files";
-			path = "../Target Support Files/GoogleDataTransport";
-			sourceTree = "<group>";
-		};
-		B47ED0E63DA98525AF50E7EDD3D4ACFF /* decode */ = {
-			isa = PBXGroup;
-			children = (
-			);
-			name = decode;
-			sourceTree = "<group>";
-		};
-		C8FD4308F0FB96CCA4A83437B052AD3D /* Environment */ = {
-			isa = PBXGroup;
-			children = (
-				FB1CF18DE410CAADC9B10DDD72B0B536 /* GULAppEnvironmentUtil.h */,
-				95D786CDC75102E908AC12A8FCEC111A /* GULAppEnvironmentUtil.m */,
-				AAC5E8282CA57B988CA60B91846B3AB9 /* GULHeartbeatDateStorage.h */,
-				9E2D65ECD11B6AEB036931D5A3380113 /* GULHeartbeatDateStorage.m */,
-				78BAF0D547E00F0767C0DD113ADF19C0 /* GULKeychainStorage.h */,
-				446761389CFA822783FA41B1CAB429AA /* GULKeychainStorage.m */,
-				8A0818CE0BCE0C31BA702F922277305F /* GULKeychainUtils.h */,
-				0B4C64BD56CF6985E80B66695B59DF88 /* GULKeychainUtils.m */,
-				0E14920ECDB2908894AFBB2FDC931F02 /* GULSecureCoding.h */,
-				4D1AF60094F489C5CAB30597E9300702 /* GULSecureCoding.m */,
-			);
-			name = Environment;
-			sourceTree = "<group>";
-		};
-		C92BEB878EA261B63A3FE8C6F070519D /* CoreOnly */ = {
-			isa = PBXGroup;
-			children = (
-				EB4E2D2A1C3DEB62CAA9C59348F802D1 /* Firebase.h */,
-			);
-			name = CoreOnly;
-			sourceTree = "<group>";
-		};
-		CEF4BDF97A3F68AB11FD0F39F6FC818A /* Support Files */ = {
-			isa = PBXGroup;
-			children = (
-				02FF0A3B1C66CF58CBF6ED0DA70E2CF2 /* leveldb-library.modulemap */,
-				0A186237A208BD1CF32D3CDD83B8CAF2 /* leveldb-library-dummy.m */,
-				B66C3F856B135140E3571B506C20655B /* leveldb-library-Info.plist */,
-				F8CC6FBC5815D2063DB2E3808DC024DB /* leveldb-library-prefix.pch */,
-				C4C0ED34A72FF0624A93EC40E7CF6B37 /* leveldb-library-umbrella.h */,
-				D3C76A00399095A4DAA2020273DEE53B /* leveldb-library.debug.xcconfig */,
-				D2C19F3B7A322A65FA2CC3F20A6DF678 /* leveldb-library.release.xcconfig */,
-			);
-			name = "Support Files";
-			path = "../Target Support Files/leveldb-library";
-			sourceTree = "<group>";
-		};
-		CF1408CF629C7361332E53B88F7BD30C = {
-			isa = PBXGroup;
-			children = (
-				9D940727FF8FB9C785EB98E56350EF41 /* Podfile */,
-				2D7219444627D2D5238868A4CCD5704D /* Frameworks */,
-				1B4EBD07C7FF3B9DFD52CF040166F1D6 /* Pods */,
-				2A95F72240D94B812814C6F95A1C4E74 /* Products */,
-				734DDD76806A8BB7989DEC328634F270 /* Targets Support Files */,
-			);
-			sourceTree = "<group>";
-		};
-		D7A929CB0184DEB473B7B44F17CFF47E /* Support Files */ = {
-			isa = PBXGroup;
-			children = (
-				1EAE4B9FB26CEEA47D06DB17655CBB32 /* FirebaseCoreDiagnostics.modulemap */,
-				119F6DBEC2830D0007421DCE8BF46135 /* FirebaseCoreDiagnostics-dummy.m */,
-				7CF6606C0578E7CDF7EDEF3D4B178B60 /* FirebaseCoreDiagnostics-Info.plist */,
-				C8ADE11EC03AF033C186B754146EB29F /* FirebaseCoreDiagnostics-umbrella.h */,
-				FE464F7C6ACA43984F0CE6C4734378E8 /* FirebaseCoreDiagnostics.debug.xcconfig */,
-				59CB9FB4C1679210BE96723BFE245F15 /* FirebaseCoreDiagnostics.release.xcconfig */,
-			);
-			name = "Support Files";
-			path = "../Target Support Files/FirebaseCoreDiagnostics";
-			sourceTree = "<group>";
-		};
-		EEEC29BDBC15B23A4B68997A977DC826 /* FirebaseCore */ = {
-			isa = PBXGroup;
-			children = (
-				E5FE3C03918579D14DEB83FD5B810D8C /* FIRAnalyticsConfiguration.h */,
-				3F8222E00AF134E0711FE08042A039C2 /* FIRAnalyticsConfiguration.m */,
-				4C73EAF4D8A7A12724B8D66F3FB39624 /* FIRApp.h */,
-				FAD139992C71368B1D6232300F330E1E /* FIRApp.m */,
-				371751A703B71351DE13FF939FF962D6 /* FIRAppAssociationRegistration.h */,
-				38795B0F87C340F69CFEDED0CCBFAC37 /* FIRAppAssociationRegistration.m */,
-				71D624A72A3D5A4BBC3E8E85FF70070C /* FIRAppInternal.h */,
-				8F2DF0513C9DB23D691523760E8A297A /* FIRBundleUtil.h */,
-				AAF98DB258436A94B5CFFCB168CA4E11 /* FIRBundleUtil.m */,
-				2F468A47D4B1484163852DBA4C01BDC2 /* FIRComponent.h */,
-				B376CAF865729E1CF465CFCCA52115D9 /* FIRComponent.m */,
-				301F5A9AE16774CF0D41657DAD925B78 /* FIRComponentContainer.h */,
-				1D07B68D86353EF71AF26AD8633ED011 /* FIRComponentContainer.m */,
-				92CD283D96DCA1B1A70CCFCEDE5A47B2 /* FIRComponentContainerInternal.h */,
-				F4D50B06AA311127F439590F709F5807 /* FIRComponentType.h */,
-				D95FFC4B09BC1ED974D778A5C00737B1 /* FIRComponentType.m */,
-				25EBF5F50A964142282100BB3127D79D /* FIRConfiguration.h */,
-				8734EC42113C4820AC918A2ECB6EE41C /* FIRConfiguration.m */,
-				914AA32349DFFE43B88FD2C41C2E3880 /* FIRConfigurationInternal.h */,
-				4AFF92094D4BC33FA831C1108F731A13 /* FIRCoreDiagnosticsConnector.h */,
-				B5D4BE3DC5EADCF63F424C33B95D8E0F /* FIRCoreDiagnosticsConnector.m */,
-				FC65A9652178080D84042446A2B9C021 /* FIRDependency.h */,
-				873B2D52C27790E76C58F17E637447EA /* FIRDependency.m */,
-				9B25CE4BCD165FCACCCB347BE5C627FA /* FIRDiagnosticsData.h */,
-				1F51C701E1D20698B669E1172FD5E4CB /* FIRDiagnosticsData.m */,
-				666F60F1D8D46D275395769502141CD1 /* FirebaseCore.h */,
-				2392A33D7F9C9CB28B956D731DA8F557 /* FIRErrorCode.h */,
-				1B12871BB34F2EA4AC753A384DD80F71 /* FIRErrors.h */,
-				825631D04FA349AC9CAE016BE347234D /* FIRErrors.m */,
-				4E65C99CB1E05FEDE149BE32F292733C /* FIRHeartbeatInfo.h */,
-				77B8D860A5693BAB27B03B2D8262FBBB /* FIRHeartbeatInfo.m */,
-				B6B1D21BE3FE785C043FD82E5E14181D /* FIRLibrary.h */,
-				5004A374237FC691736F521969A16337 /* FIRLogger.h */,
-				3F2E840DE3E5096DD4B221B61ABE94B4 /* FIRLogger.m */,
-				061A348B4063578DACB2E0C334E75E2E /* FIRLoggerLevel.h */,
-				9F12FA3516B540F46C4E817F486AD87A /* FIROptions.h */,
-				EEAFB8AE27936F24FCBC0EBF570E19DF /* FIROptions.m */,
-				87C8D393D6580BF43944DB0760788D06 /* FIROptionsInternal.h */,
-				6BD31C9DAA421C4A8E24D11F5161689F /* FIRVersion.h */,
-				97BCB79C675A3B16DD7740908974E9B3 /* FIRVersion.m */,
-				00FFE1454901BD5E4F8B7C065C6C99D3 /* Support Files */,
-			);
-			name = FirebaseCore;
-			path = FirebaseCore;
-			sourceTree = "<group>";
-		};
-		FC0E1F21ECE4473409254E531F75BC91 /* encode */ = {
-			isa = PBXGroup;
-			children = (
-			);
-			name = encode;
-			sourceTree = "<group>";
-		};
-/* End PBXGroup section */
-
-/* Begin PBXHeadersBuildPhase section */
-		1DD803FE060BC73A3D01942A1B852FFC /* Headers */ = {
-			isa = PBXHeadersBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				49D2B6171D735598F776C41BA90697E0 /* firebasecore.nanopb.h in Headers */,
-				CCE81C520CE25D15FDBA09D537AFF746 /* FirebaseCoreDiagnostics-umbrella.h in Headers */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		5F1A29F02E1D162FC479713AF2B06783 /* Headers */ = {
-			isa = PBXHeadersBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				FEEC3CEC5F56947B1E9391C9FDD24D1F /* Pods-openTok-umbrella.h in Headers */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		6CD78F23D4128188EF999D177C06916E /* Headers */ = {
-			isa = PBXHeadersBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				70EF2DF97705C4E7DC796A993C8131CC /* FBLPromise+All.h in Headers */,
-				F8ECC6E59188EE721B9AC5C2EC1C4C4F /* FBLPromise+Always.h in Headers */,
-				4726CCB900BC87AC820DB76627C38EFA /* FBLPromise+Any.h in Headers */,
-				F1ADBEBF87EDAC904CFE9724211D4D55 /* FBLPromise+Async.h in Headers */,
-				BE9467BE9494527D5D49C93812D30079 /* FBLPromise+Await.h in Headers */,
-				78066B813499E43C772003B1BF0427AA /* FBLPromise+Catch.h in Headers */,
-				09F5D7B633DBB6888DBAFD7BF2156441 /* FBLPromise+Delay.h in Headers */,
-				158B87CF98F428E31623B0E931A78408 /* FBLPromise+Do.h in Headers */,
-				AC9140659556BDBA9D745D74CD3A6428 /* FBLPromise+Race.h in Headers */,
-				85A99CFD1EAF4B2F16D252AB054441E1 /* FBLPromise+Recover.h in Headers */,
-				3DFB61A0B67EF7337CB48246FE5F5F53 /* FBLPromise+Reduce.h in Headers */,
-				C923E01B60A3AB065A6E62679ED8E750 /* FBLPromise+Retry.h in Headers */,
-				3EA71BDD8FC82E07FD501469DA03C46B /* FBLPromise+Testing.h in Headers */,
-				371FF6CFCCBDE43DD79F5F8476A478AA /* FBLPromise+Then.h in Headers */,
-				8CBFAB6FCA1E4F62C29F2C30E42EF00F /* FBLPromise+Timeout.h in Headers */,
-				6A2FD4A639D49DA6C2278A0C9E91232C /* FBLPromise+Validate.h in Headers */,
-				C00B4883920C764B9AAE225E756DACF0 /* FBLPromise+Wrap.h in Headers */,
-				E054D4F5671FCE00657213A710EA8CF0 /* FBLPromise.h in Headers */,
-				8BE66D549E7580DCF6128DF93DA4A244 /* FBLPromiseError.h in Headers */,
-				F42B8685FA5C3492C6D5C7B606BCD01E /* FBLPromisePrivate.h in Headers */,
-				0A33307F590A537399B19787B87690CC /* FBLPromises.h in Headers */,
-				F30E60AFC01B39D14ABC67D9949E7996 /* PromisesObjC-umbrella.h in Headers */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		7C3D494E08A8568F24EC772DAF53F0DA /* Headers */ = {
-			isa = PBXHeadersBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				60BE2ED8380E6A7CF121EC37BD34A8C7 /* FIRAnalyticsConfiguration.h in Headers */,
-				D3EF13736C1E7C79191294C5C6AFE061 /* FIRApp.h in Headers */,
-				22906D1F2EBDB2DB72C53F96C55CE359 /* FIRAppAssociationRegistration.h in Headers */,
-				5A0405864E8F4C6C9E7FA0C0957740BB /* FIRAppInternal.h in Headers */,
-				C7EB3D4DF6FE9676259754253B9A7A99 /* FIRBundleUtil.h in Headers */,
-				9982123CD233B4B9CCD7726EB385AC47 /* FIRComponent.h in Headers */,
-				D38250CC0ABA2279901BE2CE4615E1BC /* FIRComponentContainer.h in Headers */,
-				652C7D589C4B335702DE85D4942D99CA /* FIRComponentContainerInternal.h in Headers */,
-				45F553F660EF71AFC23BF7C212AB43D6 /* FIRComponentType.h in Headers */,
-				48AD74D2B771B41A9F2C75397D04A890 /* FIRConfiguration.h in Headers */,
-				F6B3E03523BAFADB7293332CE15F6B35 /* FIRConfigurationInternal.h in Headers */,
-				568A54C8176D35F8A7EDB6C00C879B71 /* FIRCoreDiagnosticsConnector.h in Headers */,
-				514734A6E03887212B98136B5C2E70E4 /* FIRDependency.h in Headers */,
-				CF911D7374D087D44CC4AAEFA75725E8 /* FIRDiagnosticsData.h in Headers */,
-				780B68AAE183B3B79A09360D6D86DDC8 /* FirebaseCore-umbrella.h in Headers */,
-				AE2804D9077D31BCFFB1776E9E7329ED /* FirebaseCore.h in Headers */,
-				F9193842F4C05FA2AABF0EB1215B74AB /* FIRErrorCode.h in Headers */,
-				9456C0CC30E27EC6E44E1B7E509C7908 /* FIRErrors.h in Headers */,
-				C4F84818D463A2C85D1B0AC785C0D75A /* FIRHeartbeatInfo.h in Headers */,
-				77728A7BED51FEF74A4BD7261D3230F4 /* FIRLibrary.h in Headers */,
-				7F1E012AD8F03E57353F4F1EE729FD0B /* FIRLogger.h in Headers */,
-				5ACD9CCCFCEC9B7B56E858A2E0204AE0 /* FIRLoggerLevel.h in Headers */,
-				1D453D2D6F52C91B3C0F41216EAB2474 /* FIROptions.h in Headers */,
-				94605D578942F9050F95C09666C8A0DE /* FIROptionsInternal.h in Headers */,
-				56B2284C696879C63E21C1B12C3ACFEF /* FIRVersion.h in Headers */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		7D3105B483B9F739D9AEA849D1194C6B /* Headers */ = {
-			isa = PBXHeadersBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				1CD40EF7C7409AAF764EB1A036E88F58 /* APLevelDB.h in Headers */,
-				376006A9DEBAADE7B841299DE819CF71 /* FAckUserWrite.h in Headers */,
-				F61055D1ACAD3A04A2E02885B9E5428E /* FArraySortedDictionary.h in Headers */,
-				972069230464E6CE883137D34054A915 /* FAtomicNumber.h in Headers */,
-				A1EA5FBC078FE046032A7944CB6643B4 /* FAuthTokenProvider.h in Headers */,
-				87CCA0094B49425EFD2E1467E4A5646A /* fbase64.h in Headers */,
-				C920951A0C1DD5F402838058F6D760CC /* FCacheNode.h in Headers */,
-				09E37749C750B91B3E3FD67D80984B3C /* FCachePolicy.h in Headers */,
-				D563DF007CB1939F99BC90947D9D8678 /* FCancelEvent.h in Headers */,
-				4118726C30DDD8B59270D8C0522FCAD4 /* FChange.h in Headers */,
-				1CB9A10DD61563EC43A64ADA9ADAD2F9 /* FChildChangeAccumulator.h in Headers */,
-				3E3B68C439E38A6A6F13BC73827BD7E5 /* FChildEventRegistration.h in Headers */,
-				19DE00627C79A1AFBD25247C04241C20 /* FChildrenNode.h in Headers */,
-				E9D939A583E0F24A7AA009FB06342C44 /* FClock.h in Headers */,
-				80883E58195D0C95FF43C861FB0634E1 /* FCompleteChildSource.h in Headers */,
-				94D3B9222CFE703A7F324982FB2896C2 /* FCompoundHash.h in Headers */,
-				4CA6CA316B486CCED39D435DED7F5AF0 /* FCompoundWrite.h in Headers */,
-				3EE42B1C7D4A0329C4177617DE5864AA /* FConnection.h in Headers */,
-				208C26E4F7F9544E46DE7DCCF56DCEDC /* FConstants.h in Headers */,
-				B4592A85208BA71D07F267C9743D0210 /* FDataEvent.h in Headers */,
-				C6E30428F84E81A7DBC8300BE93C9239 /* FEmptyNode.h in Headers */,
-				35C43AFBC7EA71125CAF4D1CFF5D9E4A /* FEvent.h in Headers */,
-				7778A74F15FFFD1C05497A5E926E8715 /* FEventEmitter.h in Headers */,
-				8C42D689F7282ECFB561869D5D4E9647 /* FEventGenerator.h in Headers */,
-				2C463D6B7A5EC5291926FCC7D01F2C47 /* FEventRaiser.h in Headers */,
-				C4E1E950931E52050E9BE5FCD9272EEE /* FEventRegistration.h in Headers */,
-				B8CA041BC37733E92042E962A580E099 /* FImmutableSortedDictionary.h in Headers */,
-				99B08BD22638BB764A6DB636BD6EEE83 /* FImmutableSortedSet.h in Headers */,
-				65DDC8DA853BA7480883F3BAFB91A171 /* FImmutableTree.h in Headers */,
-				47B7043414C74508AF47375D56971161 /* FIndex.h in Headers */,
-				849A0FE6B697BF9683283B3EB1974738 /* FIndexedFilter.h in Headers */,
-				228929A7082BBB9704D2E27875BBBC3C /* FIndexedNode.h in Headers */,
-				7B816CEC366EA348B2258921C66F1FFD /* FIRDatabase.h in Headers */,
-				4A89D83C5CC15E68857BC96F14C6650A /* FIRDatabase_Private.h in Headers */,
-				C251990DC88BD29ACCA3CB46E5935711 /* FIRDatabaseComponent.h in Headers */,
-				202B598D9F522FC624E1A5CA144FBF88 /* FIRDatabaseConfig.h in Headers */,
-				E3D6CE7A26373CE27EA2F2758B2D4150 /* FIRDatabaseConfig_Private.h in Headers */,
-				DA396B909B86FC5569879519A6FE8E22 /* FIRDatabaseQuery.h in Headers */,
-				20F0342925167698872DC671F62230A1 /* FIRDatabaseQuery_Private.h in Headers */,
-				C79C2E16C567BE240374AB2ACA80E9D3 /* FIRDatabaseReference.h in Headers */,
-				6B2411DC7943C6C7EA36A81B77060E1B /* FIRDatabaseReference_Private.h in Headers */,
-				2CBF94020885D3E5D21547C8957B4727 /* FIRDataEventType.h in Headers */,
-				A35AAF57E54A60DAE0F8B0B73A95E909 /* FIRDataSnapshot.h in Headers */,
-				2CA687E15AC9FA358EBC36A0F852F969 /* FIRDataSnapshot_Private.h in Headers */,
-				57F3914A57D8C391B28D7543A043EE5D /* FirebaseDatabase-umbrella.h in Headers */,
-				963AC4F88FC6DB6A294C23A6B94B895E /* FirebaseDatabase.h in Headers */,
-				470FDDE3E540331E5BE054C0503565F0 /* FIRMutableData.h in Headers */,
-				3E4EEE0E3EE4D0921C6E38F5B43B14ED /* FIRMutableData_Private.h in Headers */,
-				CFF003B36714BB84CCABFD01A374DEF7 /* FIRNoopAuthTokenProvider.h in Headers */,
-				5CC90ADB1221D7A10D9E9EE241C524EA /* FIRRetryHelper.h in Headers */,
-				C69ADB52F0C74C9395A7D765309FCD83 /* FIRServerValue.h in Headers */,
-				55958675C0EF11E90E71F3EDEA3D06DD /* FIRTransactionResult.h in Headers */,
-				D52AFA8E3FBCEC394CDC82379FE88B52 /* FIRTransactionResult_Private.h in Headers */,
-				5B975A3DECF705D94BB558B2D3D2DF40 /* FKeepSyncedEventRegistration.h in Headers */,
-				A68E8B2EE1FF194B6655B436EB9BDC33 /* FKeyIndex.h in Headers */,
-				70031267032F653DD49657907E61FA20 /* FLeafNode.h in Headers */,
-				11909EA60514E6096BA099AFCCA379C5 /* FLevelDBStorageEngine.h in Headers */,
-				48ED6CD7CE693EB34FE9C061FDFF5BAC /* FLimitedFilter.h in Headers */,
-				4804CD4E94A28FF0B14D20E80F800441 /* FListenComplete.h in Headers */,
-				2451451CBD8C77F590EF31AB7EE78677 /* FListenProvider.h in Headers */,
-				5AAE67A01BF047446F46E6B3664C4103 /* FLLRBEmptyNode.h in Headers */,
-				8C800877FC0D7864D21CCC0F4EDE99B2 /* FLLRBNode.h in Headers */,
-				19E64928C0FC267F6E776C53E24209C6 /* FLLRBValueNode.h in Headers */,
-				051C58E6804A52F6CF7B07F80DE42636 /* FMaxNode.h in Headers */,
-				D8D511258397444B99E83CE98266F4B8 /* FMerge.h in Headers */,
-				B011CBB9CD6B822748DBDFC864B74856 /* FNamedNode.h in Headers */,
-				E98AEA2493832610AD36E545FB8EF061 /* FNextPushId.h in Headers */,
-				659DDECDB1D8A810216CF4556E9BE3EE /* FNode.h in Headers */,
-				4AB9971E89197C7C9F49C300467656AA /* FNodeFilter.h in Headers */,
-				2CFE1B703A0C9BE2E09D32BE5CD79D90 /* FOperation.h in Headers */,
-				BFDFD609230B6D3440C1D188AFC60895 /* FOperationSource.h in Headers */,
-				221B165A4CB43C6F0214B528EB09269F /* FOverwrite.h in Headers */,
-				097040CACC3CDACE82F943EFFB956500 /* FParsedUrl.h in Headers */,
-				A93A8D91D7274E5B74371311D47C73F7 /* FPath.h in Headers */,
-				9DB252952D8A38CCE72464F9F7200248 /* FPathIndex.h in Headers */,
-				F9FC3FD462F8BBAA08CFA4281BEDAA05 /* FPendingPut.h in Headers */,
-				2C14CAD723AA204EF0CDA409CE396B2F /* FPersistenceManager.h in Headers */,
-				D8A5DE27DCB5E12927641DB568623146 /* FPersistentConnection.h in Headers */,
-				23D304F5D4898524973C90F483721F94 /* FPriorityIndex.h in Headers */,
-				1965EAB9CD8AE482223EB5F0E31D7D68 /* FPruneForest.h in Headers */,
-				C678D9A28B761A4DA5E29CCF6DCBE82A /* FQueryParams.h in Headers */,
-				18B203D4F60DA2A5FA9E3974EB4D187A /* FQuerySpec.h in Headers */,
-				31E211272046EA07C2045244B153B550 /* FRangedFilter.h in Headers */,
-				3D2636DAE91F7C2F9B77790C4531C0D1 /* FRangeMerge.h in Headers */,
-				259224D7B367FA639FD4BBFA1013468E /* FRepo.h in Headers */,
-				AEB451E345319D5C736EC9E375325C18 /* FRepo_Private.h in Headers */,
-				06FADEA97461819677F4A1759A451B54 /* FRepoInfo.h in Headers */,
-				7F2F5653A57ABB9417C394852A04B755 /* FRepoManager.h in Headers */,
-				5C9DC0DDA64154FCD249C79DFE95B6B5 /* FServerValues.h in Headers */,
-				28A75C5EBFF04D453E76388DB74D8FFE /* FSnapshotHolder.h in Headers */,
-				C8551DAA6BEE4C8D580B625D19EED829 /* FSnapshotUtilities.h in Headers */,
-				2F572EF33ED6B78210874F444B84B640 /* FSparseSnapshotTree.h in Headers */,
-				D260EB226C838D723F36960F519FA36A /* FSRWebSocket.h in Headers */,
-				F382F5EE61B5A56B06F26BE8C4E98657 /* FStorageEngine.h in Headers */,
-				D5EBF5BEB2D1AD674AF8B08215FE9A09 /* FStringUtilities.h in Headers */,
-				A19AD85CAB80A263AFE2A2B213D752F7 /* FSyncPoint.h in Headers */,
-				D806CC0D12BBBE72304FF80125CFFB95 /* FSyncTree.h in Headers */,
-				69AD7F4C5ECF8E9C8E699F6BC5018DCA /* FTrackedQuery.h in Headers */,
-				F12D3A396FD4AFB5E00C6DB18698306B /* FTrackedQueryManager.h in Headers */,
-				5A52D232EABA2665C7EEF5035A49373E /* FTransformedEnumerator.h in Headers */,
-				70E6D6C00DE7612C2B1BAEF1BC3AB1CB /* FTree.h in Headers */,
-				01F14311F4F4FC48397BE16D21E33530 /* FTreeNode.h in Headers */,
-				2BEABA1DB7F161D3909C14E7D3B744A2 /* FTreeSortedDictionary.h in Headers */,
-				EF101A4A352EAF4EDE9A0F75DC37AAEC /* FTreeSortedDictionaryEnumerator.h in Headers */,
-				B1F0A49CE2997BD30DF7252D6920BA40 /* FTupleBoolBlock.h in Headers */,
-				6D1271BD091A228A0F042FB570729DD1 /* FTupleCallbackStatus.h in Headers */,
-				16EE0BBA1E994DCB35C6112274E78E49 /* FTupleFirebase.h in Headers */,
-				7A81401CD997F8C281A44B24AD0C1C47 /* FTupleNodePath.h in Headers */,
-				07DA3F6F36D2000762876319982A08D8 /* FTupleObjectNode.h in Headers */,
-				D312D681EDBEB8E36664C1DEB29425FD /* FTupleObjects.h in Headers */,
-				CBF64DE8DF849F4CF5E27D6BB749E2FC /* FTupleOnDisconnect.h in Headers */,
-				DAAEA152388F6C52245AA64E442D05FC /* FTuplePathValue.h in Headers */,
-				26211344E4366BFE48BA6B1145DB814C /* FTupleRemovedQueriesEvents.h in Headers */,
-				0C3CD46BCBCCF60B4D053E598FEFF3CC /* FTupleSetIdPath.h in Headers */,
-				1879D3460407979438FAB2CA5DCAF2EB /* FTupleStringNode.h in Headers */,
-				16E45CDE3F7FD18E427FB09401303BD6 /* FTupleTransaction.h in Headers */,
-				47738E305055A2711E3FF8FFA7CDBCF2 /* FTupleTSN.h in Headers */,
-				A4A889BBD02B931CB5C8BFD0D4F41883 /* FTupleUserCallback.h in Headers */,
-				C7C18B192A7D3836E0740DCFA83F0713 /* FTypedefs.h in Headers */,
-				BFA1C79B75FE0EDD55BCDC01CEA539B2 /* FTypedefs_Private.h in Headers */,
-				D4956895D64F9FC87662AB74344D45FA /* FUtilities.h in Headers */,
-				BF08B4C324DECBE26BFD0F695C4190BF /* FValidation.h in Headers */,
-				7EFBFADDE51783B82A51CCED09D408C1 /* FValueEventRegistration.h in Headers */,
-				279EEB1AA09C07042ADB5B7E99F04874 /* FValueIndex.h in Headers */,
-				1BD91D20F81071C7A1510A50F4497F88 /* FView.h in Headers */,
-				98CE6713616C5FB36055CE35CB912580 /* FViewCache.h in Headers */,
-				7D0FE3A51F36E7C4A2678853982A411D /* FViewProcessor.h in Headers */,
-				5A9C4484FCE755697ADFC6A28E20A016 /* FViewProcessorResult.h in Headers */,
-				FD9FFF2F68300DC16B9A1A9F20F816B2 /* FWebSocketConnection.h in Headers */,
-				699B4E6CCA689A6F0E4969C29E270439 /* FWriteRecord.h in Headers */,
-				7B52884624478BA3B6D5273237DA612C /* FWriteTree.h in Headers */,
-				B5121C8C0C047C4C994A3296F4CBFA29 /* FWriteTreeRef.h in Headers */,
-				E3AD662787E8CC55CC07DABB793339B9 /* NSData+SRB64Additions.h in Headers */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		ABA67676FDB60A7C731882A20C8E81A8 /* Headers */ = {
-			isa = PBXHeadersBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				F0F32B4EEF9319CAE2FD9492C961AD46 /* arena.h in Headers */,
-				DDF72157B0D446D7EF4A6D0367B053B8 /* block.h in Headers */,
-				C7C5928AE2BAFCE30C33F465FC27168F /* block_builder.h in Headers */,
-				D71A9029947DDB7C7445FC4B406652A8 /* builder.h in Headers */,
-				1F32BFF2BC7FAF7A084CD1BB15AF91E7 /* c.h in Headers */,
-				D2B8D11353EE71C28309AD98487B8F89 /* cache.h in Headers */,
-				B4E0070CB2B00E4EFDFBD22D3115C495 /* coding.h in Headers */,
-				CEA524769B166ED5FC36B6E9FA0B041D /* comparator.h in Headers */,
-				3855955853294797A0C2C84BE912A404 /* crc32c.h in Headers */,
-				D2F2DD920168057066470E3B831DE30C /* db.h in Headers */,
-				619DF4CCAA6E644FCC811DDB00BFEFE9 /* db_impl.h in Headers */,
-				69426E491EC5E31B1F89407ED742FE37 /* db_iter.h in Headers */,
-				2D135A659B0C2F30BDBFC9AA2C99E2D7 /* dbformat.h in Headers */,
-				16EA928A38BEB76C4360E0EE35EFBD54 /* dumpfile.h in Headers */,
-				B38FE144483BB55FAE1610A2ABE9AD1E /* env.h in Headers */,
-				140985971178C5D41E3754E4D0E24CE5 /* env_posix_test_helper.h in Headers */,
-				5F0ECED121063D05096B8D84C08255B6 /* env_windows_test_helper.h in Headers */,
-				8FAA82B55473DB6B1C1003882B31A970 /* export.h in Headers */,
-				EA1E8453723787E846BF722D1313A31A /* filename.h in Headers */,
-				5A4626A78A5C4E49BDB009D02D3E261B /* filter_block.h in Headers */,
-				E40EC66CF2490B6FC9306FB9368DC6C0 /* filter_policy.h in Headers */,
-				CEB003A648ED9530DED6E090307C484B /* format.h in Headers */,
-				B7F3AA388B10FFB10143FA5537650DE3 /* hash.h in Headers */,
-				CACA4866A8A21F378C5C22C4550461CC /* histogram.h in Headers */,
-				87910C8366AC5C2E1F9E36AE14F2CA27 /* iterator.h in Headers */,
-				88C13D592F16B7278CEE5150D44A0F66 /* iterator_wrapper.h in Headers */,
-				7DC98B441048ADBA595C6F12B37AC7CE /* leveldb-library-umbrella.h in Headers */,
-				DBAF982DF23404E0B19A86076B64C05D /* log_format.h in Headers */,
-				93D5643C0AB33FEEBBC46006C28AD6EC /* log_reader.h in Headers */,
-				6330222D094742EE882DEB728FF1E4F8 /* log_writer.h in Headers */,
-				926AA07593CA64CDB72ADCC7CBA0479C /* logging.h in Headers */,
-				2E10DF9E19D8A04DC5A179A4C33399C0 /* memtable.h in Headers */,
-				5610D55DC7926A495CA4069724B8821D /* merger.h in Headers */,
-				0886A6110663ED25DDF1B88272082117 /* mutexlock.h in Headers */,
-				0AA93414C026466DC54C9F92AE2330CF /* no_destructor.h in Headers */,
-				13BF445F2F36873CF3CA07CB28111B6A /* options.h in Headers */,
-				89BA3207279ECA125A45BF428F2A38B8 /* port.h in Headers */,
-				94F443F2A3E409A0DD460F8CED709426 /* port_example.h in Headers */,
-				4B397BF3049EE16BB28615BA0363A45A /* port_stdcxx.h in Headers */,
-				8F6DE00950247BF705BAEA10E4A231FC /* posix_logger.h in Headers */,
-				79301BB80C42E8D6F837287E5BF87C4C /* random.h in Headers */,
-				EF84EEE29E8E694C0B5352DC64618DBC /* skiplist.h in Headers */,
-				78173DD3AD8FEBDC30D56CBCA2A8420D /* slice.h in Headers */,
-				2CCBC93C06F5DC0F576D2942A1ADDF23 /* snapshot.h in Headers */,
-				00DC3A5E3088F6BC409056FF2759504C /* status.h in Headers */,
-				3D6B3854EA4680B3AEE04274CE3CB053 /* table.h in Headers */,
-				1F16F7F044524F9AC7E1F047728FF56C /* table_builder.h in Headers */,
-				C30900E8594FBAAAAE8F3699D8F3A31E /* table_cache.h in Headers */,
-				FAA990BC4EB21DBA7A5B4C96DD13C0BA /* testharness.h in Headers */,
-				5A8F8D9E203FF204C505E11577716FE6 /* testutil.h in Headers */,
-				44C4FF48A0CA1153ADC2F11A7E7D9853 /* thread_annotations.h in Headers */,
-				2D0764461AAE28446CF1FB7F4B24B200 /* two_level_iterator.h in Headers */,
-				1D83E631A206C9DD34CF8676CC11014D /* version_edit.h in Headers */,
-				69014479FF4FA988406168B4BE30EDF1 /* version_set.h in Headers */,
-				C0840CA66776CEA209B224ED2C274294 /* windows_logger.h in Headers */,
-				46C616765663C3ACB4778DE8108575CE /* write_batch.h in Headers */,
-				EC64299425B5180EDF4E687B084C7A04 /* write_batch_internal.h in Headers */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		BEE3891473A15CF8CB4AD681672D254D /* Headers */ = {
-			isa = PBXHeadersBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				D179BDCEA10E68B3BEC247D80C2629E1 /* GoogleUtilities-umbrella.h in Headers */,
-				9094065368AC7058A86BB581D076CFF3 /* GULAppEnvironmentUtil.h in Headers */,
-				D22F0143382C701C65528F14BBF6F3A3 /* GULHeartbeatDateStorage.h in Headers */,
-				6E23414B614CF0541D4234A44D46E6A9 /* GULKeychainStorage.h in Headers */,
-				A71FF5D6D6D76CC6FC7B3B43B6C33376 /* GULKeychainUtils.h in Headers */,
-				CE649478AFA1F9ADA8924C1D1598400F /* GULLogger.h in Headers */,
-				BAADC524E75E1D8928202B1A5CD0FE6E /* GULLoggerLevel.h in Headers */,
-				276285542CBD047E16A240C92D981C9F /* GULSecureCoding.h in Headers */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		D1E9DD2094CEAB318483F8919C3332C5 /* Headers */ = {
-			isa = PBXHeadersBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				E80BFE452CF64B1A92B59699AAA3FBBD /* GDTCORAssert.h in Headers */,
-				6A8AA68F2D6AF1B11F283156321088FC /* GDTCORClock.h in Headers */,
-				3BF1D3EC5952C1777B11B7D357FB5AE2 /* GDTCORConsoleLogger.h in Headers */,
-				547E592CCE6FFFEC8B870CA68D4642C5 /* GDTCORDataFuture.h in Headers */,
-				DC58F5895F8BCD218A84F9054BC3E86C /* GDTCOREvent.h in Headers */,
-				86AC5E16F0CB973D87D07A3A1813EDCF /* GDTCOREvent_Private.h in Headers */,
-				60E5A2DE0C8C9144803E3861B1958FE4 /* GDTCOREventDataObject.h in Headers */,
-				BF7F746EAC86697E7B02E108948287F5 /* GDTCOREventTransformer.h in Headers */,
-				CF948DD801C7F1000C5484B956587B3C /* GDTCORFlatFileStorage.h in Headers */,
-				BE8B58E802E3BFC76B2ADD29F2EC4AF8 /* GDTCORLifecycle.h in Headers */,
-				CAE26FCEE07519D3D1BB7633D4CB301B /* GDTCORPlatform.h in Headers */,
-				B9B6AC6AA6B4045C5E47AB555D26D4DE /* GDTCORPrioritizer.h in Headers */,
-				6AE785742922D3C6C01E2F07B874B586 /* GDTCORReachability.h in Headers */,
-				756B4E768703DC810CF59DCAB2F75B99 /* GDTCORReachability_Private.h in Headers */,
-				032657E3A1E35E842C7BF1668C6505DF /* GDTCORRegistrar.h in Headers */,
-				F48022BCC822C16AF2D17202FEE170F3 /* GDTCORRegistrar_Private.h in Headers */,
-				621E3BBEA4C5834B355B1DCC0EC89EF0 /* GDTCORStorageProtocol.h in Headers */,
-				1182CF33679A44B433D77AACE124DEA6 /* GDTCORTargets.h in Headers */,
-				75E5079C628FEAB8F122ECFFF541CE65 /* GDTCORTransformer.h in Headers */,
-				6FA79E35AAEE2335FC5F1EA7701CCB38 /* GDTCORTransformer_Private.h in Headers */,
-				AEC4797BD06C0E8B4DF592D417318437 /* GDTCORTransport.h in Headers */,
-				74831D60BF46F763B40E019D3835F87D /* GDTCORTransport_Private.h in Headers */,
-				DB79E37CCB8545B7EE8831773E26CFDF /* GDTCORUploadCoordinator.h in Headers */,
-				92B13C918F4EF811AA2A66F54DBC66A0 /* GDTCORUploader.h in Headers */,
-				D6B664412AE127A4AC23D401920FEB09 /* GDTCORUploadPackage.h in Headers */,
-				82457C88EEDA09C07B542C95C505C68F /* GDTCORUploadPackage_Private.h in Headers */,
-				88DE778EA02BEFE5E2EC61E357354DA0 /* GoogleDataTransport-umbrella.h in Headers */,
-				02D10C14DA679930370B85710695DC08 /* GoogleDataTransport.h in Headers */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		F4B4A15AFE8B97D97C7D1E0F01C99895 /* Headers */ = {
-			isa = PBXHeadersBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				C5D7F1E742FC356D7634879D05F7E194 /* cct.nanopb.h in Headers */,
-				754738AB24E60CE84A402F4D60C145F7 /* GDTCCTCompressionHelper.h in Headers */,
-				55095E5933B1AA1740A9E48E4D490DDD /* GDTCCTNanopbHelpers.h in Headers */,
-				E8BB147D613CF877470C822F05E42DFD /* GDTCCTPrioritizer.h in Headers */,
-				C2EFBC4F0E04491F1E47B04D8DB2A7BD /* GDTCCTUploader.h in Headers */,
-				AF1811523BA6E37F94F756239BE65D94 /* GDTCOREvent+NetworkConnectionInfo.h in Headers */,
-				2AE327A1A87D191D0BE3EE72F7417E41 /* GoogleDataTransportCCTSupport-umbrella.h in Headers */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		F5D0EAAFD8DA9792625FED4C232DCF3D /* Headers */ = {
-			isa = PBXHeadersBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				B7E58D721D4EB5B30F25444AD97F6915 /* nanopb-umbrella.h in Headers */,
-				4E40D1A913022E26EE13436779D6DAFE /* pb.h in Headers */,
-				D87DEFF98E5A8549450A1851FC4987AA /* pb_common.h in Headers */,
-				3FAB976E8FED078E86BE0BC439996714 /* pb_decode.h in Headers */,
-				CBC9592C21A1A9DEAA3C3953C198354E /* pb_encode.h in Headers */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXHeadersBuildPhase section */
-
-/* Begin PBXNativeTarget section */
-		2BBF7206D7FAC92C82A042A99C4A98F8 /* PromisesObjC */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 73D7039327B012B3B4982F70E1071971 /* Build configuration list for PBXNativeTarget "PromisesObjC" */;
-			buildPhases = (
-				6CD78F23D4128188EF999D177C06916E /* Headers */,
-				342034DA9FFE74C862EB3037761FED1A /* Copy . Private Headers */,
-				D22D6CC9B78A3B46B528EE4DF61DFADC /* Copy . Public Headers */,
-				DC748FCA9230EDCDDFCFB391312AF625 /* Sources */,
-				4D795267449E2E77F2C9E12DF3785D06 /* Frameworks */,
-				B96681F0999E2CAE6665891034DDDF27 /* Resources */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-			);
-			name = PromisesObjC;
-			productName = PromisesObjC;
-			productReference = 3347A1AB6546F0A3977529B8F199DC41 /* FBLPromises.framework */;
-			productType = "com.apple.product-type.framework";
-		};
-		4402AFF83DBDC4DD07E198685FDC2DF2 /* FirebaseCore */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 3435C2ED50CB457766D806A0A6BB12E6 /* Build configuration list for PBXNativeTarget "FirebaseCore" */;
-			buildPhases = (
-				7C3D494E08A8568F24EC772DAF53F0DA /* Headers */,
-				7AA1EC049F5419E78B4ECDFAA743F9A8 /* Sources */,
-				4F00AE09C48E9A5504870A90CE6F1EAE /* Frameworks */,
-				598EA81F6D609725AF3C405DCEC51F1B /* Resources */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-				26FC2161961F82AD944794A5997EB784 /* PBXTargetDependency */,
-				B99B55B0C1626310699BE909D29A1772 /* PBXTargetDependency */,
-				DBF84127F945C1C7D81DD8293C0605A2 /* PBXTargetDependency */,
-			);
-			name = FirebaseCore;
-			productName = FirebaseCore;
-			productReference = E2B63D462DB7F827C4B11FD51E4F8E2D /* FirebaseCore.framework */;
-			productType = "com.apple.product-type.framework";
-		};
-		5C0371EE948D0357B8EE0E34ABB44BF0 /* GoogleDataTransport */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 05B49849CA3C215D143DB2840104B4FA /* Build configuration list for PBXNativeTarget "GoogleDataTransport" */;
-			buildPhases = (
-				D1E9DD2094CEAB318483F8919C3332C5 /* Headers */,
-				ADBEF7104660ED701544401F0AEFCA4F /* Sources */,
-				477B1EBCCA0EF7E6D74F2C2243B920B9 /* Frameworks */,
-				5FB5FFC31A71F1172D45E7AE78AF89AC /* Resources */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-			);
-			name = GoogleDataTransport;
-			productName = GoogleDataTransport;
-			productReference = 856B5CD56F194FAD26EA91620B66D614 /* GoogleDataTransport.framework */;
-			productType = "com.apple.product-type.framework";
-		};
-		620E05868772C10B4920DC7E324F2C87 /* FirebaseCoreDiagnostics */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = C6158C953A35D1170546EC7F8DA13EF9 /* Build configuration list for PBXNativeTarget "FirebaseCoreDiagnostics" */;
-			buildPhases = (
-				1DD803FE060BC73A3D01942A1B852FFC /* Headers */,
-				8716DD37801753F317D0EB9CDD236476 /* Sources */,
-				7B7CEF043B39B6E95CBFE1B56CED771E /* Frameworks */,
-				751409BE84215398AC80A92142483FC3 /* Resources */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-				3691D6761F1E170863ABF8C504320FB5 /* PBXTargetDependency */,
-				43DE77A89C899E34324DCEF88910219F /* PBXTargetDependency */,
-				C6978527C8AABEF32FE49D2C989DA8DC /* PBXTargetDependency */,
-				6E838F720E0A45A23453941FB7FAFCE6 /* PBXTargetDependency */,
-			);
-			name = FirebaseCoreDiagnostics;
-			productName = FirebaseCoreDiagnostics;
-			productReference = 8CC9178C366942FD6FF6A115604EAD58 /* FirebaseCoreDiagnostics.framework */;
-			productType = "com.apple.product-type.framework";
-		};
-		736AF68F6527ACF6B4A4C54728824A1C /* FirebaseDatabase */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = D907BE725A2E71CEBEB020517B9168DC /* Build configuration list for PBXNativeTarget "FirebaseDatabase" */;
-			buildPhases = (
-				7D3105B483B9F739D9AEA849D1194C6B /* Headers */,
-				265BB15A03974EC7D1FBA324A7E78C0D /* Sources */,
-				6751468BB80C4AF1CF6394E0BD57CF9F /* Frameworks */,
-				CF2B193338A91E7EBBFED14D22A98BDA /* Resources */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-				1C5D35E2072BC65722A5FBF9DFED4330 /* PBXTargetDependency */,
-				1A76BA8905879F4B6A03DF488E3F6DBC /* PBXTargetDependency */,
-				7EC7F475FF034F08AA6359041957F5E1 /* PBXTargetDependency */,
-			);
-			name = FirebaseDatabase;
-			productName = FirebaseDatabase;
-			productReference = 51671C73F008B5C0C3751B3855999213 /* FirebaseDatabase.framework */;
-			productType = "com.apple.product-type.framework";
-		};
-		8D7F5D5DD528D21A72DC87ADA5B12E2D /* GoogleUtilities */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = A6C1285A3A85AD57E7A34AC0F64F6E3D /* Build configuration list for PBXNativeTarget "GoogleUtilities" */;
-			buildPhases = (
-				BEE3891473A15CF8CB4AD681672D254D /* Headers */,
-				8A081F2D7C3CAF7EE9E1C54276FFA425 /* Sources */,
-				B959A7F826CE815470B03B08C71E5942 /* Frameworks */,
-				80FDA8C0B37076C7686DA72C0B639BC6 /* Resources */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-				C614A6DBEA2266B48117FD3CC0CA82A6 /* PBXTargetDependency */,
-			);
-			name = GoogleUtilities;
-			productName = GoogleUtilities;
-			productReference = B43874C6CBB50E7134FBEC24BABFE14F /* GoogleUtilities.framework */;
-			productType = "com.apple.product-type.framework";
-		};
-		9307B7A119490930CF70393AB529AAC1 /* leveldb-library */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 687F852DB15D7E0F2C84046A996FF2D6 /* Build configuration list for PBXNativeTarget "leveldb-library" */;
-			buildPhases = (
-				ABA67676FDB60A7C731882A20C8E81A8 /* Headers */,
-				8F82E161C16BB4526E938FBAB9CCF63A /* Sources */,
-				301942F9FBB54A7C29EC65FB93D084B5 /* Frameworks */,
-				5C42A166504262EFB0008B9D98F6EBA0 /* Resources */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-			);
-			name = "leveldb-library";
-			productName = "leveldb-library";
-			productReference = 0A9F46A999C47653013D3AD854352507 /* leveldb.framework */;
-			productType = "com.apple.product-type.framework";
-		};
-		D2B5E7DCCBBFB32341D857D01211A1A3 /* nanopb */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = CEF916B3F6E10D600D494DF7F04648A7 /* Build configuration list for PBXNativeTarget "nanopb" */;
-			buildPhases = (
-				F5D0EAAFD8DA9792625FED4C232DCF3D /* Headers */,
-				D29FFB04B766D1D421440604C5623964 /* Sources */,
-				5BCF26CE614C85AC64F9F81B7F404C0F /* Frameworks */,
-				5350E54C51C2E95E95183D53E4C003DF /* Resources */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-			);
-			name = nanopb;
-			productName = nanopb;
-			productReference = 06FC5C9CF96D60C50FCD47D339C91951 /* nanopb.framework */;
-			productType = "com.apple.product-type.framework";
-		};
-		F4BE744C6379A956B2D5CC93D8F1EE2E /* Pods-openTok */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 16D35C68618DC0606DA4F1588993ACAC /* Build configuration list for PBXNativeTarget "Pods-openTok" */;
-			buildPhases = (
-				5F1A29F02E1D162FC479713AF2B06783 /* Headers */,
-				4C27C647CCDA6D975C4AB9F5D64C88DC /* Sources */,
-				5617A0BB9C5753E42E7D79212AF605E0 /* Frameworks */,
-				52EEA9E49EFBF83B100FBF47D4B2DA22 /* Resources */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-				05C75EA42F5967E620D78FEFEC522BA1 /* PBXTargetDependency */,
-				A3C98ED32CF1CD1DC5D0821BD0DC0ABD /* PBXTargetDependency */,
-				EE98EBE58BEA57ED772859CD1D7DB074 /* PBXTargetDependency */,
-				C1955461A167D0D64799DE8DEDE093E7 /* PBXTargetDependency */,
-				00FFA57F9CC490792E3DCAE3019E4960 /* PBXTargetDependency */,
-				BE485465786C25F3EB4BD1736B954C7C /* PBXTargetDependency */,
-				47BEAA6CB899E33E648464BE3CCF8998 /* PBXTargetDependency */,
-				08AF07E3A18727585148418198202BC4 /* PBXTargetDependency */,
-				46AEFC4310A18B1B432B0E21430D3CEB /* PBXTargetDependency */,
-				2265E310D5A7434D379EBC42CF13AC11 /* PBXTargetDependency */,
-				29226BC32636F37D85BDAD06C455F391 /* PBXTargetDependency */,
-				844BAF623E2BCE1EABF79500E460BDD5 /* PBXTargetDependency */,
-			);
-			name = "Pods-openTok";
-			productName = "Pods-openTok";
-			productReference = 17A5FB2BB510D58010F5154CE559C2C3 /* Pods_openTok.framework */;
-			productType = "com.apple.product-type.framework";
-		};
-		F4F25FCAC51B51FD5F986EB939BF1F87 /* GoogleDataTransportCCTSupport */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 8F6C4E35B62D2E11DF31C69F295F71C9 /* Build configuration list for PBXNativeTarget "GoogleDataTransportCCTSupport" */;
-			buildPhases = (
-				F4B4A15AFE8B97D97C7D1E0F01C99895 /* Headers */,
-				0B6591EEAA293C5F4CDEDDFC92369872 /* Sources */,
-				2B847EC9F642EFA623AF85427D7F5D6C /* Frameworks */,
-				AE10F36B820DCF5EB2D7A412252B621C /* Resources */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-				5E85804415BEC75E80DCD84AC2B3734A /* PBXTargetDependency */,
-				C8A870403BB3782CD599915F0F1B4DDA /* PBXTargetDependency */,
-			);
-			name = GoogleDataTransportCCTSupport;
-			productName = GoogleDataTransportCCTSupport;
-			productReference = 6942351307BC1F54575D9853307EAE0E /* GoogleDataTransportCCTSupport.framework */;
-			productType = "com.apple.product-type.framework";
-		};
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
-		BFDFE7DC352907FC980B868725387E98 /* Project object */ = {
-			isa = PBXProject;
-			attributes = {
-				LastSwiftUpdateCheck = 1100;
-				LastUpgradeCheck = 1100;
-			};
-			buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */;
-			compatibilityVersion = "Xcode 9.3";
-			developmentRegion = en;
-			hasScannedForEncodings = 0;
-			knownRegions = (
-				en,
-				Base,
-			);
-			mainGroup = CF1408CF629C7361332E53B88F7BD30C;
-			productRefGroup = 2A95F72240D94B812814C6F95A1C4E74 /* Products */;
-			projectDirPath = "";
-			projectRoot = "";
-			targets = (
-				072CEA044D2EF26F03496D5996BBF59F /* Firebase */,
-				8EC0F2618965C875A96BFDBEE5D9734C /* FirebaseAuthInterop */,
-				4402AFF83DBDC4DD07E198685FDC2DF2 /* FirebaseCore */,
-				620E05868772C10B4920DC7E324F2C87 /* FirebaseCoreDiagnostics */,
-				5EB4B0B6DA6D5C0C3365733BEAA1C485 /* FirebaseCoreDiagnosticsInterop */,
-				736AF68F6527ACF6B4A4C54728824A1C /* FirebaseDatabase */,
-				5C0371EE948D0357B8EE0E34ABB44BF0 /* GoogleDataTransport */,
-				F4F25FCAC51B51FD5F986EB939BF1F87 /* GoogleDataTransportCCTSupport */,
-				8D7F5D5DD528D21A72DC87ADA5B12E2D /* GoogleUtilities */,
-				9307B7A119490930CF70393AB529AAC1 /* leveldb-library */,
-				D2B5E7DCCBBFB32341D857D01211A1A3 /* nanopb */,
-				F4BE744C6379A956B2D5CC93D8F1EE2E /* Pods-openTok */,
-				2BBF7206D7FAC92C82A042A99C4A98F8 /* PromisesObjC */,
-			);
-		};
-/* End PBXProject section */
-
-/* Begin PBXResourcesBuildPhase section */
-		52EEA9E49EFBF83B100FBF47D4B2DA22 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		5350E54C51C2E95E95183D53E4C003DF /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		598EA81F6D609725AF3C405DCEC51F1B /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		5C42A166504262EFB0008B9D98F6EBA0 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		5FB5FFC31A71F1172D45E7AE78AF89AC /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		751409BE84215398AC80A92142483FC3 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		80FDA8C0B37076C7686DA72C0B639BC6 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		AE10F36B820DCF5EB2D7A412252B621C /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		B96681F0999E2CAE6665891034DDDF27 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		CF2B193338A91E7EBBFED14D22A98BDA /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
-		0B6591EEAA293C5F4CDEDDFC92369872 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				E6775BF598A27C32D40B1DCA108C595A /* cct.nanopb.c in Sources */,
-				B172CD005EC2DB0C68CDCFEE1A1442E1 /* GDTCCTCompressionHelper.m in Sources */,
-				6585F9E21D3910193D605670449B5F1D /* GDTCCTNanopbHelpers.m in Sources */,
-				3D8B37C55A23D17BDD1FF9FC819D2F9C /* GDTCCTPrioritizer.m in Sources */,
-				C23156AB0C67FB70CAC131BD5EA62A7D /* GDTCCTUploader.m in Sources */,
-				95DD27DE92BA62EBD4899815B8B82E94 /* GDTCOREvent+NetworkConnectionInfo.m in Sources */,
-				A2AB536DABF58FA5367313F8A4DD4E6E /* GoogleDataTransportCCTSupport-dummy.m in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		265BB15A03974EC7D1FBA324A7E78C0D /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				B8B790054A38100E5BFDB4C9F2166DF8 /* APLevelDB.mm in Sources */,
-				5668DA111AC78F9066F04161000C0446 /* FAckUserWrite.m in Sources */,
-				EEF056693CD4BFDEFDCDF74271D1682B /* FArraySortedDictionary.m in Sources */,
-				2B1703370EEE9C47ED0EF8BE139FB77B /* FAtomicNumber.m in Sources */,
-				36F62A55218BAF702B2FF08559F6772A /* FAuthTokenProvider.m in Sources */,
-				453177599B69C3035FB65976DB71A88A /* fbase64.c in Sources */,
-				EA91FA2AA434FF82E02F1E5357C0CDEE /* FCacheNode.m in Sources */,
-				9C9383AFE832544B9A756FD939602FE1 /* FCachePolicy.m in Sources */,
-				39CEAC444ACA263FBB71A36C598A988B /* FCancelEvent.m in Sources */,
-				B8A54C5C3CC014705A8AEEE4F8130837 /* FChange.m in Sources */,
-				802B6DAEB0CE8C6E44DB8BB5FEFDDB28 /* FChildChangeAccumulator.m in Sources */,
-				0FD5E4E620E147108F75B3F2B08A84E8 /* FChildEventRegistration.m in Sources */,
-				7C0F5FA852455BB602CB06301F73D14C /* FChildrenNode.m in Sources */,
-				2308A882AC63D9EDA7BF9A30CE71A15B /* FClock.m in Sources */,
-				AB0E800A978D847EF27F7AA5C14CF881 /* FCompoundHash.m in Sources */,
-				6BFF9CABC2AC3E40CD05E0A7837E0A86 /* FCompoundWrite.m in Sources */,
-				2A7FC6706A43FA0DD2717B58AF346AF4 /* FConnection.m in Sources */,
-				6CE6CAFFC9CEE98DBF5F7AFC4277110F /* FConstants.m in Sources */,
-				AF3ADCA0514ECA43FAF773D4E9DECC18 /* FDataEvent.m in Sources */,
-				B134B0CEE9718272E9DF54276CA6CB5A /* FEmptyNode.m in Sources */,
-				6D7D25CD028F7733E540220C3D285BB2 /* FEventEmitter.m in Sources */,
-				2770F513094AD2122DC41DA20E6DF45B /* FEventGenerator.m in Sources */,
-				51D4F6526EFCD9C5AFB03818A4006E91 /* FEventRaiser.m in Sources */,
-				2D7CAF5FF42E9C0A104773BF58066D72 /* FImmutableSortedDictionary.m in Sources */,
-				B911CFB8610BBF3C0F24B65ABA3CF3F0 /* FImmutableSortedSet.m in Sources */,
-				56ADE8988785176BF58473001683DEB2 /* FImmutableTree.m in Sources */,
-				4F7A0971FBDC07F6B66F3F79D2DDF5BE /* FIndex.m in Sources */,
-				96EE898B4D6112C56164BD01DF544A95 /* FIndexedFilter.m in Sources */,
-				782F4AC4A6D48CCFB91AA97ED5433141 /* FIndexedNode.m in Sources */,
-				D6D52B1DF78845B91144E2C6CCD5C62E /* FIRDatabase.m in Sources */,
-				7A2EE53A852A177298C0AEFF53F36E57 /* FIRDatabaseComponent.m in Sources */,
-				F7F640FAEB3616081ADA43308E65F784 /* FIRDatabaseConfig.m in Sources */,
-				9709DEECF73CB7857CD08B0F7CC324DC /* FIRDatabaseQuery.m in Sources */,
-				AEAB078B047E355A69FE5114F8154936 /* FIRDatabaseReference.m in Sources */,
-				547F74694AA3F101A60FC29AF4777ECB /* FIRDataSnapshot.m in Sources */,
-				DDAB6756EE8FE818CB93EB1A9D952A4D /* FirebaseDatabase-dummy.m in Sources */,
-				A6FDAD94CB273F331BDBB351144134B8 /* FIRMutableData.m in Sources */,
-				30D3C8C65968B13A370B6DC8BC26175A /* FIRNoopAuthTokenProvider.m in Sources */,
-				EA4B84BFA49549860AB720711432D5FB /* FIRRetryHelper.m in Sources */,
-				A981CEB46C05996B9F96978A564D4DBE /* FIRServerValue.m in Sources */,
-				8F622CBD13FD505E49C926EF05281863 /* FIRTransactionResult.m in Sources */,
-				1794DED80261D1DA5F4EBFEC563D9A34 /* FKeepSyncedEventRegistration.m in Sources */,
-				87DC0888CE2B5E68997CA2E2B91A4943 /* FKeyIndex.m in Sources */,
-				68FD1F5350878B5D0B4EE2938C67AA6E /* FLeafNode.m in Sources */,
-				AE0DD7A7FBBEE2BBD6287686FBC88221 /* FLevelDBStorageEngine.m in Sources */,
-				86F9279C083639AB20DB701A533CCCCA /* FLimitedFilter.m in Sources */,
-				DC6E0025FB91F7FADFCD8770AA001155 /* FListenComplete.m in Sources */,
-				2D2254DCD01BA887C5F4646CE07AC06B /* FListenProvider.m in Sources */,
-				A676E368E2A95B5AC9D25DEE38C0102C /* FLLRBEmptyNode.m in Sources */,
-				07EB38B563731DDFAC0446DDDB806AA3 /* FLLRBValueNode.m in Sources */,
-				5A9A9AE6AC1291C88F5953D3BFC4D965 /* FMaxNode.m in Sources */,
-				D54C12CCD45AD385ADA492A74CCFCE47 /* FMerge.m in Sources */,
-				0E853ECD571210CCA0AE8D49E8AB16B3 /* FNamedNode.m in Sources */,
-				A170992FA484285612C6963363E5DA79 /* FNextPushId.m in Sources */,
-				4FCA995164B919C8FA3CD4AA7CC873E4 /* FOperationSource.m in Sources */,
-				31634FC234EA80C8EDBFB62D3A173F05 /* FOverwrite.m in Sources */,
-				0F55FA658A750DC4B6F3D1E97E13C6DF /* FParsedUrl.m in Sources */,
-				E9EEB22091465F6135B7ECE0ED0A287E /* FPath.m in Sources */,
-				6A6AB52A108BF6FF2FD4FAA9F7FF4AF4 /* FPathIndex.m in Sources */,
-				682894F93E41C971ED72F78FAFD72163 /* FPendingPut.m in Sources */,
-				2A8B94488C854FA57EA18F6EDD2C8065 /* FPersistenceManager.m in Sources */,
-				FF8265E682F5B31C4127924028A5C92E /* FPersistentConnection.m in Sources */,
-				C7736F65BB6EADB27DBC7391CDA9F97E /* FPriorityIndex.m in Sources */,
-				32CAA0959C1714776EBC690E5648B6DC /* FPruneForest.m in Sources */,
-				86AA6392AA1FEDCA0ADF69B38B14755B /* FQueryParams.m in Sources */,
-				8E2F20850942EFB5BA9919749461F27C /* FQuerySpec.m in Sources */,
-				D90F58C9020028273163366EE06B6ADE /* FRangedFilter.m in Sources */,
-				3F46D2CCA4E26F7C3196F3EE84D2AD1F /* FRangeMerge.m in Sources */,
-				BFF780519BE9369BA0159FFE686B5B00 /* FRepo.m in Sources */,
-				CADD0B727BBB942525DC66741C672D41 /* FRepoInfo.m in Sources */,
-				2EF3851F1EB458DB00170E169F7094FC /* FRepoManager.m in Sources */,
-				BB464EF178EBC021F6AAF6DB41B88D5C /* FServerValues.m in Sources */,
-				D1A080CA4394BF24FA7EE1F4D9FE6C06 /* FSnapshotHolder.m in Sources */,
-				F96DA5EE1BC259712FEB86A4E864D5C8 /* FSnapshotUtilities.m in Sources */,
-				01C52B14BE2E2A76B771F7D7D79A26E0 /* FSparseSnapshotTree.m in Sources */,
-				FD35B35ABAF436987B500776F6D1CCF6 /* FSRWebSocket.m in Sources */,
-				0F3F72C16878451737D593D75A14210C /* FStringUtilities.m in Sources */,
-				BC5A60CB3173669785FDA3DF8D0CDA6A /* FSyncPoint.m in Sources */,
-				9C96B262B9F7AD344AC96B378D6575EA /* FSyncTree.m in Sources */,
-				A30642CFFF9C5A8F3478A7A60AE5B7B1 /* FTrackedQuery.m in Sources */,
-				86E8E207A4D9F6D115E2FFEDD8EEB3AA /* FTrackedQueryManager.m in Sources */,
-				907C68C2C45324A2E72BF9CAF93F48CF /* FTransformedEnumerator.m in Sources */,
-				F52BE9EA5A6FA30AD7591AA7243324B6 /* FTree.m in Sources */,
-				87D730E28EF617D4F2CF863BF0F6737F /* FTreeNode.m in Sources */,
-				3103362AF88F977054122551BCB0A19E /* FTreeSortedDictionary.m in Sources */,
-				6DBE9B3D6F0F2CE13E49E5F688DE7F49 /* FTreeSortedDictionaryEnumerator.m in Sources */,
-				CAF5489A9704768C8FDD43DEC3AAC933 /* FTupleBoolBlock.m in Sources */,
-				90B7A4A975358FF6210D58AA46861C62 /* FTupleCallbackStatus.m in Sources */,
-				9D89A42D660A393CF67488B773CAFB86 /* FTupleFirebase.m in Sources */,
-				2C0F8BFC1A40062BCBF52D763A89235F /* FTupleNodePath.m in Sources */,
-				5DED636C6146A0FAF727E7096AB0C763 /* FTupleObjectNode.m in Sources */,
-				9288373444BB899F7AA1DA50A4E283D6 /* FTupleObjects.m in Sources */,
-				330F5B38C9B5DD6ECDA59C10D0E233F6 /* FTupleOnDisconnect.m in Sources */,
-				CCC75B000A3E179DEA8088BA34DB743B /* FTuplePathValue.m in Sources */,
-				B13C59D3EC48DBA3E960F3030AB7DFF0 /* FTupleRemovedQueriesEvents.m in Sources */,
-				A11D454125A8A77C3C56C831647BFDB0 /* FTupleSetIdPath.m in Sources */,
-				E6B5EE50C0455FC011163FDB310BD3AB /* FTupleStringNode.m in Sources */,
-				E7157FF950C22E9D530BCE35DB1B7B9D /* FTupleTransaction.m in Sources */,
-				4BC336156D55C7361145A64DE9701FD7 /* FTupleTSN.m in Sources */,
-				B57B41BDA5F9F5DB72C186D9865980A5 /* FTupleUserCallback.m in Sources */,
-				4AAAD244C67F4C94FE3AE95DA3465C79 /* FUtilities.m in Sources */,
-				FBDC3E3A58C6FABFD180549A49CF313E /* FValidation.m in Sources */,
-				5A123C1FB806917F37E0E8FA627106D6 /* FValueEventRegistration.m in Sources */,
-				E9E439558089E50E50FB264B2206CF34 /* FValueIndex.m in Sources */,
-				72C5EDBA781D29BFAAB551413463132F /* FView.m in Sources */,
-				435BC857BBAAEA6B30965087002B6745 /* FViewCache.m in Sources */,
-				0168BD7A9B87A22117AA12A50030EB3D /* FViewProcessor.m in Sources */,
-				B56F29BF7F794835D2FA9484365D4944 /* FViewProcessorResult.m in Sources */,
-				33BF60FDF58902839A3A48154F74B0F9 /* FWebSocketConnection.m in Sources */,
-				B4A284890905A75D4D379A29452218E0 /* FWriteRecord.m in Sources */,
-				2D05BEC3A17777F63E42844B3E6DB177 /* FWriteTree.m in Sources */,
-				255771799C536116D352662DBD37219D /* FWriteTreeRef.m in Sources */,
-				539FE2DC564E37031364AF0690B4C079 /* NSData+SRB64Additions.m in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		4C27C647CCDA6D975C4AB9F5D64C88DC /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				5804E667302812932C3103450BEB651C /* Pods-openTok-dummy.m in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		7AA1EC049F5419E78B4ECDFAA743F9A8 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				762285060EB8FC38B7345EEDABD9236E /* FIRAnalyticsConfiguration.m in Sources */,
-				B2351BA6AA93042A3CD8553B32EB1410 /* FIRApp.m in Sources */,
-				C963AB40523BA26634F4C7F8EBB21E54 /* FIRAppAssociationRegistration.m in Sources */,
-				E27395E133228033F2BC45F49F521CD9 /* FIRBundleUtil.m in Sources */,
-				CBCA7426005DB9BB0ADAE6326E4CC0E1 /* FIRComponent.m in Sources */,
-				E19AC8F914674DC90C18FCADD666D857 /* FIRComponentContainer.m in Sources */,
-				E9267477B2E0A130107F04B268914775 /* FIRComponentType.m in Sources */,
-				009E1F59EB2DBBF4377431DDB9CD83A7 /* FIRConfiguration.m in Sources */,
-				6FD783676DA1F46810033F9098475B13 /* FIRCoreDiagnosticsConnector.m in Sources */,
-				EF47B845839E293A5AF11EF2F7946CC8 /* FIRDependency.m in Sources */,
-				04DBB989E22ABC0651DD0179BE01D09E /* FIRDiagnosticsData.m in Sources */,
-				176B79C5A31B153FF3A4F9A352AB511E /* FirebaseCore-dummy.m in Sources */,
-				20200F69376A4F5F3386FE54FE59981E /* FIRErrors.m in Sources */,
-				008002B25F0D710359ADB0C08A334A18 /* FIRHeartbeatInfo.m in Sources */,
-				9408D969BC396404237E37745DFCD3E5 /* FIRLogger.m in Sources */,
-				B456E026E105D2D5852F52B8CA410B93 /* FIROptions.m in Sources */,
-				157A2B351086764FFD54E97345BD365A /* FIRVersion.m in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		8716DD37801753F317D0EB9CDD236476 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				5CFC8A5B24D8CD47ECEA3B285A8AC115 /* FIRCoreDiagnostics.m in Sources */,
-				E3C6D1B6BBDD0166C8F655ED945C880C /* firebasecore.nanopb.c in Sources */,
-				A970A589B1BDCD6E26AF291394CA3E31 /* FirebaseCoreDiagnostics-dummy.m in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		8A081F2D7C3CAF7EE9E1C54276FFA425 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				5A2D74B12012630A42D1F5CA8F266256 /* GoogleUtilities-dummy.m in Sources */,
-				DE93F4E12CDA7FC6357259A718B1C5A4 /* GULAppEnvironmentUtil.m in Sources */,
-				BFDC80CCBDA9AEDCCBD11601E5970505 /* GULHeartbeatDateStorage.m in Sources */,
-				A89682156BD2FAEFC4ED75AC7E658794 /* GULKeychainStorage.m in Sources */,
-				3609887638799B8EB91F6878BFC6B2AE /* GULKeychainUtils.m in Sources */,
-				AFEE9EE6550E8A52A7E0B41ECE994382 /* GULLogger.m in Sources */,
-				AFA7F572F0E36F26B233C861C89DECAB /* GULSecureCoding.m in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		8F82E161C16BB4526E938FBAB9CCF63A /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				523E397640772F00E129DD7B4E8918AD /* arena.cc in Sources */,
-				4BE8B05147FE479302EC65DDEC54BE5D /* block.cc in Sources */,
-				D068F02A0E7724FE1BB37E66983C3E90 /* block_builder.cc in Sources */,
-				5338A1C7B78187BA6DF4AADDDE1FB981 /* bloom.cc in Sources */,
-				76E1D620DF668560C0A508B931C892EC /* builder.cc in Sources */,
-				032EDAAF8A82DD3C3052D4AC1FF89F4F /* c.cc in Sources */,
-				48A23BA03EC46B17EB084D5A92FB3FFC /* cache.cc in Sources */,
-				F5B003C652AC2DE5B5FAF1CD8026F51F /* coding.cc in Sources */,
-				791FCE68614E82B3AFCFEE1FCF5299FC /* comparator.cc in Sources */,
-				3AE38AF6BD283284EA42129711536CD5 /* crc32c.cc in Sources */,
-				D1F20049C9573F35B5B8925149A6D382 /* db_impl.cc in Sources */,
-				19C8A556EB39CA08B9EBCBFA9A862B01 /* db_iter.cc in Sources */,
-				4354AFBA3C791268B39195AC0B0D94D2 /* dbformat.cc in Sources */,
-				075DFD222C5E387A9669D58843D4DD45 /* dumpfile.cc in Sources */,
-				4EF04BFB62E95B08C56E236F9C55E823 /* env.cc in Sources */,
-				CBA82B32238E09AEFD8939EAEA855646 /* env_posix.cc in Sources */,
-				811E1C387E694AB74A8DCA4E1DFAD2E4 /* filename.cc in Sources */,
-				ED1750A66B141E046BD9686F5840A055 /* filter_block.cc in Sources */,
-				A9D7DC9B772159819C6F4D31259CD6A4 /* filter_policy.cc in Sources */,
-				91E2E976670D660A9D998B7953EF5A50 /* format.cc in Sources */,
-				A5465698DF7B22C392B7D31DE534DEC5 /* hash.cc in Sources */,
-				89E0E29686637417A7ECCF7B84A4AF19 /* histogram.cc in Sources */,
-				DE955B63B64F324BD5B137F172790A3F /* iterator.cc in Sources */,
-				4B5F583964C44A1604D92DD71FB7EAAE /* leveldb-library-dummy.m in Sources */,
-				11D1D0D58F6BDEB12789B7A1CE45DE29 /* log_reader.cc in Sources */,
-				54C6A866FF0CAC9E419AEDD9B99923BB /* log_writer.cc in Sources */,
-				F68771A6212458CF307A3A236AA3CC2E /* logging.cc in Sources */,
-				89C8D847271BDB015EE2F37C5EA5D8BC /* memtable.cc in Sources */,
-				756A2EE872A8DDCA0E52D315A589AB4C /* merger.cc in Sources */,
-				2B8ED470C6276CFE176CAEE26C780E27 /* options.cc in Sources */,
-				ED55C0E5FE9C2F5E7782F82C6671DA37 /* repair.cc in Sources */,
-				5794EA2905855CDAE67515C65C7E5CE6 /* status.cc in Sources */,
-				E6715A42C554FAEF8EB27F36E877CA20 /* table.cc in Sources */,
-				090678D7034ECF4A517F028B5AC595E2 /* table_builder.cc in Sources */,
-				8DEB564DAACF581047405823582A7235 /* table_cache.cc in Sources */,
-				A183BD1108871F9318965F176B82698F /* testharness.cc in Sources */,
-				C8FC39092B2B902E7104CE205085EFDC /* two_level_iterator.cc in Sources */,
-				53EC757569AC06A3E0A0270942925E7C /* version_edit.cc in Sources */,
-				4C1A7F465A551AB24272477D3398AFAF /* version_set.cc in Sources */,
-				213AE7061F97042A1277F1B4C4F13AFE /* write_batch.cc in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		ADBEF7104660ED701544401F0AEFCA4F /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				ED781FD0390EF8635A826B3B14C440CC /* GDTCORAssert.m in Sources */,
-				DFAD176ADA312BEA0529E7B838FDBCFB /* GDTCORClock.m in Sources */,
-				6884F18249527354885EA942C51A3350 /* GDTCORConsoleLogger.m in Sources */,
-				A7F784E4E56862F8FE6FF4F9027969BF /* GDTCORDataFuture.m in Sources */,
-				71FA45ADE713CFA936FE6975075FC7F1 /* GDTCOREvent.m in Sources */,
-				35113767172F29D52B69763FC8288A9F /* GDTCORFlatFileStorage.m in Sources */,
-				245737FEABCF3FAD360B55F2DAD9337E /* GDTCORLifecycle.m in Sources */,
-				F2334D62F8ADA1D46807BB5F10F7F71C /* GDTCORPlatform.m in Sources */,
-				68693C071B9836EC770A8CF091F4BC6A /* GDTCORReachability.m in Sources */,
-				EE2CFDF3946068BE4CA5824235CC15B6 /* GDTCORRegistrar.m in Sources */,
-				8DD28787BCC2A2B7B311929312A962E2 /* GDTCORTransformer.m in Sources */,
-				8FBC6101EE07730E9730A300A356F0E6 /* GDTCORTransport.m in Sources */,
-				A47E0D6D145338CB1E31C34A05FC4D22 /* GDTCORUploadCoordinator.m in Sources */,
-				CEE535DF3E8CA25232B7387253975836 /* GDTCORUploadPackage.m in Sources */,
-				DC00B8BAC2B87B7A3367D24EA0DB1B6C /* GoogleDataTransport-dummy.m in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		D29FFB04B766D1D421440604C5623964 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				EC4C01441144260658084EF24BB4FE3D /* nanopb-dummy.m in Sources */,
-				796A48ABBD99A855EF892338989223B6 /* pb_common.c in Sources */,
-				A5CFAA6948B4DBD6A65CA62F8C86DD05 /* pb_decode.c in Sources */,
-				7AF1E3D44D555CF1560B25ABBB18DAD5 /* pb_encode.c in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		DC748FCA9230EDCDDFCFB391312AF625 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				A04610B5385CA6177BC5656B0250303A /* FBLPromise+All.m in Sources */,
-				99F16CB0C7366E30E911E0CE59932E2E /* FBLPromise+Always.m in Sources */,
-				6258B140C90F66751CD6E1A18689EED3 /* FBLPromise+Any.m in Sources */,
-				399D01EF9153FCFCB1B0B04EDBE568DE /* FBLPromise+Async.m in Sources */,
-				1DBA3AEF493427D6625C09548CD0BA84 /* FBLPromise+Await.m in Sources */,
-				A0E974D12B01BDCBABDA5E13FAB7F60A /* FBLPromise+Catch.m in Sources */,
-				2B9F0CD1745FD1F0EDC3E1B3AC4195C9 /* FBLPromise+Delay.m in Sources */,
-				A5828FCD71C9F92CEB40745B44E56D50 /* FBLPromise+Do.m in Sources */,
-				2A6B53071B8F2316ACF6F7959F410736 /* FBLPromise+Race.m in Sources */,
-				8308039D5AC50C9185DBE60C069B6ECA /* FBLPromise+Recover.m in Sources */,
-				2E34AE998F7E523869224DC2B93E7B79 /* FBLPromise+Reduce.m in Sources */,
-				851B8F4CD6FF25BA0510DF4B6A4F9FA5 /* FBLPromise+Retry.m in Sources */,
-				6E58371477A4FE48963F06710FD6ACAC /* FBLPromise+Testing.m in Sources */,
-				884CCF71D150619CD60C43D938699F8F /* FBLPromise+Then.m in Sources */,
-				88C001E6B3B75F369C266C2C116A7DBE /* FBLPromise+Timeout.m in Sources */,
-				D94829308831E45ECE321B5BA370D635 /* FBLPromise+Validate.m in Sources */,
-				9EC1EC9364B5CDFB31A12E9D5764FC6D /* FBLPromise+Wrap.m in Sources */,
-				DFDC2EED29D814BDB23DD0A4F7CEAE91 /* FBLPromise.m in Sources */,
-				A140D4912634751D944F96961A729678 /* FBLPromiseError.m in Sources */,
-				ED565D95563F4B8C38042F390537F8BD /* PromisesObjC-dummy.m in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXSourcesBuildPhase section */
-
-/* Begin PBXTargetDependency section */
-		00FFA57F9CC490792E3DCAE3019E4960 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = FirebaseCoreDiagnosticsInterop;
-			target = 5EB4B0B6DA6D5C0C3365733BEAA1C485 /* FirebaseCoreDiagnosticsInterop */;
-			targetProxy = 52EF848D791FD6DDA402C00E55148A89 /* PBXContainerItemProxy */;
-		};
-		05C75EA42F5967E620D78FEFEC522BA1 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = Firebase;
-			target = 072CEA044D2EF26F03496D5996BBF59F /* Firebase */;
-			targetProxy = FE00ED7FF4D83C4A11CDB1C602DD4DB9 /* PBXContainerItemProxy */;
-		};
-		08AF07E3A18727585148418198202BC4 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = GoogleDataTransportCCTSupport;
-			target = F4F25FCAC51B51FD5F986EB939BF1F87 /* GoogleDataTransportCCTSupport */;
-			targetProxy = ADA3739072A1821D42EB71A7617E24FD /* PBXContainerItemProxy */;
-		};
-		1A76BA8905879F4B6A03DF488E3F6DBC /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = FirebaseCore;
-			target = 4402AFF83DBDC4DD07E198685FDC2DF2 /* FirebaseCore */;
-			targetProxy = 57A4993B3210E1A73A547FE58FDFC4CA /* PBXContainerItemProxy */;
-		};
-		1C5D35E2072BC65722A5FBF9DFED4330 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = FirebaseAuthInterop;
-			target = 8EC0F2618965C875A96BFDBEE5D9734C /* FirebaseAuthInterop */;
-			targetProxy = 47EA61FDD7BE25B0A48F212E5DE80D99 /* PBXContainerItemProxy */;
-		};
-		2265E310D5A7434D379EBC42CF13AC11 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = PromisesObjC;
-			target = 2BBF7206D7FAC92C82A042A99C4A98F8 /* PromisesObjC */;
-			targetProxy = 59C4EFE1F72233CA5B8C02CAC2E6BEA5 /* PBXContainerItemProxy */;
-		};
-		26FC2161961F82AD944794A5997EB784 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = FirebaseCoreDiagnostics;
-			target = 620E05868772C10B4920DC7E324F2C87 /* FirebaseCoreDiagnostics */;
-			targetProxy = 7F91E721DFEDFBB5E30593902EB52CE4 /* PBXContainerItemProxy */;
-		};
-		29226BC32636F37D85BDAD06C455F391 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = "leveldb-library";
-			target = 9307B7A119490930CF70393AB529AAC1 /* leveldb-library */;
-			targetProxy = C61D3141DC2127BA7701380C913ECBAC /* PBXContainerItemProxy */;
-		};
-		3691D6761F1E170863ABF8C504320FB5 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = FirebaseCoreDiagnosticsInterop;
-			target = 5EB4B0B6DA6D5C0C3365733BEAA1C485 /* FirebaseCoreDiagnosticsInterop */;
-			targetProxy = 16E1CC5892022AC6D93441FE0947BE52 /* PBXContainerItemProxy */;
-		};
-		3EFC9F7575385B0BF97D99224E8F70F4 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = FirebaseCore;
-			target = 4402AFF83DBDC4DD07E198685FDC2DF2 /* FirebaseCore */;
-			targetProxy = FD085A011A569371BA35C6F802B3758F /* PBXContainerItemProxy */;
-		};
-		43DE77A89C899E34324DCEF88910219F /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = GoogleDataTransportCCTSupport;
-			target = F4F25FCAC51B51FD5F986EB939BF1F87 /* GoogleDataTransportCCTSupport */;
-			targetProxy = 3526AE8FAA4DD630EC08B2BF0649B0D3 /* PBXContainerItemProxy */;
-		};
-		46AEFC4310A18B1B432B0E21430D3CEB /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = GoogleUtilities;
-			target = 8D7F5D5DD528D21A72DC87ADA5B12E2D /* GoogleUtilities */;
-			targetProxy = 7C4ADE3DDF4CD2F8B1EB81B93C8ABE5F /* PBXContainerItemProxy */;
-		};
-		47BEAA6CB899E33E648464BE3CCF8998 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = GoogleDataTransport;
-			target = 5C0371EE948D0357B8EE0E34ABB44BF0 /* GoogleDataTransport */;
-			targetProxy = 3D48395263091A504DA16225B783026E /* PBXContainerItemProxy */;
-		};
-		5E85804415BEC75E80DCD84AC2B3734A /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = GoogleDataTransport;
-			target = 5C0371EE948D0357B8EE0E34ABB44BF0 /* GoogleDataTransport */;
-			targetProxy = A95D6AA02759E76DD3232368EC9FA7F1 /* PBXContainerItemProxy */;
-		};
-		6E838F720E0A45A23453941FB7FAFCE6 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = nanopb;
-			target = D2B5E7DCCBBFB32341D857D01211A1A3 /* nanopb */;
-			targetProxy = EE2C7655BA40D7BB4854DF3E8E05AB46 /* PBXContainerItemProxy */;
-		};
-		7EC7F475FF034F08AA6359041957F5E1 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = "leveldb-library";
-			target = 9307B7A119490930CF70393AB529AAC1 /* leveldb-library */;
-			targetProxy = B60388A49AD55B2CAE0D5EE55C2F0BAA /* PBXContainerItemProxy */;
-		};
-		80F51486E503FFA572D586D4646EBD73 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = FirebaseDatabase;
-			target = 736AF68F6527ACF6B4A4C54728824A1C /* FirebaseDatabase */;
-			targetProxy = 17A83CD745ED9427888166B74CCA8AA6 /* PBXContainerItemProxy */;
-		};
-		844BAF623E2BCE1EABF79500E460BDD5 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = nanopb;
-			target = D2B5E7DCCBBFB32341D857D01211A1A3 /* nanopb */;
-			targetProxy = B85683E36FDD2784B99A2DC92732182A /* PBXContainerItemProxy */;
-		};
-		A3C98ED32CF1CD1DC5D0821BD0DC0ABD /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = FirebaseAuthInterop;
-			target = 8EC0F2618965C875A96BFDBEE5D9734C /* FirebaseAuthInterop */;
-			targetProxy = 8942FC65F5D10C793A3EF698556652F5 /* PBXContainerItemProxy */;
-		};
-		B99B55B0C1626310699BE909D29A1772 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = FirebaseCoreDiagnosticsInterop;
-			target = 5EB4B0B6DA6D5C0C3365733BEAA1C485 /* FirebaseCoreDiagnosticsInterop */;
-			targetProxy = 3D7F773867E49CB7532EFACCAC2F1714 /* PBXContainerItemProxy */;
-		};
-		BE485465786C25F3EB4BD1736B954C7C /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = FirebaseDatabase;
-			target = 736AF68F6527ACF6B4A4C54728824A1C /* FirebaseDatabase */;
-			targetProxy = 0C3750C14BFEE6DCB91698B371188BD1 /* PBXContainerItemProxy */;
-		};
-		C1955461A167D0D64799DE8DEDE093E7 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = FirebaseCoreDiagnostics;
-			target = 620E05868772C10B4920DC7E324F2C87 /* FirebaseCoreDiagnostics */;
-			targetProxy = 53B79F606CFFAA47F665B32E8F9C490A /* PBXContainerItemProxy */;
-		};
-		C614A6DBEA2266B48117FD3CC0CA82A6 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = PromisesObjC;
-			target = 2BBF7206D7FAC92C82A042A99C4A98F8 /* PromisesObjC */;
-			targetProxy = 7B60E879A1FD2B8A4E3F3B9B1CFC00B9 /* PBXContainerItemProxy */;
-		};
-		C6978527C8AABEF32FE49D2C989DA8DC /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = GoogleUtilities;
-			target = 8D7F5D5DD528D21A72DC87ADA5B12E2D /* GoogleUtilities */;
-			targetProxy = B085E5DE0E10CF6717C5962F9C615468 /* PBXContainerItemProxy */;
-		};
-		C8A870403BB3782CD599915F0F1B4DDA /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = nanopb;
-			target = D2B5E7DCCBBFB32341D857D01211A1A3 /* nanopb */;
-			targetProxy = 783C76F76F51EC5DD0E2D622915C4850 /* PBXContainerItemProxy */;
-		};
-		DBF84127F945C1C7D81DD8293C0605A2 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = GoogleUtilities;
-			target = 8D7F5D5DD528D21A72DC87ADA5B12E2D /* GoogleUtilities */;
-			targetProxy = B8337BC1105FE08969FAB5579066DFEC /* PBXContainerItemProxy */;
-		};
-		EE98EBE58BEA57ED772859CD1D7DB074 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = FirebaseCore;
-			target = 4402AFF83DBDC4DD07E198685FDC2DF2 /* FirebaseCore */;
-			targetProxy = 453F6F4B3941F2DDC491BA016BEFCC56 /* PBXContainerItemProxy */;
-		};
-/* End PBXTargetDependency section */
-
-/* Begin XCBuildConfiguration section */
-		0A24C2FCB3AAD26B061B41F0D673CD62 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = FE464F7C6ACA43984F0CE6C4734378E8 /* FirebaseCoreDiagnostics.debug.xcconfig */;
-			buildSettings = {
-				CODE_SIGN_IDENTITY = "";
-				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
-				CURRENT_PROJECT_VERSION = 1;
-				DEFINES_MODULE = YES;
-				DYLIB_COMPATIBILITY_VERSION = 1;
-				DYLIB_CURRENT_VERSION = 1;
-				DYLIB_INSTALL_NAME_BASE = "@rpath";
-				INFOPLIST_FILE = "Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-Info.plist";
-				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
-				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
-				LD_RUNPATH_SEARCH_PATHS = (
-					"$(inherited)",
-					"@executable_path/Frameworks",
-					"@loader_path/Frameworks",
-				);
-				MACH_O_TYPE = staticlib;
-				MODULEMAP_FILE = "Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.modulemap";
-				PRODUCT_MODULE_NAME = FirebaseCoreDiagnostics;
-				PRODUCT_NAME = FirebaseCoreDiagnostics;
-				SDKROOT = iphoneos;
-				SKIP_INSTALL = YES;
-				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
-				SWIFT_VERSION = 5.0;
-				TARGETED_DEVICE_FAMILY = "1,2";
-				VERSIONING_SYSTEM = "apple-generic";
-				VERSION_INFO_PREFIX = "";
-			};
-			name = Debug;
-		};
-		0A9C7033C43DA970703B1FC01A507D0B /* Release */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 4517272EC7E584B42E4C304B2779D6B2 /* PromisesObjC.release.xcconfig */;
-			buildSettings = {
-				CODE_SIGN_IDENTITY = "";
-				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
-				CURRENT_PROJECT_VERSION = 1;
-				DEFINES_MODULE = YES;
-				DYLIB_COMPATIBILITY_VERSION = 1;
-				DYLIB_CURRENT_VERSION = 1;
-				DYLIB_INSTALL_NAME_BASE = "@rpath";
-				INFOPLIST_FILE = "Target Support Files/PromisesObjC/PromisesObjC-Info.plist";
-				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
-				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
-				LD_RUNPATH_SEARCH_PATHS = (
-					"$(inherited)",
-					"@executable_path/Frameworks",
-					"@loader_path/Frameworks",
-				);
-				MODULEMAP_FILE = "Target Support Files/PromisesObjC/PromisesObjC.modulemap";
-				PRODUCT_MODULE_NAME = FBLPromises;
-				PRODUCT_NAME = FBLPromises;
-				SDKROOT = iphoneos;
-				SKIP_INSTALL = YES;
-				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
-				SWIFT_VERSION = 5.0;
-				TARGETED_DEVICE_FAMILY = "1,2";
-				VALIDATE_PRODUCT = YES;
-				VERSIONING_SYSTEM = "apple-generic";
-				VERSION_INFO_PREFIX = "";
-			};
-			name = Release;
-		};
-		0C540FBA9F8BDF37E2401F1205D14CD8 /* Release */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 25F19CE11FB446E8B2C37D3F9C3B1BFC /* GoogleDataTransportCCTSupport.release.xcconfig */;
-			buildSettings = {
-				CODE_SIGN_IDENTITY = "";
-				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
-				CURRENT_PROJECT_VERSION = 1;
-				DEFINES_MODULE = YES;
-				DYLIB_COMPATIBILITY_VERSION = 1;
-				DYLIB_CURRENT_VERSION = 1;
-				DYLIB_INSTALL_NAME_BASE = "@rpath";
-				INFOPLIST_FILE = "Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-Info.plist";
-				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
-				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
-				LD_RUNPATH_SEARCH_PATHS = (
-					"$(inherited)",
-					"@executable_path/Frameworks",
-					"@loader_path/Frameworks",
-				);
-				MACH_O_TYPE = staticlib;
-				MODULEMAP_FILE = "Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.modulemap";
-				PRODUCT_MODULE_NAME = GoogleDataTransportCCTSupport;
-				PRODUCT_NAME = GoogleDataTransportCCTSupport;
-				SDKROOT = iphoneos;
-				SKIP_INSTALL = YES;
-				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
-				SWIFT_VERSION = 5.0;
-				TARGETED_DEVICE_FAMILY = "1,2";
-				VALIDATE_PRODUCT = YES;
-				VERSIONING_SYSTEM = "apple-generic";
-				VERSION_INFO_PREFIX = "";
-			};
-			name = Release;
-		};
-		173B32C16786AE9BD070158EA982FC86 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 9BC93D2F01BC90BCC406F2269AFF64B1 /* FirebaseCoreDiagnosticsInterop.debug.xcconfig */;
-			buildSettings = {
-				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
-				CODE_SIGN_IDENTITY = "iPhone Developer";
-				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
-				LD_RUNPATH_SEARCH_PATHS = (
-					"$(inherited)",
-					"@executable_path/Frameworks",
-				);
-				SDKROOT = iphoneos;
-				TARGETED_DEVICE_FAMILY = "1,2";
-			};
-			name = Debug;
-		};
-		2256B83A484BC38D7B557EC97440626F /* Debug */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 6D9B952974F6B3F89F6399C831D99CC2 /* FirebaseDatabase.debug.xcconfig */;
-			buildSettings = {
-				CODE_SIGN_IDENTITY = "";
-				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
-				CURRENT_PROJECT_VERSION = 1;
-				DEFINES_MODULE = YES;
-				DYLIB_COMPATIBILITY_VERSION = 1;
-				DYLIB_CURRENT_VERSION = 1;
-				DYLIB_INSTALL_NAME_BASE = "@rpath";
-				INFOPLIST_FILE = "Target Support Files/FirebaseDatabase/FirebaseDatabase-Info.plist";
-				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
-				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
-				LD_RUNPATH_SEARCH_PATHS = (
-					"$(inherited)",
-					"@executable_path/Frameworks",
-					"@loader_path/Frameworks",
-				);
-				MACH_O_TYPE = staticlib;
-				MODULEMAP_FILE = "Target Support Files/FirebaseDatabase/FirebaseDatabase.modulemap";
-				PRODUCT_MODULE_NAME = FirebaseDatabase;
-				PRODUCT_NAME = FirebaseDatabase;
-				SDKROOT = iphoneos;
-				SKIP_INSTALL = YES;
-				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
-				SWIFT_VERSION = 5.0;
-				TARGETED_DEVICE_FAMILY = "1,2";
-				VERSIONING_SYSTEM = "apple-generic";
-				VERSION_INFO_PREFIX = "";
-			};
-			name = Debug;
-		};
-		240C0E7E4C762BDC73CACA89D31FCD57 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 9D85A9AAC775F25C1D9D72DCD09CE492 /* GoogleDataTransport.debug.xcconfig */;
-			buildSettings = {
-				CODE_SIGN_IDENTITY = "";
-				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
-				CURRENT_PROJECT_VERSION = 1;
-				DEFINES_MODULE = YES;
-				DYLIB_COMPATIBILITY_VERSION = 1;
-				DYLIB_CURRENT_VERSION = 1;
-				DYLIB_INSTALL_NAME_BASE = "@rpath";
-				INFOPLIST_FILE = "Target Support Files/GoogleDataTransport/GoogleDataTransport-Info.plist";
-				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
-				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
-				LD_RUNPATH_SEARCH_PATHS = (
-					"$(inherited)",
-					"@executable_path/Frameworks",
-					"@loader_path/Frameworks",
-				);
-				MACH_O_TYPE = staticlib;
-				MODULEMAP_FILE = "Target Support Files/GoogleDataTransport/GoogleDataTransport.modulemap";
-				PRODUCT_MODULE_NAME = GoogleDataTransport;
-				PRODUCT_NAME = GoogleDataTransport;
-				SDKROOT = iphoneos;
-				SKIP_INSTALL = YES;
-				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
-				SWIFT_VERSION = 5.0;
-				TARGETED_DEVICE_FAMILY = "1,2";
-				VERSIONING_SYSTEM = "apple-generic";
-				VERSION_INFO_PREFIX = "";
-			};
-			name = Debug;
-		};
-		37E7FAA0F336A6E916D18548A9C73E55 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 5F3DC736CC472D8C083FEE2D95582EF6 /* FirebaseCore.debug.xcconfig */;
-			buildSettings = {
-				CODE_SIGN_IDENTITY = "";
-				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
-				CURRENT_PROJECT_VERSION = 1;
-				DEFINES_MODULE = YES;
-				DYLIB_COMPATIBILITY_VERSION = 1;
-				DYLIB_CURRENT_VERSION = 1;
-				DYLIB_INSTALL_NAME_BASE = "@rpath";
-				INFOPLIST_FILE = "Target Support Files/FirebaseCore/FirebaseCore-Info.plist";
-				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
-				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
-				LD_RUNPATH_SEARCH_PATHS = (
-					"$(inherited)",
-					"@executable_path/Frameworks",
-					"@loader_path/Frameworks",
-				);
-				MACH_O_TYPE = staticlib;
-				MODULEMAP_FILE = "Target Support Files/FirebaseCore/FirebaseCore.modulemap";
-				PRODUCT_MODULE_NAME = FirebaseCore;
-				PRODUCT_NAME = FirebaseCore;
-				SDKROOT = iphoneos;
-				SKIP_INSTALL = YES;
-				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
-				SWIFT_VERSION = 5.0;
-				TARGETED_DEVICE_FAMILY = "1,2";
-				VERSIONING_SYSTEM = "apple-generic";
-				VERSION_INFO_PREFIX = "";
-			};
-			name = Debug;
-		};
-		473A0FE29D262CD7CB00C97691DEE08F /* Release */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 24C765C6EE99FAF5BDC49CFE9E15D8A5 /* Firebase.release.xcconfig */;
-			buildSettings = {
-				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
-				CODE_SIGN_IDENTITY = "iPhone Developer";
-				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
-				LD_RUNPATH_SEARCH_PATHS = (
-					"$(inherited)",
-					"@executable_path/Frameworks",
-				);
-				SDKROOT = iphoneos;
-				TARGETED_DEVICE_FAMILY = "1,2";
-				VALIDATE_PRODUCT = YES;
-			};
-			name = Release;
-		};
-		47C91D6762B8F154BD281AB745C8CE65 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 3E54B1318AB1AA3CC7468878C8B0C39E /* GoogleDataTransportCCTSupport.debug.xcconfig */;
-			buildSettings = {
-				CODE_SIGN_IDENTITY = "";
-				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
-				CURRENT_PROJECT_VERSION = 1;
-				DEFINES_MODULE = YES;
-				DYLIB_COMPATIBILITY_VERSION = 1;
-				DYLIB_CURRENT_VERSION = 1;
-				DYLIB_INSTALL_NAME_BASE = "@rpath";
-				INFOPLIST_FILE = "Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-Info.plist";
-				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
-				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
-				LD_RUNPATH_SEARCH_PATHS = (
-					"$(inherited)",
-					"@executable_path/Frameworks",
-					"@loader_path/Frameworks",
-				);
-				MACH_O_TYPE = staticlib;
-				MODULEMAP_FILE = "Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.modulemap";
-				PRODUCT_MODULE_NAME = GoogleDataTransportCCTSupport;
-				PRODUCT_NAME = GoogleDataTransportCCTSupport;
-				SDKROOT = iphoneos;
-				SKIP_INSTALL = YES;
-				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
-				SWIFT_VERSION = 5.0;
-				TARGETED_DEVICE_FAMILY = "1,2";
-				VERSIONING_SYSTEM = "apple-generic";
-				VERSION_INFO_PREFIX = "";
-			};
-			name = Debug;
-		};
-		4F2A98C4DF268BF6C25EB20564DBBD22 /* Release */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = D2C19F3B7A322A65FA2CC3F20A6DF678 /* leveldb-library.release.xcconfig */;
-			buildSettings = {
-				CODE_SIGN_IDENTITY = "";
-				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
-				CURRENT_PROJECT_VERSION = 1;
-				DEFINES_MODULE = YES;
-				DYLIB_COMPATIBILITY_VERSION = 1;
-				DYLIB_CURRENT_VERSION = 1;
-				DYLIB_INSTALL_NAME_BASE = "@rpath";
-				GCC_PREFIX_HEADER = "Target Support Files/leveldb-library/leveldb-library-prefix.pch";
-				INFOPLIST_FILE = "Target Support Files/leveldb-library/leveldb-library-Info.plist";
-				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
-				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
-				LD_RUNPATH_SEARCH_PATHS = (
-					"$(inherited)",
-					"@executable_path/Frameworks",
-					"@loader_path/Frameworks",
-				);
-				MODULEMAP_FILE = "Target Support Files/leveldb-library/leveldb-library.modulemap";
-				PRODUCT_MODULE_NAME = leveldb;
-				PRODUCT_NAME = leveldb;
-				SDKROOT = iphoneos;
-				SKIP_INSTALL = YES;
-				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
-				SWIFT_VERSION = 5.0;
-				TARGETED_DEVICE_FAMILY = "1,2";
-				VALIDATE_PRODUCT = YES;
-				VERSIONING_SYSTEM = "apple-generic";
-				VERSION_INFO_PREFIX = "";
-			};
-			name = Release;
-		};
-		5020C73200112D262BB51202AD477229 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 5CE08AC03F18A07FFDE865B02C63441E /* nanopb.debug.xcconfig */;
-			buildSettings = {
-				CODE_SIGN_IDENTITY = "";
-				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
-				CURRENT_PROJECT_VERSION = 1;
-				DEFINES_MODULE = YES;
-				DYLIB_COMPATIBILITY_VERSION = 1;
-				DYLIB_CURRENT_VERSION = 1;
-				DYLIB_INSTALL_NAME_BASE = "@rpath";
-				GCC_PREFIX_HEADER = "Target Support Files/nanopb/nanopb-prefix.pch";
-				INFOPLIST_FILE = "Target Support Files/nanopb/nanopb-Info.plist";
-				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
-				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
-				LD_RUNPATH_SEARCH_PATHS = (
-					"$(inherited)",
-					"@executable_path/Frameworks",
-					"@loader_path/Frameworks",
-				);
-				MODULEMAP_FILE = "Target Support Files/nanopb/nanopb.modulemap";
-				PRODUCT_MODULE_NAME = nanopb;
-				PRODUCT_NAME = nanopb;
-				SDKROOT = iphoneos;
-				SKIP_INSTALL = YES;
-				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
-				SWIFT_VERSION = 5.0;
-				TARGETED_DEVICE_FAMILY = "1,2";
-				VERSIONING_SYSTEM = "apple-generic";
-				VERSION_INFO_PREFIX = "";
-			};
-			name = Debug;
-		};
-		5790832C657231A09F1765DF32DA3791 /* Release */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = A0D2B9693657353DC78B1C8AA8E503F4 /* FirebaseCoreDiagnosticsInterop.release.xcconfig */;
-			buildSettings = {
-				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
-				CODE_SIGN_IDENTITY = "iPhone Developer";
-				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
-				LD_RUNPATH_SEARCH_PATHS = (
-					"$(inherited)",
-					"@executable_path/Frameworks",
-				);
-				SDKROOT = iphoneos;
-				TARGETED_DEVICE_FAMILY = "1,2";
-				VALIDATE_PRODUCT = YES;
-			};
-			name = Release;
-		};
-		57FD510461D6BCD2E0F1115C16736F74 /* Release */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 59CB9FB4C1679210BE96723BFE245F15 /* FirebaseCoreDiagnostics.release.xcconfig */;
-			buildSettings = {
-				CODE_SIGN_IDENTITY = "";
-				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
-				CURRENT_PROJECT_VERSION = 1;
-				DEFINES_MODULE = YES;
-				DYLIB_COMPATIBILITY_VERSION = 1;
-				DYLIB_CURRENT_VERSION = 1;
-				DYLIB_INSTALL_NAME_BASE = "@rpath";
-				INFOPLIST_FILE = "Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-Info.plist";
-				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
-				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
-				LD_RUNPATH_SEARCH_PATHS = (
-					"$(inherited)",
-					"@executable_path/Frameworks",
-					"@loader_path/Frameworks",
-				);
-				MACH_O_TYPE = staticlib;
-				MODULEMAP_FILE = "Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.modulemap";
-				PRODUCT_MODULE_NAME = FirebaseCoreDiagnostics;
-				PRODUCT_NAME = FirebaseCoreDiagnostics;
-				SDKROOT = iphoneos;
-				SKIP_INSTALL = YES;
-				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
-				SWIFT_VERSION = 5.0;
-				TARGETED_DEVICE_FAMILY = "1,2";
-				VALIDATE_PRODUCT = YES;
-				VERSIONING_SYSTEM = "apple-generic";
-				VERSION_INFO_PREFIX = "";
-			};
-			name = Release;
-		};
-		63672522E1EF37970DCF7EC011233B79 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = C26746AB2A5D53AF8402A1B015403633 /* GoogleUtilities.debug.xcconfig */;
-			buildSettings = {
-				CODE_SIGN_IDENTITY = "";
-				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
-				CURRENT_PROJECT_VERSION = 1;
-				DEFINES_MODULE = YES;
-				DYLIB_COMPATIBILITY_VERSION = 1;
-				DYLIB_CURRENT_VERSION = 1;
-				DYLIB_INSTALL_NAME_BASE = "@rpath";
-				GCC_PREFIX_HEADER = "Target Support Files/GoogleUtilities/GoogleUtilities-prefix.pch";
-				INFOPLIST_FILE = "Target Support Files/GoogleUtilities/GoogleUtilities-Info.plist";
-				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
-				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
-				LD_RUNPATH_SEARCH_PATHS = (
-					"$(inherited)",
-					"@executable_path/Frameworks",
-					"@loader_path/Frameworks",
-				);
-				MODULEMAP_FILE = "Target Support Files/GoogleUtilities/GoogleUtilities.modulemap";
-				PRODUCT_MODULE_NAME = GoogleUtilities;
-				PRODUCT_NAME = GoogleUtilities;
-				SDKROOT = iphoneos;
-				SKIP_INSTALL = YES;
-				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
-				SWIFT_VERSION = 5.0;
-				TARGETED_DEVICE_FAMILY = "1,2";
-				VERSIONING_SYSTEM = "apple-generic";
-				VERSION_INFO_PREFIX = "";
-			};
-			name = Debug;
-		};
-		649956FE5C838C56A4467F90609FE369 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 33ECE23F2ECD946250E06C49AD38D464 /* PromisesObjC.debug.xcconfig */;
-			buildSettings = {
-				CODE_SIGN_IDENTITY = "";
-				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
-				CURRENT_PROJECT_VERSION = 1;
-				DEFINES_MODULE = YES;
-				DYLIB_COMPATIBILITY_VERSION = 1;
-				DYLIB_CURRENT_VERSION = 1;
-				DYLIB_INSTALL_NAME_BASE = "@rpath";
-				INFOPLIST_FILE = "Target Support Files/PromisesObjC/PromisesObjC-Info.plist";
-				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
-				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
-				LD_RUNPATH_SEARCH_PATHS = (
-					"$(inherited)",
-					"@executable_path/Frameworks",
-					"@loader_path/Frameworks",
-				);
-				MODULEMAP_FILE = "Target Support Files/PromisesObjC/PromisesObjC.modulemap";
-				PRODUCT_MODULE_NAME = FBLPromises;
-				PRODUCT_NAME = FBLPromises;
-				SDKROOT = iphoneos;
-				SKIP_INSTALL = YES;
-				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
-				SWIFT_VERSION = 5.0;
-				TARGETED_DEVICE_FAMILY = "1,2";
-				VERSIONING_SYSTEM = "apple-generic";
-				VERSION_INFO_PREFIX = "";
-			};
-			name = Debug;
-		};
-		6C61D818ACD3C2C116FED6A9C67E91B4 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				CLANG_ANALYZER_NONNULL = YES;
-				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
-				CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
-				CLANG_CXX_LIBRARY = "libc++";
-				CLANG_ENABLE_MODULES = YES;
-				CLANG_ENABLE_OBJC_ARC = YES;
-				CLANG_ENABLE_OBJC_WEAK = YES;
-				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
-				CLANG_WARN_BOOL_CONVERSION = YES;
-				CLANG_WARN_COMMA = YES;
-				CLANG_WARN_CONSTANT_CONVERSION = YES;
-				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
-				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
-				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
-				CLANG_WARN_EMPTY_BODY = YES;
-				CLANG_WARN_ENUM_CONVERSION = YES;
-				CLANG_WARN_INFINITE_RECURSION = YES;
-				CLANG_WARN_INT_CONVERSION = YES;
-				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
-				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
-				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
-				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
-				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
-				CLANG_WARN_STRICT_PROTOTYPES = YES;
-				CLANG_WARN_SUSPICIOUS_MOVE = YES;
-				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
-				CLANG_WARN_UNREACHABLE_CODE = YES;
-				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
-				COPY_PHASE_STRIP = NO;
-				DEBUG_INFORMATION_FORMAT = dwarf;
-				ENABLE_STRICT_OBJC_MSGSEND = YES;
-				ENABLE_TESTABILITY = YES;
-				GCC_C_LANGUAGE_STANDARD = gnu11;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_NO_COMMON_BLOCKS = YES;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PREPROCESSOR_DEFINITIONS = (
-					"POD_CONFIGURATION_DEBUG=1",
-					"DEBUG=1",
-					"$(inherited)",
-				);
-				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
-				GCC_WARN_UNDECLARED_SELECTOR = YES;
-				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
-				GCC_WARN_UNUSED_FUNCTION = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				IPHONEOS_DEPLOYMENT_TARGET = 13.4;
-				MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
-				MTL_FAST_MATH = YES;
-				ONLY_ACTIVE_ARCH = YES;
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				STRIP_INSTALLED_PRODUCT = NO;
-				SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
-				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
-				SWIFT_VERSION = 5.0;
-				SYMROOT = "${SRCROOT}/../build";
-			};
-			name = Debug;
-		};
-		7271519415E4CF37A2618B9A4C9DC607 /* Release */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 7E58E1A27F0803C11F2250F1DCEC0741 /* GoogleUtilities.release.xcconfig */;
-			buildSettings = {
-				CODE_SIGN_IDENTITY = "";
-				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
-				CURRENT_PROJECT_VERSION = 1;
-				DEFINES_MODULE = YES;
-				DYLIB_COMPATIBILITY_VERSION = 1;
-				DYLIB_CURRENT_VERSION = 1;
-				DYLIB_INSTALL_NAME_BASE = "@rpath";
-				GCC_PREFIX_HEADER = "Target Support Files/GoogleUtilities/GoogleUtilities-prefix.pch";
-				INFOPLIST_FILE = "Target Support Files/GoogleUtilities/GoogleUtilities-Info.plist";
-				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
-				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
-				LD_RUNPATH_SEARCH_PATHS = (
-					"$(inherited)",
-					"@executable_path/Frameworks",
-					"@loader_path/Frameworks",
-				);
-				MODULEMAP_FILE = "Target Support Files/GoogleUtilities/GoogleUtilities.modulemap";
-				PRODUCT_MODULE_NAME = GoogleUtilities;
-				PRODUCT_NAME = GoogleUtilities;
-				SDKROOT = iphoneos;
-				SKIP_INSTALL = YES;
-				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
-				SWIFT_VERSION = 5.0;
-				TARGETED_DEVICE_FAMILY = "1,2";
-				VALIDATE_PRODUCT = YES;
-				VERSIONING_SYSTEM = "apple-generic";
-				VERSION_INFO_PREFIX = "";
-			};
-			name = Release;
-		};
-		77E6B2764CA69A438683AF3AC3455E7C /* Release */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 41FD95F75B109D21E5C0FF3B47B92CEA /* FirebaseAuthInterop.release.xcconfig */;
-			buildSettings = {
-				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
-				CODE_SIGN_IDENTITY = "iPhone Developer";
-				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
-				LD_RUNPATH_SEARCH_PATHS = (
-					"$(inherited)",
-					"@executable_path/Frameworks",
-				);
-				SDKROOT = iphoneos;
-				TARGETED_DEVICE_FAMILY = "1,2";
-				VALIDATE_PRODUCT = YES;
-			};
-			name = Release;
-		};
-		7DC5F11AFBEAE473E8D3C24A2D11338D /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				CLANG_ANALYZER_NONNULL = YES;
-				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
-				CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
-				CLANG_CXX_LIBRARY = "libc++";
-				CLANG_ENABLE_MODULES = YES;
-				CLANG_ENABLE_OBJC_ARC = YES;
-				CLANG_ENABLE_OBJC_WEAK = YES;
-				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
-				CLANG_WARN_BOOL_CONVERSION = YES;
-				CLANG_WARN_COMMA = YES;
-				CLANG_WARN_CONSTANT_CONVERSION = YES;
-				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
-				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
-				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
-				CLANG_WARN_EMPTY_BODY = YES;
-				CLANG_WARN_ENUM_CONVERSION = YES;
-				CLANG_WARN_INFINITE_RECURSION = YES;
-				CLANG_WARN_INT_CONVERSION = YES;
-				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
-				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
-				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
-				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
-				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
-				CLANG_WARN_STRICT_PROTOTYPES = YES;
-				CLANG_WARN_SUSPICIOUS_MOVE = YES;
-				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
-				CLANG_WARN_UNREACHABLE_CODE = YES;
-				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
-				COPY_PHASE_STRIP = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				ENABLE_NS_ASSERTIONS = NO;
-				ENABLE_STRICT_OBJC_MSGSEND = YES;
-				GCC_C_LANGUAGE_STANDARD = gnu11;
-				GCC_NO_COMMON_BLOCKS = YES;
-				GCC_PREPROCESSOR_DEFINITIONS = (
-					"POD_CONFIGURATION_RELEASE=1",
-					"$(inherited)",
-				);
-				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
-				GCC_WARN_UNDECLARED_SELECTOR = YES;
-				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
-				GCC_WARN_UNUSED_FUNCTION = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				IPHONEOS_DEPLOYMENT_TARGET = 13.4;
-				MTL_ENABLE_DEBUG_INFO = NO;
-				MTL_FAST_MATH = YES;
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				STRIP_INSTALLED_PRODUCT = NO;
-				SWIFT_COMPILATION_MODE = wholemodule;
-				SWIFT_OPTIMIZATION_LEVEL = "-O";
-				SWIFT_VERSION = 5.0;
-				SYMROOT = "${SRCROOT}/../build";
-			};
-			name = Release;
-		};
-		8A11838E987B59E771EC052874D9746D /* Debug */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = D3C76A00399095A4DAA2020273DEE53B /* leveldb-library.debug.xcconfig */;
-			buildSettings = {
-				CODE_SIGN_IDENTITY = "";
-				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
-				CURRENT_PROJECT_VERSION = 1;
-				DEFINES_MODULE = YES;
-				DYLIB_COMPATIBILITY_VERSION = 1;
-				DYLIB_CURRENT_VERSION = 1;
-				DYLIB_INSTALL_NAME_BASE = "@rpath";
-				GCC_PREFIX_HEADER = "Target Support Files/leveldb-library/leveldb-library-prefix.pch";
-				INFOPLIST_FILE = "Target Support Files/leveldb-library/leveldb-library-Info.plist";
-				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
-				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
-				LD_RUNPATH_SEARCH_PATHS = (
-					"$(inherited)",
-					"@executable_path/Frameworks",
-					"@loader_path/Frameworks",
-				);
-				MODULEMAP_FILE = "Target Support Files/leveldb-library/leveldb-library.modulemap";
-				PRODUCT_MODULE_NAME = leveldb;
-				PRODUCT_NAME = leveldb;
-				SDKROOT = iphoneos;
-				SKIP_INSTALL = YES;
-				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
-				SWIFT_VERSION = 5.0;
-				TARGETED_DEVICE_FAMILY = "1,2";
-				VERSIONING_SYSTEM = "apple-generic";
-				VERSION_INFO_PREFIX = "";
-			};
-			name = Debug;
-		};
-		93413C8724F4DCAE7611336765C99E22 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 0D46DA763E703DDDB7846A3B498EA469 /* Pods-openTok.debug.xcconfig */;
-			buildSettings = {
-				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
-				CLANG_ENABLE_OBJC_WEAK = NO;
-				CODE_SIGN_IDENTITY = "";
-				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
-				CURRENT_PROJECT_VERSION = 1;
-				DEFINES_MODULE = YES;
-				DYLIB_COMPATIBILITY_VERSION = 1;
-				DYLIB_CURRENT_VERSION = 1;
-				DYLIB_INSTALL_NAME_BASE = "@rpath";
-				INFOPLIST_FILE = "Target Support Files/Pods-openTok/Pods-openTok-Info.plist";
-				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
-				IPHONEOS_DEPLOYMENT_TARGET = 13.4;
-				LD_RUNPATH_SEARCH_PATHS = (
-					"$(inherited)",
-					"@executable_path/Frameworks",
-					"@loader_path/Frameworks",
-				);
-				MACH_O_TYPE = staticlib;
-				MODULEMAP_FILE = "Target Support Files/Pods-openTok/Pods-openTok.modulemap";
-				OTHER_LDFLAGS = "";
-				OTHER_LIBTOOLFLAGS = "";
-				PODS_ROOT = "$(SRCROOT)";
-				PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}";
-				PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
-				SDKROOT = iphoneos;
-				SKIP_INSTALL = YES;
-				TARGETED_DEVICE_FAMILY = "1,2";
-				VERSIONING_SYSTEM = "apple-generic";
-				VERSION_INFO_PREFIX = "";
-			};
-			name = Debug;
-		};
-		AB5559AE509EAACE59D1C1AFADCE50F8 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = D94F03D0CD3C49BEAAAACD23DB190B70 /* Firebase.debug.xcconfig */;
-			buildSettings = {
-				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
-				CODE_SIGN_IDENTITY = "iPhone Developer";
-				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
-				LD_RUNPATH_SEARCH_PATHS = (
-					"$(inherited)",
-					"@executable_path/Frameworks",
-				);
-				SDKROOT = iphoneos;
-				TARGETED_DEVICE_FAMILY = "1,2";
-			};
-			name = Debug;
-		};
-		C3FBDFFE773A88AF370EA14F7017E64A /* Release */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 70C80FE5FEC8E37CDC7A3FECCC392C9C /* nanopb.release.xcconfig */;
-			buildSettings = {
-				CODE_SIGN_IDENTITY = "";
-				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
-				CURRENT_PROJECT_VERSION = 1;
-				DEFINES_MODULE = YES;
-				DYLIB_COMPATIBILITY_VERSION = 1;
-				DYLIB_CURRENT_VERSION = 1;
-				DYLIB_INSTALL_NAME_BASE = "@rpath";
-				GCC_PREFIX_HEADER = "Target Support Files/nanopb/nanopb-prefix.pch";
-				INFOPLIST_FILE = "Target Support Files/nanopb/nanopb-Info.plist";
-				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
-				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
-				LD_RUNPATH_SEARCH_PATHS = (
-					"$(inherited)",
-					"@executable_path/Frameworks",
-					"@loader_path/Frameworks",
-				);
-				MODULEMAP_FILE = "Target Support Files/nanopb/nanopb.modulemap";
-				PRODUCT_MODULE_NAME = nanopb;
-				PRODUCT_NAME = nanopb;
-				SDKROOT = iphoneos;
-				SKIP_INSTALL = YES;
-				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
-				SWIFT_VERSION = 5.0;
-				TARGETED_DEVICE_FAMILY = "1,2";
-				VALIDATE_PRODUCT = YES;
-				VERSIONING_SYSTEM = "apple-generic";
-				VERSION_INFO_PREFIX = "";
-			};
-			name = Release;
-		};
-		CA1097DBD4802F7F2C98AEBD865E30BB /* Release */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 587ECC487233834DCC0BDFB400FD82FE /* FirebaseDatabase.release.xcconfig */;
-			buildSettings = {
-				CODE_SIGN_IDENTITY = "";
-				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
-				CURRENT_PROJECT_VERSION = 1;
-				DEFINES_MODULE = YES;
-				DYLIB_COMPATIBILITY_VERSION = 1;
-				DYLIB_CURRENT_VERSION = 1;
-				DYLIB_INSTALL_NAME_BASE = "@rpath";
-				INFOPLIST_FILE = "Target Support Files/FirebaseDatabase/FirebaseDatabase-Info.plist";
-				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
-				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
-				LD_RUNPATH_SEARCH_PATHS = (
-					"$(inherited)",
-					"@executable_path/Frameworks",
-					"@loader_path/Frameworks",
-				);
-				MACH_O_TYPE = staticlib;
-				MODULEMAP_FILE = "Target Support Files/FirebaseDatabase/FirebaseDatabase.modulemap";
-				PRODUCT_MODULE_NAME = FirebaseDatabase;
-				PRODUCT_NAME = FirebaseDatabase;
-				SDKROOT = iphoneos;
-				SKIP_INSTALL = YES;
-				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
-				SWIFT_VERSION = 5.0;
-				TARGETED_DEVICE_FAMILY = "1,2";
-				VALIDATE_PRODUCT = YES;
-				VERSIONING_SYSTEM = "apple-generic";
-				VERSION_INFO_PREFIX = "";
-			};
-			name = Release;
-		};
-		CD7758CAA50836BC433D2EB460867CA1 /* Release */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 3A78563412DD19D641BB6F1F170DA015 /* FirebaseCore.release.xcconfig */;
-			buildSettings = {
-				CODE_SIGN_IDENTITY = "";
-				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
-				CURRENT_PROJECT_VERSION = 1;
-				DEFINES_MODULE = YES;
-				DYLIB_COMPATIBILITY_VERSION = 1;
-				DYLIB_CURRENT_VERSION = 1;
-				DYLIB_INSTALL_NAME_BASE = "@rpath";
-				INFOPLIST_FILE = "Target Support Files/FirebaseCore/FirebaseCore-Info.plist";
-				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
-				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
-				LD_RUNPATH_SEARCH_PATHS = (
-					"$(inherited)",
-					"@executable_path/Frameworks",
-					"@loader_path/Frameworks",
-				);
-				MACH_O_TYPE = staticlib;
-				MODULEMAP_FILE = "Target Support Files/FirebaseCore/FirebaseCore.modulemap";
-				PRODUCT_MODULE_NAME = FirebaseCore;
-				PRODUCT_NAME = FirebaseCore;
-				SDKROOT = iphoneos;
-				SKIP_INSTALL = YES;
-				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
-				SWIFT_VERSION = 5.0;
-				TARGETED_DEVICE_FAMILY = "1,2";
-				VALIDATE_PRODUCT = YES;
-				VERSIONING_SYSTEM = "apple-generic";
-				VERSION_INFO_PREFIX = "";
-			};
-			name = Release;
-		};
-		D4B1E620A462A0891D6736B9DF7167C3 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 6AFC8703934BB1696C9104DD93F8811C /* FirebaseAuthInterop.debug.xcconfig */;
-			buildSettings = {
-				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
-				CODE_SIGN_IDENTITY = "iPhone Developer";
-				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
-				LD_RUNPATH_SEARCH_PATHS = (
-					"$(inherited)",
-					"@executable_path/Frameworks",
-				);
-				SDKROOT = iphoneos;
-				TARGETED_DEVICE_FAMILY = "1,2";
-			};
-			name = Debug;
-		};
-		D9D31A44FF011A93F7C3BE7CBB97B625 /* Release */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 5FD0137BAD2B0EED669DF6AC601CAB94 /* Pods-openTok.release.xcconfig */;
-			buildSettings = {
-				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
-				CLANG_ENABLE_OBJC_WEAK = NO;
-				CODE_SIGN_IDENTITY = "";
-				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
-				CURRENT_PROJECT_VERSION = 1;
-				DEFINES_MODULE = YES;
-				DYLIB_COMPATIBILITY_VERSION = 1;
-				DYLIB_CURRENT_VERSION = 1;
-				DYLIB_INSTALL_NAME_BASE = "@rpath";
-				INFOPLIST_FILE = "Target Support Files/Pods-openTok/Pods-openTok-Info.plist";
-				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
-				IPHONEOS_DEPLOYMENT_TARGET = 13.4;
-				LD_RUNPATH_SEARCH_PATHS = (
-					"$(inherited)",
-					"@executable_path/Frameworks",
-					"@loader_path/Frameworks",
-				);
-				MACH_O_TYPE = staticlib;
-				MODULEMAP_FILE = "Target Support Files/Pods-openTok/Pods-openTok.modulemap";
-				OTHER_LDFLAGS = "";
-				OTHER_LIBTOOLFLAGS = "";
-				PODS_ROOT = "$(SRCROOT)";
-				PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}";
-				PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
-				SDKROOT = iphoneos;
-				SKIP_INSTALL = YES;
-				TARGETED_DEVICE_FAMILY = "1,2";
-				VALIDATE_PRODUCT = YES;
-				VERSIONING_SYSTEM = "apple-generic";
-				VERSION_INFO_PREFIX = "";
-			};
-			name = Release;
-		};
-		DEAE083C9B7AC4501FED8E91710C90C3 /* Release */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 89813D1225296221B8A1CD2141389CB2 /* GoogleDataTransport.release.xcconfig */;
-			buildSettings = {
-				CODE_SIGN_IDENTITY = "";
-				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
-				CURRENT_PROJECT_VERSION = 1;
-				DEFINES_MODULE = YES;
-				DYLIB_COMPATIBILITY_VERSION = 1;
-				DYLIB_CURRENT_VERSION = 1;
-				DYLIB_INSTALL_NAME_BASE = "@rpath";
-				INFOPLIST_FILE = "Target Support Files/GoogleDataTransport/GoogleDataTransport-Info.plist";
-				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
-				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
-				LD_RUNPATH_SEARCH_PATHS = (
-					"$(inherited)",
-					"@executable_path/Frameworks",
-					"@loader_path/Frameworks",
-				);
-				MACH_O_TYPE = staticlib;
-				MODULEMAP_FILE = "Target Support Files/GoogleDataTransport/GoogleDataTransport.modulemap";
-				PRODUCT_MODULE_NAME = GoogleDataTransport;
-				PRODUCT_NAME = GoogleDataTransport;
-				SDKROOT = iphoneos;
-				SKIP_INSTALL = YES;
-				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
-				SWIFT_VERSION = 5.0;
-				TARGETED_DEVICE_FAMILY = "1,2";
-				VALIDATE_PRODUCT = YES;
-				VERSIONING_SYSTEM = "apple-generic";
-				VERSION_INFO_PREFIX = "";
-			};
-			name = Release;
-		};
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
-		05B49849CA3C215D143DB2840104B4FA /* Build configuration list for PBXNativeTarget "GoogleDataTransport" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				240C0E7E4C762BDC73CACA89D31FCD57 /* Debug */,
-				DEAE083C9B7AC4501FED8E91710C90C3 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		16D35C68618DC0606DA4F1588993ACAC /* Build configuration list for PBXNativeTarget "Pods-openTok" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				93413C8724F4DCAE7611336765C99E22 /* Debug */,
-				D9D31A44FF011A93F7C3BE7CBB97B625 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		3435C2ED50CB457766D806A0A6BB12E6 /* Build configuration list for PBXNativeTarget "FirebaseCore" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				37E7FAA0F336A6E916D18548A9C73E55 /* Debug */,
-				CD7758CAA50836BC433D2EB460867CA1 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				6C61D818ACD3C2C116FED6A9C67E91B4 /* Debug */,
-				7DC5F11AFBEAE473E8D3C24A2D11338D /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		53DAF387F36CBF8A88540E369A919B2A /* Build configuration list for PBXAggregateTarget "FirebaseCoreDiagnosticsInterop" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				173B32C16786AE9BD070158EA982FC86 /* Debug */,
-				5790832C657231A09F1765DF32DA3791 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		687F852DB15D7E0F2C84046A996FF2D6 /* Build configuration list for PBXNativeTarget "leveldb-library" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				8A11838E987B59E771EC052874D9746D /* Debug */,
-				4F2A98C4DF268BF6C25EB20564DBBD22 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		73D7039327B012B3B4982F70E1071971 /* Build configuration list for PBXNativeTarget "PromisesObjC" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				649956FE5C838C56A4467F90609FE369 /* Debug */,
-				0A9C7033C43DA970703B1FC01A507D0B /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		7D9B6248E3966009CBADAFB74A1F2C6A /* Build configuration list for PBXAggregateTarget "Firebase" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				AB5559AE509EAACE59D1C1AFADCE50F8 /* Debug */,
-				473A0FE29D262CD7CB00C97691DEE08F /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		8F6C4E35B62D2E11DF31C69F295F71C9 /* Build configuration list for PBXNativeTarget "GoogleDataTransportCCTSupport" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				47C91D6762B8F154BD281AB745C8CE65 /* Debug */,
-				0C540FBA9F8BDF37E2401F1205D14CD8 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		99106C33EE595D192242F546552E9F40 /* Build configuration list for PBXAggregateTarget "FirebaseAuthInterop" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				D4B1E620A462A0891D6736B9DF7167C3 /* Debug */,
-				77E6B2764CA69A438683AF3AC3455E7C /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		A6C1285A3A85AD57E7A34AC0F64F6E3D /* Build configuration list for PBXNativeTarget "GoogleUtilities" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				63672522E1EF37970DCF7EC011233B79 /* Debug */,
-				7271519415E4CF37A2618B9A4C9DC607 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		C6158C953A35D1170546EC7F8DA13EF9 /* Build configuration list for PBXNativeTarget "FirebaseCoreDiagnostics" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				0A24C2FCB3AAD26B061B41F0D673CD62 /* Debug */,
-				57FD510461D6BCD2E0F1115C16736F74 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		CEF916B3F6E10D600D494DF7F04648A7 /* Build configuration list for PBXNativeTarget "nanopb" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				5020C73200112D262BB51202AD477229 /* Debug */,
-				C3FBDFFE773A88AF370EA14F7017E64A /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		D907BE725A2E71CEBEB020517B9168DC /* Build configuration list for PBXNativeTarget "FirebaseDatabase" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				2256B83A484BC38D7B557EC97440626F /* Debug */,
-				CA1097DBD4802F7F2C98AEBD865E30BB /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-/* End XCConfigurationList section */
-	};
-	rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-}
diff --git a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/Firebase.xcscheme b/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/Firebase.xcscheme
deleted file mode 100644
index ab9e834..0000000
--- a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/Firebase.xcscheme
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
-   LastUpgradeVersion = "1100"
-   version = "1.3">
-   <BuildAction
-      parallelizeBuildables = "YES"
-      buildImplicitDependencies = "YES">
-      <BuildActionEntries>
-         <BuildActionEntry
-            buildForAnalyzing = "YES"
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "072CEA044D2EF26F03496D5996BBF59F"
-               BuildableName = "Firebase"
-               BlueprintName = "Firebase"
-               ReferencedContainer = "container:Pods.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-      </BuildActionEntries>
-   </BuildAction>
-   <TestAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      buildConfiguration = "Debug">
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </TestAction>
-   <LaunchAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      launchStyle = "0"
-      useCustomWorkingDirectory = "NO"
-      ignoresPersistentStateOnLaunch = "NO"
-      debugDocumentVersioning = "YES"
-      debugServiceExtension = "internal"
-      buildConfiguration = "Debug"
-      allowLocationSimulation = "YES">
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </LaunchAction>
-   <ProfileAction
-      savedToolIdentifier = ""
-      useCustomWorkingDirectory = "NO"
-      debugDocumentVersioning = "YES"
-      buildConfiguration = "Release"
-      shouldUseLaunchSchemeArgsEnv = "YES">
-   </ProfileAction>
-   <AnalyzeAction
-      buildConfiguration = "Debug">
-   </AnalyzeAction>
-   <ArchiveAction
-      buildConfiguration = "Release"
-      revealArchiveInOrganizer = "YES">
-   </ArchiveAction>
-</Scheme>
diff --git a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/FirebaseAuthInterop.xcscheme b/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/FirebaseAuthInterop.xcscheme
deleted file mode 100644
index 7202e6b..0000000
--- a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/FirebaseAuthInterop.xcscheme
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
-   LastUpgradeVersion = "1100"
-   version = "1.3">
-   <BuildAction
-      parallelizeBuildables = "YES"
-      buildImplicitDependencies = "YES">
-      <BuildActionEntries>
-         <BuildActionEntry
-            buildForAnalyzing = "YES"
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "8EC0F2618965C875A96BFDBEE5D9734C"
-               BuildableName = "FirebaseAuthInterop"
-               BlueprintName = "FirebaseAuthInterop"
-               ReferencedContainer = "container:Pods.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-      </BuildActionEntries>
-   </BuildAction>
-   <TestAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      buildConfiguration = "Debug">
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </TestAction>
-   <LaunchAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      launchStyle = "0"
-      useCustomWorkingDirectory = "NO"
-      ignoresPersistentStateOnLaunch = "NO"
-      debugDocumentVersioning = "YES"
-      debugServiceExtension = "internal"
-      buildConfiguration = "Debug"
-      allowLocationSimulation = "YES">
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </LaunchAction>
-   <ProfileAction
-      savedToolIdentifier = ""
-      useCustomWorkingDirectory = "NO"
-      debugDocumentVersioning = "YES"
-      buildConfiguration = "Release"
-      shouldUseLaunchSchemeArgsEnv = "YES">
-   </ProfileAction>
-   <AnalyzeAction
-      buildConfiguration = "Debug">
-   </AnalyzeAction>
-   <ArchiveAction
-      buildConfiguration = "Release"
-      revealArchiveInOrganizer = "YES">
-   </ArchiveAction>
-</Scheme>
diff --git a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/FirebaseCore.xcscheme b/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/FirebaseCore.xcscheme
deleted file mode 100644
index a4c140c..0000000
--- a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/FirebaseCore.xcscheme
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
-   LastUpgradeVersion = "1100"
-   version = "1.3">
-   <BuildAction
-      parallelizeBuildables = "YES"
-      buildImplicitDependencies = "YES">
-      <BuildActionEntries>
-         <BuildActionEntry
-            buildForAnalyzing = "YES"
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "4402AFF83DBDC4DD07E198685FDC2DF2"
-               BuildableName = "FirebaseCore.framework"
-               BlueprintName = "FirebaseCore"
-               ReferencedContainer = "container:Pods.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-      </BuildActionEntries>
-   </BuildAction>
-   <TestAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      buildConfiguration = "Debug">
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </TestAction>
-   <LaunchAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      launchStyle = "0"
-      useCustomWorkingDirectory = "NO"
-      ignoresPersistentStateOnLaunch = "NO"
-      debugDocumentVersioning = "YES"
-      debugServiceExtension = "internal"
-      buildConfiguration = "Debug"
-      allowLocationSimulation = "YES">
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </LaunchAction>
-   <ProfileAction
-      savedToolIdentifier = ""
-      useCustomWorkingDirectory = "NO"
-      debugDocumentVersioning = "YES"
-      buildConfiguration = "Release"
-      shouldUseLaunchSchemeArgsEnv = "YES">
-   </ProfileAction>
-   <AnalyzeAction
-      buildConfiguration = "Debug">
-   </AnalyzeAction>
-   <ArchiveAction
-      buildConfiguration = "Release"
-      revealArchiveInOrganizer = "YES">
-   </ArchiveAction>
-</Scheme>
diff --git a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/FirebaseCoreDiagnostics.xcscheme b/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/FirebaseCoreDiagnostics.xcscheme
deleted file mode 100644
index 21f827d..0000000
--- a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/FirebaseCoreDiagnostics.xcscheme
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
-   LastUpgradeVersion = "1100"
-   version = "1.3">
-   <BuildAction
-      parallelizeBuildables = "YES"
-      buildImplicitDependencies = "YES">
-      <BuildActionEntries>
-         <BuildActionEntry
-            buildForAnalyzing = "YES"
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "620E05868772C10B4920DC7E324F2C87"
-               BuildableName = "FirebaseCoreDiagnostics.framework"
-               BlueprintName = "FirebaseCoreDiagnostics"
-               ReferencedContainer = "container:Pods.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-      </BuildActionEntries>
-   </BuildAction>
-   <TestAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      buildConfiguration = "Debug">
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </TestAction>
-   <LaunchAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      launchStyle = "0"
-      useCustomWorkingDirectory = "NO"
-      ignoresPersistentStateOnLaunch = "NO"
-      debugDocumentVersioning = "YES"
-      debugServiceExtension = "internal"
-      buildConfiguration = "Debug"
-      allowLocationSimulation = "YES">
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </LaunchAction>
-   <ProfileAction
-      savedToolIdentifier = ""
-      useCustomWorkingDirectory = "NO"
-      debugDocumentVersioning = "YES"
-      buildConfiguration = "Release"
-      shouldUseLaunchSchemeArgsEnv = "YES">
-   </ProfileAction>
-   <AnalyzeAction
-      buildConfiguration = "Debug">
-   </AnalyzeAction>
-   <ArchiveAction
-      buildConfiguration = "Release"
-      revealArchiveInOrganizer = "YES">
-   </ArchiveAction>
-</Scheme>
diff --git a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/FirebaseCoreDiagnosticsInterop.xcscheme b/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/FirebaseCoreDiagnosticsInterop.xcscheme
deleted file mode 100644
index 7a77896..0000000
--- a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/FirebaseCoreDiagnosticsInterop.xcscheme
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
-   LastUpgradeVersion = "1100"
-   version = "1.3">
-   <BuildAction
-      parallelizeBuildables = "YES"
-      buildImplicitDependencies = "YES">
-      <BuildActionEntries>
-         <BuildActionEntry
-            buildForAnalyzing = "YES"
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "5EB4B0B6DA6D5C0C3365733BEAA1C485"
-               BuildableName = "FirebaseCoreDiagnosticsInterop"
-               BlueprintName = "FirebaseCoreDiagnosticsInterop"
-               ReferencedContainer = "container:Pods.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-      </BuildActionEntries>
-   </BuildAction>
-   <TestAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      buildConfiguration = "Debug">
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </TestAction>
-   <LaunchAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      launchStyle = "0"
-      useCustomWorkingDirectory = "NO"
-      ignoresPersistentStateOnLaunch = "NO"
-      debugDocumentVersioning = "YES"
-      debugServiceExtension = "internal"
-      buildConfiguration = "Debug"
-      allowLocationSimulation = "YES">
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </LaunchAction>
-   <ProfileAction
-      savedToolIdentifier = ""
-      useCustomWorkingDirectory = "NO"
-      debugDocumentVersioning = "YES"
-      buildConfiguration = "Release"
-      shouldUseLaunchSchemeArgsEnv = "YES">
-   </ProfileAction>
-   <AnalyzeAction
-      buildConfiguration = "Debug">
-   </AnalyzeAction>
-   <ArchiveAction
-      buildConfiguration = "Release"
-      revealArchiveInOrganizer = "YES">
-   </ArchiveAction>
-</Scheme>
diff --git a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/FirebaseDatabase.xcscheme b/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/FirebaseDatabase.xcscheme
deleted file mode 100644
index 0756d3d..0000000
--- a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/FirebaseDatabase.xcscheme
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
-   LastUpgradeVersion = "1100"
-   version = "1.3">
-   <BuildAction
-      parallelizeBuildables = "YES"
-      buildImplicitDependencies = "YES">
-      <BuildActionEntries>
-         <BuildActionEntry
-            buildForAnalyzing = "YES"
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "736AF68F6527ACF6B4A4C54728824A1C"
-               BuildableName = "FirebaseDatabase.framework"
-               BlueprintName = "FirebaseDatabase"
-               ReferencedContainer = "container:Pods.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-      </BuildActionEntries>
-   </BuildAction>
-   <TestAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      buildConfiguration = "Debug">
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </TestAction>
-   <LaunchAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      launchStyle = "0"
-      useCustomWorkingDirectory = "NO"
-      ignoresPersistentStateOnLaunch = "NO"
-      debugDocumentVersioning = "YES"
-      debugServiceExtension = "internal"
-      buildConfiguration = "Debug"
-      allowLocationSimulation = "YES">
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </LaunchAction>
-   <ProfileAction
-      savedToolIdentifier = ""
-      useCustomWorkingDirectory = "NO"
-      debugDocumentVersioning = "YES"
-      buildConfiguration = "Release"
-      shouldUseLaunchSchemeArgsEnv = "YES">
-   </ProfileAction>
-   <AnalyzeAction
-      buildConfiguration = "Debug">
-   </AnalyzeAction>
-   <ArchiveAction
-      buildConfiguration = "Release"
-      revealArchiveInOrganizer = "YES">
-   </ArchiveAction>
-</Scheme>
diff --git a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/GoogleDataTransport.xcscheme b/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/GoogleDataTransport.xcscheme
deleted file mode 100644
index 6208c32..0000000
--- a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/GoogleDataTransport.xcscheme
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
-   LastUpgradeVersion = "1100"
-   version = "1.3">
-   <BuildAction
-      parallelizeBuildables = "YES"
-      buildImplicitDependencies = "YES">
-      <BuildActionEntries>
-         <BuildActionEntry
-            buildForAnalyzing = "YES"
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "5C0371EE948D0357B8EE0E34ABB44BF0"
-               BuildableName = "GoogleDataTransport.framework"
-               BlueprintName = "GoogleDataTransport"
-               ReferencedContainer = "container:Pods.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-      </BuildActionEntries>
-   </BuildAction>
-   <TestAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      buildConfiguration = "Debug">
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </TestAction>
-   <LaunchAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      launchStyle = "0"
-      useCustomWorkingDirectory = "NO"
-      ignoresPersistentStateOnLaunch = "NO"
-      debugDocumentVersioning = "YES"
-      debugServiceExtension = "internal"
-      buildConfiguration = "Debug"
-      allowLocationSimulation = "YES">
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </LaunchAction>
-   <ProfileAction
-      savedToolIdentifier = ""
-      useCustomWorkingDirectory = "NO"
-      debugDocumentVersioning = "YES"
-      buildConfiguration = "Release"
-      shouldUseLaunchSchemeArgsEnv = "YES">
-   </ProfileAction>
-   <AnalyzeAction
-      buildConfiguration = "Debug">
-   </AnalyzeAction>
-   <ArchiveAction
-      buildConfiguration = "Release"
-      revealArchiveInOrganizer = "YES">
-   </ArchiveAction>
-</Scheme>
diff --git a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/GoogleDataTransportCCTSupport.xcscheme b/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/GoogleDataTransportCCTSupport.xcscheme
deleted file mode 100644
index 968a5eb..0000000
--- a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/GoogleDataTransportCCTSupport.xcscheme
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
-   LastUpgradeVersion = "1100"
-   version = "1.3">
-   <BuildAction
-      parallelizeBuildables = "YES"
-      buildImplicitDependencies = "YES">
-      <BuildActionEntries>
-         <BuildActionEntry
-            buildForAnalyzing = "YES"
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "F4F25FCAC51B51FD5F986EB939BF1F87"
-               BuildableName = "GoogleDataTransportCCTSupport.framework"
-               BlueprintName = "GoogleDataTransportCCTSupport"
-               ReferencedContainer = "container:Pods.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-      </BuildActionEntries>
-   </BuildAction>
-   <TestAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      buildConfiguration = "Debug">
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </TestAction>
-   <LaunchAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      launchStyle = "0"
-      useCustomWorkingDirectory = "NO"
-      ignoresPersistentStateOnLaunch = "NO"
-      debugDocumentVersioning = "YES"
-      debugServiceExtension = "internal"
-      buildConfiguration = "Debug"
-      allowLocationSimulation = "YES">
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </LaunchAction>
-   <ProfileAction
-      savedToolIdentifier = ""
-      useCustomWorkingDirectory = "NO"
-      debugDocumentVersioning = "YES"
-      buildConfiguration = "Release"
-      shouldUseLaunchSchemeArgsEnv = "YES">
-   </ProfileAction>
-   <AnalyzeAction
-      buildConfiguration = "Debug">
-   </AnalyzeAction>
-   <ArchiveAction
-      buildConfiguration = "Release"
-      revealArchiveInOrganizer = "YES">
-   </ArchiveAction>
-</Scheme>
diff --git a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/GoogleUtilities.xcscheme b/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/GoogleUtilities.xcscheme
deleted file mode 100644
index 3915f21..0000000
--- a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/GoogleUtilities.xcscheme
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
-   LastUpgradeVersion = "1100"
-   version = "1.3">
-   <BuildAction
-      parallelizeBuildables = "YES"
-      buildImplicitDependencies = "YES">
-      <BuildActionEntries>
-         <BuildActionEntry
-            buildForAnalyzing = "YES"
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "8D7F5D5DD528D21A72DC87ADA5B12E2D"
-               BuildableName = "GoogleUtilities.framework"
-               BlueprintName = "GoogleUtilities"
-               ReferencedContainer = "container:Pods.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-      </BuildActionEntries>
-   </BuildAction>
-   <TestAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      buildConfiguration = "Debug">
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </TestAction>
-   <LaunchAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      launchStyle = "0"
-      useCustomWorkingDirectory = "NO"
-      ignoresPersistentStateOnLaunch = "NO"
-      debugDocumentVersioning = "YES"
-      debugServiceExtension = "internal"
-      buildConfiguration = "Debug"
-      allowLocationSimulation = "YES">
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </LaunchAction>
-   <ProfileAction
-      savedToolIdentifier = ""
-      useCustomWorkingDirectory = "NO"
-      debugDocumentVersioning = "YES"
-      buildConfiguration = "Release"
-      shouldUseLaunchSchemeArgsEnv = "YES">
-   </ProfileAction>
-   <AnalyzeAction
-      buildConfiguration = "Debug">
-   </AnalyzeAction>
-   <ArchiveAction
-      buildConfiguration = "Release"
-      revealArchiveInOrganizer = "YES">
-   </ArchiveAction>
-</Scheme>
diff --git a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/Pods-openTok.xcscheme b/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/Pods-openTok.xcscheme
deleted file mode 100644
index 683e3aa..0000000
--- a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/Pods-openTok.xcscheme
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
-   LastUpgradeVersion = "1100"
-   version = "1.3">
-   <BuildAction
-      parallelizeBuildables = "YES"
-      buildImplicitDependencies = "YES">
-      <BuildActionEntries>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "F4BE744C6379A956B2D5CC93D8F1EE2E"
-               BuildableName = "Pods_openTok.framework"
-               BlueprintName = "Pods-openTok"
-               ReferencedContainer = "container:Pods.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-      </BuildActionEntries>
-   </BuildAction>
-   <TestAction
-      buildConfiguration = "Debug"
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES">
-      <Testables>
-      </Testables>
-   </TestAction>
-   <LaunchAction
-      buildConfiguration = "Debug"
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      launchStyle = "0"
-      useCustomWorkingDirectory = "NO"
-      ignoresPersistentStateOnLaunch = "NO"
-      debugDocumentVersioning = "YES"
-      debugServiceExtension = "internal"
-      allowLocationSimulation = "YES">
-   </LaunchAction>
-   <ProfileAction
-      buildConfiguration = "Release"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      savedToolIdentifier = ""
-      useCustomWorkingDirectory = "NO"
-      debugDocumentVersioning = "YES">
-   </ProfileAction>
-   <AnalyzeAction
-      buildConfiguration = "Debug">
-   </AnalyzeAction>
-   <ArchiveAction
-      buildConfiguration = "Release"
-      revealArchiveInOrganizer = "YES">
-   </ArchiveAction>
-</Scheme>
diff --git a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/PromisesObjC.xcscheme b/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/PromisesObjC.xcscheme
deleted file mode 100644
index d1487d6..0000000
--- a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/PromisesObjC.xcscheme
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
-   LastUpgradeVersion = "1100"
-   version = "1.3">
-   <BuildAction
-      parallelizeBuildables = "YES"
-      buildImplicitDependencies = "YES">
-      <BuildActionEntries>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "2BBF7206D7FAC92C82A042A99C4A98F8"
-               BuildableName = "FBLPromises.framework"
-               BlueprintName = "PromisesObjC"
-               ReferencedContainer = "container:Pods.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-      </BuildActionEntries>
-   </BuildAction>
-   <TestAction
-      buildConfiguration = "Debug"
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES">
-      <Testables>
-      </Testables>
-   </TestAction>
-   <LaunchAction
-      buildConfiguration = "Debug"
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      launchStyle = "0"
-      useCustomWorkingDirectory = "NO"
-      ignoresPersistentStateOnLaunch = "NO"
-      debugDocumentVersioning = "YES"
-      debugServiceExtension = "internal"
-      allowLocationSimulation = "YES">
-   </LaunchAction>
-   <ProfileAction
-      buildConfiguration = "Release"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      savedToolIdentifier = ""
-      useCustomWorkingDirectory = "NO"
-      debugDocumentVersioning = "YES">
-   </ProfileAction>
-   <AnalyzeAction
-      buildConfiguration = "Debug">
-   </AnalyzeAction>
-   <ArchiveAction
-      buildConfiguration = "Release"
-      revealArchiveInOrganizer = "YES">
-   </ArchiveAction>
-</Scheme>
diff --git a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/leveldb-library.xcscheme b/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/leveldb-library.xcscheme
deleted file mode 100644
index b199804..0000000
--- a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/leveldb-library.xcscheme
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
-   LastUpgradeVersion = "1100"
-   version = "1.3">
-   <BuildAction
-      parallelizeBuildables = "YES"
-      buildImplicitDependencies = "YES">
-      <BuildActionEntries>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "9307B7A119490930CF70393AB529AAC1"
-               BuildableName = "leveldb.framework"
-               BlueprintName = "leveldb-library"
-               ReferencedContainer = "container:Pods.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-      </BuildActionEntries>
-   </BuildAction>
-   <TestAction
-      buildConfiguration = "Debug"
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES">
-      <Testables>
-      </Testables>
-   </TestAction>
-   <LaunchAction
-      buildConfiguration = "Debug"
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      launchStyle = "0"
-      useCustomWorkingDirectory = "NO"
-      ignoresPersistentStateOnLaunch = "NO"
-      debugDocumentVersioning = "YES"
-      debugServiceExtension = "internal"
-      allowLocationSimulation = "YES">
-   </LaunchAction>
-   <ProfileAction
-      buildConfiguration = "Release"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      savedToolIdentifier = ""
-      useCustomWorkingDirectory = "NO"
-      debugDocumentVersioning = "YES">
-   </ProfileAction>
-   <AnalyzeAction
-      buildConfiguration = "Debug">
-   </AnalyzeAction>
-   <ArchiveAction
-      buildConfiguration = "Release"
-      revealArchiveInOrganizer = "YES">
-   </ArchiveAction>
-</Scheme>
diff --git a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/nanopb.xcscheme b/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/nanopb.xcscheme
deleted file mode 100644
index 2183889..0000000
--- a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/nanopb.xcscheme
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
-   LastUpgradeVersion = "1100"
-   version = "1.3">
-   <BuildAction
-      parallelizeBuildables = "YES"
-      buildImplicitDependencies = "YES">
-      <BuildActionEntries>
-         <BuildActionEntry
-            buildForAnalyzing = "YES"
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "D2B5E7DCCBBFB32341D857D01211A1A3"
-               BuildableName = "nanopb.framework"
-               BlueprintName = "nanopb"
-               ReferencedContainer = "container:Pods.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-      </BuildActionEntries>
-   </BuildAction>
-   <TestAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      buildConfiguration = "Debug">
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </TestAction>
-   <LaunchAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      launchStyle = "0"
-      useCustomWorkingDirectory = "NO"
-      ignoresPersistentStateOnLaunch = "NO"
-      debugDocumentVersioning = "YES"
-      debugServiceExtension = "internal"
-      buildConfiguration = "Debug"
-      allowLocationSimulation = "YES">
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </LaunchAction>
-   <ProfileAction
-      savedToolIdentifier = ""
-      useCustomWorkingDirectory = "NO"
-      debugDocumentVersioning = "YES"
-      buildConfiguration = "Release"
-      shouldUseLaunchSchemeArgsEnv = "YES">
-   </ProfileAction>
-   <AnalyzeAction
-      buildConfiguration = "Debug">
-   </AnalyzeAction>
-   <ArchiveAction
-      buildConfiguration = "Release"
-      revealArchiveInOrganizer = "YES">
-   </ArchiveAction>
-</Scheme>
diff --git a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/xcschememanagement.plist b/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/xcschememanagement.plist
deleted file mode 100644
index c3d729a..0000000
--- a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/xcschememanagement.plist
+++ /dev/null
@@ -1,102 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>SchemeUserState</key>
-	<dict>
-		<key>Firebase.xcscheme</key>
-		<dict>
-			<key>isShown</key>
-			<false/>
-			<key>orderHint</key>
-			<integer>0</integer>
-		</dict>
-		<key>FirebaseAuthInterop.xcscheme</key>
-		<dict>
-			<key>isShown</key>
-			<false/>
-			<key>orderHint</key>
-			<integer>1</integer>
-		</dict>
-		<key>FirebaseCore.xcscheme</key>
-		<dict>
-			<key>isShown</key>
-			<false/>
-			<key>orderHint</key>
-			<integer>2</integer>
-		</dict>
-		<key>FirebaseCoreDiagnostics.xcscheme</key>
-		<dict>
-			<key>isShown</key>
-			<false/>
-			<key>orderHint</key>
-			<integer>3</integer>
-		</dict>
-		<key>FirebaseCoreDiagnosticsInterop.xcscheme</key>
-		<dict>
-			<key>isShown</key>
-			<false/>
-			<key>orderHint</key>
-			<integer>4</integer>
-		</dict>
-		<key>FirebaseDatabase.xcscheme</key>
-		<dict>
-			<key>isShown</key>
-			<false/>
-			<key>orderHint</key>
-			<integer>5</integer>
-		</dict>
-		<key>GoogleDataTransport.xcscheme</key>
-		<dict>
-			<key>isShown</key>
-			<false/>
-			<key>orderHint</key>
-			<integer>6</integer>
-		</dict>
-		<key>GoogleDataTransportCCTSupport.xcscheme</key>
-		<dict>
-			<key>isShown</key>
-			<false/>
-			<key>orderHint</key>
-			<integer>7</integer>
-		</dict>
-		<key>GoogleUtilities.xcscheme</key>
-		<dict>
-			<key>isShown</key>
-			<false/>
-			<key>orderHint</key>
-			<integer>8</integer>
-		</dict>
-		<key>Pods-openTok.xcscheme</key>
-		<dict>
-			<key>isShown</key>
-			<false/>
-			<key>orderHint</key>
-			<integer>11</integer>
-		</dict>
-		<key>PromisesObjC.xcscheme</key>
-		<dict>
-			<key>isShown</key>
-			<false/>
-			<key>orderHint</key>
-			<integer>12</integer>
-		</dict>
-		<key>leveldb-library.xcscheme</key>
-		<dict>
-			<key>isShown</key>
-			<false/>
-			<key>orderHint</key>
-			<integer>9</integer>
-		</dict>
-		<key>nanopb.xcscheme</key>
-		<dict>
-			<key>isShown</key>
-			<false/>
-			<key>orderHint</key>
-			<integer>10</integer>
-		</dict>
-	</dict>
-	<key>SuppressBuildableAutocreation</key>
-	<dict/>
-</dict>
-</plist>
diff --git a/assign5/openTok/Pods/PromisesObjC/LICENSE b/assign5/openTok/Pods/PromisesObjC/LICENSE
deleted file mode 100644
index d645695..0000000
--- a/assign5/openTok/Pods/PromisesObjC/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
diff --git a/assign5/openTok/Pods/PromisesObjC/README.md b/assign5/openTok/Pods/PromisesObjC/README.md
deleted file mode 100644
index 0eecbb1..0000000
--- a/assign5/openTok/Pods/PromisesObjC/README.md
+++ /dev/null
@@ -1,60 +0,0 @@
-[![Apache
-License](https://img.shields.io/github/license/google/promises.svg)](LICENSE)
-[![Travis](https://api.travis-ci.org/google/promises.svg?branch=master)](https://travis-ci.org/google/promises)
-[![Gitter Chat](https://badges.gitter.im/google/promises.svg)](https://gitter.im/google/promises)
-
-![Platforms](https://img.shields.io/badge/platforms-macOS%20%7C%20iOS%20%7C%20tvOS%20%7C%20watchOS-blue.svg?longCache=true&style=flat)
-![Languages](https://img.shields.io/badge/languages-Swift%20%7C%20ObjC-orange.svg?longCache=true&style=flat)
-![Package Managers](https://img.shields.io/badge/supports-Bazel%20%7C%20SwiftPM%20%7C%20CocoaPods%20%7C%20Carthage-yellow.svg?longCache=true&style=flat)
-
-# Promises
-
-Promises is a modern framework that provides a synchronization construct for
-Objective-C and Swift to facilitate writing asynchronous code.
-
-*   [Introduction](g3doc/index.md)
-    *   [The problem with async
-        code](g3doc/index.md#the-problem-with-async-code)
-    *   [Promises to the rescue](g3doc/index.md#promises-to-the-rescue)
-    *   [What is a promise?](g3doc/index.md#what-is-a-promise)
-*   [Framework](g3doc/index.md#framework)
-    *   [Features](g3doc/index.md#features)
-    *   [Benchmark](g3doc/index.md#benchmark)
-*   [Getting started](g3doc/index.md#getting-started)
-    *   [Add dependency](g3doc/index.md#add-dependency)
-    *   [Import](g3doc/index.md#import)
-    *   [Adopt](g3doc/index.md#adopt)
-*   [Basics](g3doc/index.md#basics)
-    *   [Creating promises](g3doc/index.md#creating-promises)
-        *   [Async](g3doc/index.md#async)
-        *   [Do](g3doc/index.md#do)
-        *   [Pending](g3doc/index.md#pending)
-        *   [Resolved](g3doc/index.md#create-a-resolved-promise)
-    *   [Observing fulfillment](g3doc/index.md#observing-fulfillment)
-        *   [Then](g3doc/index.md#then)
-    *   [Observing rejection](g3doc/index.md#observing-rejection)
-        *   [Catch](g3doc/index.md#catch)
-*   [Extensions](g3doc/index.md#extensions)
-    *   [All](g3doc/index.md#all)
-    *   [Always](g3doc/index.md#always)
-    *   [Any](g3doc/index.md#any)
-    *   [Await](g3doc/index.md#await)
-    *   [Delay](g3doc/index.md#delay)
-    *   [Race](g3doc/index.md#race)
-    *   [Recover](g3doc/index.md#recover)
-    *   [Reduce](g3doc/index.md#reduce)
-    *   [Retry](g3doc/index.md#retry)
-    *   [Timeout](g3doc/index.md#timeout)
-    *   [Validate](g3doc/index.md#validate)
-    *   [Wrap](g3doc/index.md#wrap)
-*   [Advanced topics](g3doc/index.md#advanced-topics)
-    *   [Default dispatch queue](g3doc/index.md#default-dispatch-queue)
-    *   [Ownership and retain
-        cycles](g3doc/index.md#ownership-and-retain-cycles)
-    *   [Testing](g3doc/index.md#testing)
-    *   [Objective-C <-> Swift
-        interoperability](g3doc/index.md#objective-c---swift-interoperability)
-    *   [Dot-syntax in Objective-C](g3doc/index.md#dot-syntax-in-objective-c)
-*   [Anti-patterns](g3doc/index.md#anti-patterns)
-    *   [Broken chain](g3doc/index.md#broken-chain)
-    *   [Nested promises](g3doc/index.md#nested-promises)
diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+All.m b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+All.m
deleted file mode 100644
index c21f30e..0000000
--- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+All.m
+++ /dev/null
@@ -1,86 +0,0 @@
-/**
- Copyright 2018 Google Inc. All rights reserved.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at:
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "FBLPromise+All.h"
-
-#import "FBLPromise+Async.h"
-#import "FBLPromisePrivate.h"
-
-@implementation FBLPromise (AllAdditions)
-
-+ (FBLPromise<NSArray *> *)all:(NSArray *)promises {
-  return [self onQueue:self.defaultDispatchQueue all:promises];
-}
-
-+ (FBLPromise<NSArray *> *)onQueue:(dispatch_queue_t)queue all:(NSArray *)allPromises {
-  NSParameterAssert(queue);
-  NSParameterAssert(allPromises);
-
-  if (allPromises.count == 0) {
-    return [[FBLPromise alloc] initWithResolution:@[]];
-  }
-  NSMutableArray *promises = [allPromises mutableCopy];
-  return [FBLPromise
-      onQueue:queue
-        async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) {
-          for (NSUInteger i = 0; i < promises.count; ++i) {
-            id promise = promises[i];
-            if ([promise isKindOfClass:self]) {
-              continue;
-            } else if ([promise isKindOfClass:[NSError class]]) {
-              reject(promise);
-              return;
-            } else {
-              [promises replaceObjectAtIndex:i
-                                  withObject:[[FBLPromise alloc] initWithResolution:promise]];
-            }
-          }
-          for (FBLPromise *promise in promises) {
-            [promise observeOnQueue:queue
-                fulfill:^(id __unused _) {
-                  // Wait until all are fulfilled.
-                  for (FBLPromise *promise in promises) {
-                    if (!promise.isFulfilled) {
-                      return;
-                    }
-                  }
-                  // If called multiple times, only the first one affects the result.
-                  fulfill([promises valueForKey:NSStringFromSelector(@selector(value))]);
-                }
-                reject:^(NSError *error) {
-                  reject(error);
-                }];
-          }
-        }];
-}
-
-@end
-
-@implementation FBLPromise (DotSyntax_AllAdditions)
-
-+ (FBLPromise<NSArray *> * (^)(NSArray *))all {
-  return ^(NSArray<FBLPromise *> *promises) {
-    return [self all:promises];
-  };
-}
-
-+ (FBLPromise<NSArray *> * (^)(dispatch_queue_t, NSArray *))allOn {
-  return ^(dispatch_queue_t queue, NSArray<FBLPromise *> *promises) {
-    return [self onQueue:queue all:promises];
-  };
-}
-
-@end
diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Always.m b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Always.m
deleted file mode 100644
index 6927442..0000000
--- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Always.m
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- Copyright 2018 Google Inc. All rights reserved.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at:
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "FBLPromise+Always.h"
-
-#import "FBLPromisePrivate.h"
-
-@implementation FBLPromise (AlwaysAdditions)
-
-- (FBLPromise *)always:(FBLPromiseAlwaysWorkBlock)work {
-  return [self onQueue:FBLPromise.defaultDispatchQueue always:work];
-}
-
-- (FBLPromise *)onQueue:(dispatch_queue_t)queue always:(FBLPromiseAlwaysWorkBlock)work {
-  NSParameterAssert(queue);
-  NSParameterAssert(work);
-
-  return [self chainOnQueue:queue
-      chainedFulfill:^id(id value) {
-        work();
-        return value;
-      }
-      chainedReject:^id(NSError *error) {
-        work();
-        return error;
-      }];
-}
-
-@end
-
-@implementation FBLPromise (DotSyntax_AlwaysAdditions)
-
-- (FBLPromise * (^)(FBLPromiseAlwaysWorkBlock))always {
-  return ^(FBLPromiseAlwaysWorkBlock work) {
-    return [self always:work];
-  };
-}
-
-- (FBLPromise * (^)(dispatch_queue_t, FBLPromiseAlwaysWorkBlock))alwaysOn {
-  return ^(dispatch_queue_t queue, FBLPromiseAlwaysWorkBlock work) {
-    return [self onQueue:queue always:work];
-  };
-}
-
-@end
diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Any.m b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Any.m
deleted file mode 100644
index e101c98..0000000
--- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Any.m
+++ /dev/null
@@ -1,112 +0,0 @@
-/**
- Copyright 2018 Google Inc. All rights reserved.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at:
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "FBLPromise+Any.h"
-
-#import "FBLPromise+Async.h"
-#import "FBLPromisePrivate.h"
-
-static NSArray *FBLPromiseCombineValuesAndErrors(NSArray<FBLPromise *> *promises) {
-  NSMutableArray *combinedValuesAndErrors = [[NSMutableArray alloc] init];
-  for (FBLPromise *promise in promises) {
-    if (promise.isFulfilled) {
-      [combinedValuesAndErrors addObject:promise.value ?: [NSNull null]];
-      continue;
-    }
-    if (promise.isRejected) {
-      [combinedValuesAndErrors addObject:promise.error];
-      continue;
-    }
-    assert(!promise.isPending);
-  };
-  return combinedValuesAndErrors;
-}
-
-@implementation FBLPromise (AnyAdditions)
-
-+ (FBLPromise<NSArray *> *)any:(NSArray *)promises {
-  return [self onQueue:FBLPromise.defaultDispatchQueue any:promises];
-}
-
-+ (FBLPromise<NSArray *> *)onQueue:(dispatch_queue_t)queue any:(NSArray *)anyPromises {
-  NSParameterAssert(queue);
-  NSParameterAssert(anyPromises);
-
-  if (anyPromises.count == 0) {
-    return [[FBLPromise alloc] initWithResolution:@[]];
-  }
-  NSMutableArray *promises = [anyPromises mutableCopy];
-  return [FBLPromise
-      onQueue:queue
-        async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) {
-          for (NSUInteger i = 0; i < promises.count; ++i) {
-            id promise = promises[i];
-            if ([promise isKindOfClass:self]) {
-              continue;
-            } else {
-              [promises replaceObjectAtIndex:i
-                                  withObject:[[FBLPromise alloc] initWithResolution:promise]];
-            }
-          }
-          for (FBLPromise *promise in promises) {
-            [promise observeOnQueue:queue
-                fulfill:^(id __unused _) {
-                  // Wait until all are resolved.
-                  for (FBLPromise *promise in promises) {
-                    if (promise.isPending) {
-                      return;
-                    }
-                  }
-                  // If called multiple times, only the first one affects the result.
-                  fulfill(FBLPromiseCombineValuesAndErrors(promises));
-                }
-                reject:^(NSError *error) {
-                  BOOL atLeastOneIsFulfilled = NO;
-                  for (FBLPromise *promise in promises) {
-                    if (promise.isPending) {
-                      return;
-                    }
-                    if (promise.isFulfilled) {
-                      atLeastOneIsFulfilled = YES;
-                    }
-                  }
-                  if (atLeastOneIsFulfilled) {
-                    fulfill(FBLPromiseCombineValuesAndErrors(promises));
-                  } else {
-                    reject(error);
-                  }
-                }];
-          }
-        }];
-}
-
-@end
-
-@implementation FBLPromise (DotSyntax_AnyAdditions)
-
-+ (FBLPromise<NSArray *> * (^)(NSArray *))any {
-  return ^(NSArray *promises) {
-    return [self any:promises];
-  };
-}
-
-+ (FBLPromise<NSArray *> * (^)(dispatch_queue_t, NSArray *))anyOn {
-  return ^(dispatch_queue_t queue, NSArray *promises) {
-    return [self onQueue:queue any:promises];
-  };
-}
-
-@end
diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Async.m b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Async.m
deleted file mode 100644
index 249158c..0000000
--- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Async.m
+++ /dev/null
@@ -1,70 +0,0 @@
-/**
- Copyright 2018 Google Inc. All rights reserved.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at:
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "FBLPromise+Async.h"
-
-#import "FBLPromisePrivate.h"
-
-@implementation FBLPromise (AsyncAdditions)
-
-+ (instancetype)async:(FBLPromiseAsyncWorkBlock)work {
-  return [self onQueue:self.defaultDispatchQueue async:work];
-}
-
-+ (instancetype)onQueue:(dispatch_queue_t)queue async:(FBLPromiseAsyncWorkBlock)work {
-  NSParameterAssert(queue);
-  NSParameterAssert(work);
-
-  FBLPromise *promise = [[FBLPromise alloc] initPending];
-  dispatch_group_async(FBLPromise.dispatchGroup, queue, ^{
-    work(
-        ^(id __nullable value) {
-          if ([value isKindOfClass:[FBLPromise class]]) {
-            [(FBLPromise *)value observeOnQueue:queue
-                fulfill:^(id __nullable value) {
-                  [promise fulfill:value];
-                }
-                reject:^(NSError *error) {
-                  [promise reject:error];
-                }];
-          } else {
-            [promise fulfill:value];
-          }
-        },
-        ^(NSError *error) {
-          [promise reject:error];
-        });
-  });
-  return promise;
-}
-
-@end
-
-@implementation FBLPromise (DotSyntax_AsyncAdditions)
-
-+ (FBLPromise* (^)(FBLPromiseAsyncWorkBlock))async {
-  return ^(FBLPromiseAsyncWorkBlock work) {
-    return [self async:work];
-  };
-}
-
-+ (FBLPromise* (^)(dispatch_queue_t, FBLPromiseAsyncWorkBlock))asyncOn {
-  return ^(dispatch_queue_t queue, FBLPromiseAsyncWorkBlock work) {
-    return [self onQueue:queue async:work];
-  };
-}
-
-@end
diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Await.m b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Await.m
deleted file mode 100644
index ea3b87a..0000000
--- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Await.m
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- Copyright 2018 Google Inc. All rights reserved.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at:
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "FBLPromise+Await.h"
-
-#import "FBLPromisePrivate.h"
-
-id __nullable FBLPromiseAwait(FBLPromise *promise, NSError **outError) {
-  assert(promise);
-
-  static dispatch_once_t onceToken;
-  static dispatch_queue_t queue;
-  dispatch_once(&onceToken, ^{
-    queue = dispatch_queue_create("com.google.FBLPromises.Await", DISPATCH_QUEUE_CONCURRENT);
-  });
-  dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-  id __block resolution;
-  NSError __block *blockError;
-  [promise chainOnQueue:queue
-      chainedFulfill:^id(id value) {
-        resolution = value;
-        dispatch_semaphore_signal(semaphore);
-        return value;
-      }
-      chainedReject:^id(NSError *error) {
-        blockError = error;
-        dispatch_semaphore_signal(semaphore);
-        return error;
-      }];
-  dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
-  if (outError) {
-    *outError = blockError;
-  }
-  return resolution;
-}
diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Catch.m b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Catch.m
deleted file mode 100644
index 25e8ce6..0000000
--- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Catch.m
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- Copyright 2018 Google Inc. All rights reserved.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at:
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "FBLPromise+Catch.h"
-
-#import "FBLPromisePrivate.h"
-
-@implementation FBLPromise (CatchAdditions)
-
-- (FBLPromise *)catch:(FBLPromiseCatchWorkBlock)reject {
-  return [self onQueue:FBLPromise.defaultDispatchQueue catch:reject];
-}
-
-- (FBLPromise *)onQueue:(dispatch_queue_t)queue catch:(FBLPromiseCatchWorkBlock)reject {
-  NSParameterAssert(queue);
-  NSParameterAssert(reject);
-
-  return [self chainOnQueue:queue
-             chainedFulfill:nil
-              chainedReject:^id(NSError *error) {
-                reject(error);
-                return error;
-              }];
-}
-
-@end
-
-@implementation FBLPromise (DotSyntax_CatchAdditions)
-
-- (FBLPromise* (^)(FBLPromiseCatchWorkBlock))catch {
-  return ^(FBLPromiseCatchWorkBlock catch) {
-    return [self catch:catch];
-  };
-}
-
-- (FBLPromise* (^)(dispatch_queue_t, FBLPromiseCatchWorkBlock))catchOn {
-  return ^(dispatch_queue_t queue, FBLPromiseCatchWorkBlock catch) {
-    return [self onQueue:queue catch:catch];
-  };
-}
-
-@end
diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Delay.m b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Delay.m
deleted file mode 100644
index ce94c33..0000000
--- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Delay.m
+++ /dev/null
@@ -1,59 +0,0 @@
-/**
- Copyright 2018 Google Inc. All rights reserved.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at:
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "FBLPromise+Delay.h"
-
-#import "FBLPromisePrivate.h"
-
-@implementation FBLPromise (DelayAdditions)
-
-- (FBLPromise *)delay:(NSTimeInterval)interval {
-  return [self onQueue:FBLPromise.defaultDispatchQueue delay:interval];
-}
-
-- (FBLPromise *)onQueue:(dispatch_queue_t)queue delay:(NSTimeInterval)interval {
-  NSParameterAssert(queue);
-
-  FBLPromise *promise = [[FBLPromise alloc] initPending];
-  [self observeOnQueue:queue
-      fulfill:^(id __nullable value) {
-        dispatch_after(dispatch_time(0, (int64_t)(interval * NSEC_PER_SEC)), queue, ^{
-          [promise fulfill:value];
-        });
-      }
-      reject:^(NSError *error) {
-        [promise reject:error];
-      }];
-  return promise;
-}
-
-@end
-
-@implementation FBLPromise (DotSyntax_DelayAdditions)
-
-- (FBLPromise * (^)(NSTimeInterval))delay {
-  return ^(NSTimeInterval interval) {
-    return [self delay:interval];
-  };
-}
-
-- (FBLPromise * (^)(dispatch_queue_t, NSTimeInterval))delayOn {
-  return ^(dispatch_queue_t queue, NSTimeInterval interval) {
-    return [self onQueue:queue delay:interval];
-  };
-}
-
-@end
diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Do.m b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Do.m
deleted file mode 100644
index eb7e10d..0000000
--- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Do.m
+++ /dev/null
@@ -1,59 +0,0 @@
-/**
- Copyright 2018 Google Inc. All rights reserved.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at:
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "FBLPromise+Do.h"
-
-#import "FBLPromisePrivate.h"
-
-@implementation FBLPromise (DoAdditions)
-
-+ (instancetype)do:(FBLPromiseDoWorkBlock)work {
-  return [self onQueue:self.defaultDispatchQueue do:work];
-}
-
-+ (instancetype)onQueue:(dispatch_queue_t)queue do:(FBLPromiseDoWorkBlock)work {
-  NSParameterAssert(queue);
-  NSParameterAssert(work);
-
-  FBLPromise *promise = [[FBLPromise alloc] initPending];
-  dispatch_group_async(FBLPromise.dispatchGroup, queue, ^{
-    id value = work();
-    if ([value isKindOfClass:[FBLPromise class]]) {
-      [(FBLPromise *)value observeOnQueue:queue
-          fulfill:^(id __nullable value) {
-            [promise fulfill:value];
-          }
-          reject:^(NSError *error) {
-            [promise reject:error];
-          }];
-    } else {
-      [promise fulfill:value];
-    }
-  });
-  return promise;
-}
-
-@end
-
-@implementation FBLPromise (DotSyntax_DoAdditions)
-
-+ (FBLPromise* (^)(dispatch_queue_t, FBLPromiseDoWorkBlock))doOn {
-  return ^(dispatch_queue_t queue, FBLPromiseDoWorkBlock work) {
-    return [self onQueue:queue do:work];
-  };
-}
-
-@end
diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Race.m b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Race.m
deleted file mode 100644
index b5bd9f1..0000000
--- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Race.m
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- Copyright 2018 Google Inc. All rights reserved.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at:
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "FBLPromise+Race.h"
-
-#import "FBLPromise+Async.h"
-#import "FBLPromisePrivate.h"
-
-@implementation FBLPromise (RaceAdditions)
-
-+ (instancetype)race:(NSArray *)promises {
-  return [self onQueue:self.defaultDispatchQueue race:promises];
-}
-
-+ (instancetype)onQueue:(dispatch_queue_t)queue race:(NSArray *)racePromises {
-  NSParameterAssert(queue);
-  NSAssert(racePromises.count > 0, @"No promises to observe");
-
-  NSArray *promises = [racePromises copy];
-  return [FBLPromise onQueue:queue
-                       async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) {
-                         for (id promise in promises) {
-                           if (![promise isKindOfClass:self]) {
-                             fulfill(promise);
-                             return;
-                           }
-                         }
-                         // Subscribe all, but only the first one to resolve will change
-                         // the resulting promise's state.
-                         for (FBLPromise *promise in promises) {
-                           [promise observeOnQueue:queue fulfill:fulfill reject:reject];
-                         }
-                       }];
-}
-
-@end
-
-@implementation FBLPromise (DotSyntax_RaceAdditions)
-
-+ (FBLPromise * (^)(NSArray *))race {
-  return ^(NSArray *promises) {
-    return [self race:promises];
-  };
-}
-
-+ (FBLPromise * (^)(dispatch_queue_t, NSArray *))raceOn {
-  return ^(dispatch_queue_t queue, NSArray *promises) {
-    return [self onQueue:queue race:promises];
-  };
-}
-
-@end
diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Recover.m b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Recover.m
deleted file mode 100644
index 0c9326a..0000000
--- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Recover.m
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- Copyright 2018 Google Inc. All rights reserved.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at:
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "FBLPromise+Recover.h"
-
-#import "FBLPromisePrivate.h"
-
-@implementation FBLPromise (RecoverAdditions)
-
-- (FBLPromise *)recover:(FBLPromiseRecoverWorkBlock)recovery {
-  return [self onQueue:FBLPromise.defaultDispatchQueue recover:recovery];
-}
-
-- (FBLPromise *)onQueue:(dispatch_queue_t)queue recover:(FBLPromiseRecoverWorkBlock)recovery {
-  NSParameterAssert(queue);
-  NSParameterAssert(recovery);
-
-  return [self chainOnQueue:queue
-             chainedFulfill:nil
-              chainedReject:^id(NSError *error) {
-                return recovery(error);
-              }];
-}
-
-@end
-
-@implementation FBLPromise (DotSyntax_RecoverAdditions)
-
-- (FBLPromise * (^)(FBLPromiseRecoverWorkBlock))recover {
-  return ^(FBLPromiseRecoverWorkBlock recovery) {
-    return [self recover:recovery];
-  };
-}
-
-- (FBLPromise * (^)(dispatch_queue_t, FBLPromiseRecoverWorkBlock))recoverOn {
-  return ^(dispatch_queue_t queue, FBLPromiseRecoverWorkBlock recovery) {
-    return [self onQueue:queue recover:recovery];
-  };
-}
-
-@end
diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Reduce.m b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Reduce.m
deleted file mode 100644
index 1f3fc50..0000000
--- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Reduce.m
+++ /dev/null
@@ -1,61 +0,0 @@
-/**
- Copyright 2018 Google Inc. All rights reserved.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at:
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "FBLPromise+Reduce.h"
-
-#import "FBLPromisePrivate.h"
-
-@implementation FBLPromise (ReduceAdditions)
-
-- (FBLPromise *)reduce:(NSArray *)items combine:(FBLPromiseReducerBlock)reducer {
-  return [self onQueue:FBLPromise.defaultDispatchQueue reduce:items combine:reducer];
-}
-
-- (FBLPromise *)onQueue:(dispatch_queue_t)queue
-                 reduce:(NSArray *)items
-                combine:(FBLPromiseReducerBlock)reducer {
-  NSParameterAssert(queue);
-  NSParameterAssert(items);
-  NSParameterAssert(reducer);
-
-  FBLPromise *promise = self;
-  for (id item in items) {
-    promise = [promise chainOnQueue:queue
-                     chainedFulfill:^id(id value) {
-                       return reducer(value, item);
-                     }
-                      chainedReject:nil];
-  }
-  return promise;
-}
-
-@end
-
-@implementation FBLPromise (DotSyntax_ReduceAdditions)
-
-- (FBLPromise * (^)(NSArray *, FBLPromiseReducerBlock))reduce {
-  return ^(NSArray *items, FBLPromiseReducerBlock reducer) {
-    return [self reduce:items combine:reducer];
-  };
-}
-
-- (FBLPromise * (^)(dispatch_queue_t, NSArray *, FBLPromiseReducerBlock))reduceOn {
-  return ^(dispatch_queue_t queue, NSArray *items, FBLPromiseReducerBlock reducer) {
-    return [self onQueue:queue reduce:items combine:reducer];
-  };
-}
-
-@end
diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Retry.m b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Retry.m
deleted file mode 100644
index 37c5576..0000000
--- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Retry.m
+++ /dev/null
@@ -1,128 +0,0 @@
-/**
- Copyright 2018 Google Inc. All rights reserved.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at:
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "FBLPromise+Retry.h"
-
-#import "FBLPromisePrivate.h"
-
-NSInteger const FBLPromiseRetryDefaultAttemptsCount = 1;
-NSTimeInterval const FBLPromiseRetryDefaultDelayInterval = 1.0;
-
-static void FBLPromiseRetryAttempt(FBLPromise *promise, dispatch_queue_t queue, NSInteger count,
-                                   NSTimeInterval interval, FBLPromiseRetryPredicateBlock predicate,
-                                   FBLPromiseRetryWorkBlock work) {
-  __auto_type retrier = ^(id __nullable value) {
-    if ([value isKindOfClass:[NSError class]]) {
-      if (count <= 0 || (predicate && !predicate(count, value))) {
-        [promise reject:value];
-      } else {
-        dispatch_after(dispatch_time(0, (int64_t)(interval * NSEC_PER_SEC)), queue, ^{
-          FBLPromiseRetryAttempt(promise, queue, count - 1, interval, predicate, work);
-        });
-      }
-    } else {
-      [promise fulfill:value];
-    }
-  };
-  id value = work();
-  if ([value isKindOfClass:[FBLPromise class]]) {
-    [(FBLPromise *)value observeOnQueue:queue fulfill:retrier reject:retrier];
-  } else  {
-    retrier(value);
-  }
-}
-
-@implementation FBLPromise (RetryAdditions)
-
-+ (FBLPromise *)retry:(FBLPromiseRetryWorkBlock)work {
-  return [self onQueue:FBLPromise.defaultDispatchQueue retry:work];
-}
-
-+ (FBLPromise *)onQueue:(dispatch_queue_t)queue retry:(FBLPromiseRetryWorkBlock)work {
-  return [self onQueue:queue attempts:FBLPromiseRetryDefaultAttemptsCount retry:work];
-}
-
-+ (FBLPromise *)attempts:(NSInteger)count retry:(FBLPromiseRetryWorkBlock)work {
-  return [self onQueue:FBLPromise.defaultDispatchQueue attempts:count retry:work];
-}
-
-+ (FBLPromise *)onQueue:(dispatch_queue_t)queue
-               attempts:(NSInteger)count
-                  retry:(FBLPromiseRetryWorkBlock)work {
-  return [self onQueue:queue
-              attempts:count
-                 delay:FBLPromiseRetryDefaultDelayInterval
-             condition:nil
-                 retry:work];
-}
-
-+ (FBLPromise *)attempts:(NSInteger)count
-                   delay:(NSTimeInterval)interval
-               condition:(nullable FBLPromiseRetryPredicateBlock)predicate
-                   retry:(FBLPromiseRetryWorkBlock)work {
-  return [self onQueue:FBLPromise.defaultDispatchQueue
-              attempts:count
-                 delay:interval
-             condition:predicate
-                 retry:work];
-}
-
-+ (FBLPromise *)onQueue:(dispatch_queue_t)queue
-               attempts:(NSInteger)count
-                  delay:(NSTimeInterval)interval
-              condition:(nullable FBLPromiseRetryPredicateBlock)predicate
-                  retry:(FBLPromiseRetryWorkBlock)work {
-  NSParameterAssert(queue);
-  NSParameterAssert(work);
-
-  FBLPromise *promise = [[FBLPromise alloc] initPending];
-  FBLPromiseRetryAttempt(promise, queue, count, interval, predicate, work);
-  return promise;
-}
-
-@end
-
-@implementation FBLPromise (DotSyntax_RetryAdditions)
-
-+ (FBLPromise * (^)(FBLPromiseRetryWorkBlock))retry {
-  return ^id(FBLPromiseRetryWorkBlock work) {
-    return [self retry:work];
-  };
-}
-
-+ (FBLPromise * (^)(dispatch_queue_t, FBLPromiseRetryWorkBlock))retryOn {
-  return ^id(dispatch_queue_t queue, FBLPromiseRetryWorkBlock work) {
-    return [self onQueue:queue retry:work];
-  };
-}
-
-+ (FBLPromise * (^)(NSInteger, NSTimeInterval, FBLPromiseRetryPredicateBlock,
-                    FBLPromiseRetryWorkBlock))retryAgain {
-  return ^id(NSInteger count, NSTimeInterval interval, FBLPromiseRetryPredicateBlock predicate,
-             FBLPromiseRetryWorkBlock work) {
-    return [self attempts:count delay:interval condition:predicate retry:work];
-  };
-}
-
-+ (FBLPromise * (^)(dispatch_queue_t, NSInteger, NSTimeInterval, FBLPromiseRetryPredicateBlock,
-                    FBLPromiseRetryWorkBlock))retryAgainOn {
-  return ^id(dispatch_queue_t queue, NSInteger count, NSTimeInterval interval,
-             FBLPromiseRetryPredicateBlock predicate, FBLPromiseRetryWorkBlock work) {
-    return [self onQueue:queue attempts:count delay:interval condition:predicate retry:work];
-  };
-}
-
-@end
diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Testing.m b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Testing.m
deleted file mode 100644
index 27e8e6c..0000000
--- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Testing.m
+++ /dev/null
@@ -1,56 +0,0 @@
-/**
- Copyright 2018 Google Inc. All rights reserved.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at:
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "FBLPromise+Testing.h"
-
-BOOL FBLWaitForPromisesWithTimeout(NSTimeInterval timeout) {
-  BOOL isTimedOut = NO;
-  NSDate *timeoutDate = [NSDate dateWithTimeIntervalSinceNow:timeout];
-  static NSTimeInterval const minimalTimeout = 0.01;
-  static int64_t const minimalTimeToWait = (int64_t)(minimalTimeout * NSEC_PER_SEC);
-  dispatch_time_t waitTime = dispatch_time(DISPATCH_TIME_NOW, minimalTimeToWait);
-  dispatch_group_t dispatchGroup = FBLPromise.dispatchGroup;
-  NSRunLoop *runLoop = NSRunLoop.currentRunLoop;
-  while (dispatch_group_wait(dispatchGroup, waitTime)) {
-    isTimedOut = timeoutDate.timeIntervalSinceNow < 0.0;
-    if (isTimedOut) {
-      break;
-    }
-    [runLoop runUntilDate:[NSDate dateWithTimeIntervalSinceNow:minimalTimeout]];
-  }
-  return !isTimedOut;
-}
-
-@implementation FBLPromise (TestingAdditions)
-
-// These properties are implemented in the FBLPromise class itself.
-@dynamic isPending;
-@dynamic isFulfilled;
-@dynamic isRejected;
-@dynamic pendingObjects;
-@dynamic value;
-@dynamic error;
-
-+ (dispatch_group_t)dispatchGroup {
-  static dispatch_group_t gDispatchGroup;
-  static dispatch_once_t onceToken;
-  dispatch_once(&onceToken, ^{
-    gDispatchGroup = dispatch_group_create();
-  });
-  return gDispatchGroup;
-}
-
-@end
diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Then.m b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Then.m
deleted file mode 100644
index ab03bd1..0000000
--- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Then.m
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- Copyright 2018 Google Inc. All rights reserved.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at:
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "FBLPromise+Then.h"
-
-#import "FBLPromisePrivate.h"
-
-@implementation FBLPromise (ThenAdditions)
-
-- (FBLPromise *)then:(FBLPromiseThenWorkBlock)work {
-  return [self onQueue:FBLPromise.defaultDispatchQueue then:work];
-}
-
-- (FBLPromise *)onQueue:(dispatch_queue_t)queue then:(FBLPromiseThenWorkBlock)work {
-  NSParameterAssert(queue);
-  NSParameterAssert(work);
-
-  return [self chainOnQueue:queue chainedFulfill:work chainedReject:nil];
-}
-
-@end
-
-@implementation FBLPromise (DotSyntax_ThenAdditions)
-
-- (FBLPromise* (^)(FBLPromiseThenWorkBlock))then {
-  return ^(FBLPromiseThenWorkBlock work) {
-    return [self then:work];
-  };
-}
-
-- (FBLPromise* (^)(dispatch_queue_t, FBLPromiseThenWorkBlock))thenOn {
-  return ^(dispatch_queue_t queue, FBLPromiseThenWorkBlock work) {
-    return [self onQueue:queue then:work];
-  };
-}
-
-@end
diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Timeout.m b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Timeout.m
deleted file mode 100644
index a2252e6..0000000
--- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Timeout.m
+++ /dev/null
@@ -1,64 +0,0 @@
-/**
- Copyright 2018 Google Inc. All rights reserved.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at:
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "FBLPromise+Timeout.h"
-
-#import "FBLPromisePrivate.h"
-
-@implementation FBLPromise (TimeoutAdditions)
-
-- (FBLPromise *)timeout:(NSTimeInterval)interval {
-  return [self onQueue:FBLPromise.defaultDispatchQueue timeout:interval];
-}
-
-- (FBLPromise *)onQueue:(dispatch_queue_t)queue timeout:(NSTimeInterval)interval {
-  NSParameterAssert(queue);
-
-  FBLPromise *promise = [[FBLPromise alloc] initPending];
-  [self observeOnQueue:queue
-      fulfill:^(id __nullable value) {
-        [promise fulfill:value];
-      }
-      reject:^(NSError *error) {
-        [promise reject:error];
-      }];
-  typeof(self) __weak weakPromise = promise;
-  dispatch_after(dispatch_time(0, (int64_t)(interval * NSEC_PER_SEC)), queue, ^{
-    NSError *timedOutError = [[NSError alloc] initWithDomain:FBLPromiseErrorDomain
-                                                        code:FBLPromiseErrorCodeTimedOut
-                                                    userInfo:nil];
-    [weakPromise reject:timedOutError];
-  });
-  return promise;
-}
-
-@end
-
-@implementation FBLPromise (DotSyntax_TimeoutAdditions)
-
-- (FBLPromise* (^)(NSTimeInterval))timeout {
-  return ^(NSTimeInterval interval) {
-    return [self timeout:interval];
-  };
-}
-
-- (FBLPromise* (^)(dispatch_queue_t, NSTimeInterval))timeoutOn {
-  return ^(dispatch_queue_t queue, NSTimeInterval interval) {
-    return [self onQueue:queue timeout:interval];
-  };
-}
-
-@end
diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Validate.m b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Validate.m
deleted file mode 100644
index 1e21e81..0000000
--- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Validate.m
+++ /dev/null
@@ -1,56 +0,0 @@
-/**
- Copyright 2018 Google Inc. All rights reserved.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at:
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "FBLPromise+Validate.h"
-
-#import "FBLPromisePrivate.h"
-
-@implementation FBLPromise (ValidateAdditions)
-
-- (FBLPromise*)validate:(FBLPromiseValidateWorkBlock)predicate {
-  return [self onQueue:FBLPromise.defaultDispatchQueue validate:predicate];
-}
-
-- (FBLPromise*)onQueue:(dispatch_queue_t)queue validate:(FBLPromiseValidateWorkBlock)predicate {
-  NSParameterAssert(queue);
-  NSParameterAssert(predicate);
-
-  FBLPromiseChainedFulfillBlock chainedFulfill = ^id(id value) {
-    return predicate(value) ? value :
-                              [[NSError alloc] initWithDomain:FBLPromiseErrorDomain
-                                                         code:FBLPromiseErrorCodeValidationFailure
-                                                     userInfo:nil];
-  };
-  return [self chainOnQueue:queue chainedFulfill:chainedFulfill chainedReject:nil];
-}
-
-@end
-
-@implementation FBLPromise (DotSyntax_ValidateAdditions)
-
-- (FBLPromise* (^)(FBLPromiseValidateWorkBlock))validate {
-  return ^(FBLPromiseValidateWorkBlock predicate) {
-    return [self validate:predicate];
-  };
-}
-
-- (FBLPromise* (^)(dispatch_queue_t, FBLPromiseValidateWorkBlock))validateOn {
-  return ^(dispatch_queue_t queue, FBLPromiseValidateWorkBlock predicate) {
-    return [self onQueue:queue validate:predicate];
-  };
-}
-
-@end
diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Wrap.m b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Wrap.m
deleted file mode 100644
index 3d3341e..0000000
--- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Wrap.m
+++ /dev/null
@@ -1,420 +0,0 @@
-/**
- Copyright 2018 Google Inc. All rights reserved.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at:
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "FBLPromise+Wrap.h"
-
-#import "FBLPromise+Async.h"
-
-@implementation FBLPromise (WrapAdditions)
-
-+ (instancetype)wrapCompletion:(void (^)(FBLPromiseCompletion))work {
-  return [self onQueue:self.defaultDispatchQueue wrapCompletion:work];
-}
-
-+ (instancetype)onQueue:(dispatch_queue_t)queue
-         wrapCompletion:(void (^)(FBLPromiseCompletion))work {
-  NSParameterAssert(queue);
-  NSParameterAssert(work);
-
-  return [self onQueue:queue
-                 async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock __unused _) {
-                   work(^{
-                     fulfill(nil);
-                   });
-                 }];
-}
-
-+ (instancetype)wrapObjectCompletion:(void (^)(FBLPromiseObjectCompletion))work {
-  return [self onQueue:self.defaultDispatchQueue wrapObjectCompletion:work];
-}
-
-+ (instancetype)onQueue:(dispatch_queue_t)queue
-    wrapObjectCompletion:(void (^)(FBLPromiseObjectCompletion))work {
-  NSParameterAssert(queue);
-  NSParameterAssert(work);
-
-  return [self onQueue:queue
-                 async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock __unused _) {
-                   work(^(id __nullable value) {
-                     fulfill(value);
-                   });
-                 }];
-}
-
-+ (instancetype)wrapErrorCompletion:(void (^)(FBLPromiseErrorCompletion))work {
-  return [self onQueue:self.defaultDispatchQueue wrapErrorCompletion:work];
-}
-
-+ (instancetype)onQueue:(dispatch_queue_t)queue
-    wrapErrorCompletion:(void (^)(FBLPromiseErrorCompletion))work {
-  NSParameterAssert(queue);
-  NSParameterAssert(work);
-
-  return [self onQueue:queue
-                 async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) {
-                   work(^(NSError *__nullable error) {
-                     if (error) {
-                       reject(error);
-                     } else {
-                       fulfill(nil);
-                     }
-                   });
-                 }];
-}
-
-+ (instancetype)wrapObjectOrErrorCompletion:(void (^)(FBLPromiseObjectOrErrorCompletion))work {
-  return [self onQueue:self.defaultDispatchQueue wrapObjectOrErrorCompletion:work];
-}
-
-+ (instancetype)onQueue:(dispatch_queue_t)queue
-    wrapObjectOrErrorCompletion:(void (^)(FBLPromiseObjectOrErrorCompletion))work {
-  NSParameterAssert(queue);
-  NSParameterAssert(work);
-
-  return [self onQueue:queue
-                 async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) {
-                   work(^(id __nullable value, NSError *__nullable error) {
-                     if (error) {
-                       reject(error);
-                     } else {
-                       fulfill(value);
-                     }
-                   });
-                 }];
-}
-
-+ (instancetype)wrapErrorOrObjectCompletion:(void (^)(FBLPromiseErrorOrObjectCompletion))work {
-  return [self onQueue:self.defaultDispatchQueue wrapErrorOrObjectCompletion:work];
-}
-
-+ (instancetype)onQueue:(dispatch_queue_t)queue
-    wrapErrorOrObjectCompletion:(void (^)(FBLPromiseErrorOrObjectCompletion))work {
-  NSParameterAssert(queue);
-  NSParameterAssert(work);
-
-  return [self onQueue:queue
-                 async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) {
-                   work(^(NSError *__nullable error, id __nullable value) {
-                     if (error) {
-                       reject(error);
-                     } else {
-                       fulfill(value);
-                     }
-                   });
-                 }];
-}
-
-+ (FBLPromise<NSArray *> *)wrap2ObjectsOrErrorCompletion:
-    (void (^)(FBLPromise2ObjectsOrErrorCompletion))work {
-  return [self onQueue:self.defaultDispatchQueue wrap2ObjectsOrErrorCompletion:work];
-}
-
-+ (FBLPromise<NSArray *> *)onQueue:(dispatch_queue_t)queue
-     wrap2ObjectsOrErrorCompletion:(void (^)(FBLPromise2ObjectsOrErrorCompletion))work {
-  NSParameterAssert(queue);
-  NSParameterAssert(work);
-
-  return [self onQueue:queue
-                 async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) {
-                   work(^(id __nullable value1, id __nullable value2, NSError *__nullable error) {
-                     if (error) {
-                       reject(error);
-                     } else {
-                       fulfill(@[ value1, value2 ]);
-                     }
-                   });
-                 }];
-}
-
-+ (FBLPromise<NSNumber *> *)wrapBoolCompletion:(void (^)(FBLPromiseBoolCompletion))work {
-  return [self onQueue:self.defaultDispatchQueue wrapBoolCompletion:work];
-}
-
-+ (FBLPromise<NSNumber *> *)onQueue:(dispatch_queue_t)queue
-                 wrapBoolCompletion:(void (^)(FBLPromiseBoolCompletion))work {
-  NSParameterAssert(queue);
-  NSParameterAssert(work);
-
-  return [self onQueue:queue
-                 async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock __unused _) {
-                   work(^(BOOL value) {
-                     fulfill(@(value));
-                   });
-                 }];
-}
-
-+ (FBLPromise<NSNumber *> *)wrapBoolOrErrorCompletion:
-    (void (^)(FBLPromiseBoolOrErrorCompletion))work {
-  return [self onQueue:self.defaultDispatchQueue wrapBoolOrErrorCompletion:work];
-}
-
-+ (FBLPromise<NSNumber *> *)onQueue:(dispatch_queue_t)queue
-          wrapBoolOrErrorCompletion:(void (^)(FBLPromiseBoolOrErrorCompletion))work {
-  NSParameterAssert(queue);
-  NSParameterAssert(work);
-
-  return [self onQueue:queue
-                 async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) {
-                   work(^(BOOL value, NSError *__nullable error) {
-                     if (error) {
-                       reject(error);
-                     } else {
-                       fulfill(@(value));
-                     }
-                   });
-                 }];
-}
-
-+ (FBLPromise<NSNumber *> *)wrapIntegerCompletion:(void (^)(FBLPromiseIntegerCompletion))work {
-  return [self onQueue:self.defaultDispatchQueue wrapIntegerCompletion:work];
-}
-
-+ (FBLPromise<NSNumber *> *)onQueue:(dispatch_queue_t)queue
-              wrapIntegerCompletion:(void (^)(FBLPromiseIntegerCompletion))work {
-  NSParameterAssert(queue);
-  NSParameterAssert(work);
-
-  return [self onQueue:queue
-                 async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock __unused _) {
-                   work(^(NSInteger value) {
-                     fulfill(@(value));
-                   });
-                 }];
-}
-
-+ (FBLPromise<NSNumber *> *)wrapIntegerOrErrorCompletion:
-    (void (^)(FBLPromiseIntegerOrErrorCompletion))work {
-  return [self onQueue:self.defaultDispatchQueue wrapIntegerOrErrorCompletion:work];
-}
-
-+ (FBLPromise<NSNumber *> *)onQueue:(dispatch_queue_t)queue
-       wrapIntegerOrErrorCompletion:(void (^)(FBLPromiseIntegerOrErrorCompletion))work {
-  NSParameterAssert(queue);
-  NSParameterAssert(work);
-
-  return [self onQueue:queue
-                 async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) {
-                   work(^(NSInteger value, NSError *__nullable error) {
-                     if (error) {
-                       reject(error);
-                     } else {
-                       fulfill(@(value));
-                     }
-                   });
-                 }];
-}
-
-+ (FBLPromise<NSNumber *> *)wrapDoubleCompletion:(void (^)(FBLPromiseDoubleCompletion))work {
-  return [self onQueue:self.defaultDispatchQueue wrapDoubleCompletion:work];
-}
-
-+ (FBLPromise<NSNumber *> *)onQueue:(dispatch_queue_t)queue
-               wrapDoubleCompletion:(void (^)(FBLPromiseDoubleCompletion))work {
-  NSParameterAssert(queue);
-  NSParameterAssert(work);
-
-  return [self onQueue:(dispatch_queue_t)queue
-                 async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock __unused _) {
-                   work(^(double value) {
-                     fulfill(@(value));
-                   });
-                 }];
-}
-
-+ (FBLPromise<NSNumber *> *)wrapDoubleOrErrorCompletion:
-    (void (^)(FBLPromiseDoubleOrErrorCompletion))work {
-  return [self onQueue:self.defaultDispatchQueue wrapDoubleOrErrorCompletion:work];
-}
-
-+ (FBLPromise<NSNumber *> *)onQueue:(dispatch_queue_t)queue
-        wrapDoubleOrErrorCompletion:(void (^)(FBLPromiseDoubleOrErrorCompletion))work {
-  NSParameterAssert(queue);
-  NSParameterAssert(work);
-
-  return [self onQueue:queue
-                 async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) {
-                   work(^(double value, NSError *__nullable error) {
-                     if (error) {
-                       reject(error);
-                     } else {
-                       fulfill(@(value));
-                     }
-                   });
-                 }];
-}
-
-@end
-
-@implementation FBLPromise (DotSyntax_WrapAdditions)
-
-+ (FBLPromise * (^)(void (^)(FBLPromiseCompletion)))wrapCompletion {
-  return ^(void (^work)(FBLPromiseCompletion)) {
-    return [self wrapCompletion:work];
-  };
-}
-
-+ (FBLPromise * (^)(dispatch_queue_t, void (^)(FBLPromiseCompletion)))wrapCompletionOn {
-  return ^(dispatch_queue_t queue, void (^work)(FBLPromiseCompletion)) {
-    return [self onQueue:queue wrapCompletion:work];
-  };
-}
-
-+ (FBLPromise * (^)(void (^)(FBLPromiseObjectCompletion)))wrapObjectCompletion {
-  return ^(void (^work)(FBLPromiseObjectCompletion)) {
-    return [self wrapObjectCompletion:work];
-  };
-}
-
-+ (FBLPromise * (^)(dispatch_queue_t, void (^)(FBLPromiseObjectCompletion)))wrapObjectCompletionOn {
-  return ^(dispatch_queue_t queue, void (^work)(FBLPromiseObjectCompletion)) {
-    return [self onQueue:queue wrapObjectCompletion:work];
-  };
-}
-
-+ (FBLPromise * (^)(void (^)(FBLPromiseErrorCompletion)))wrapErrorCompletion {
-  return ^(void (^work)(FBLPromiseErrorCompletion)) {
-    return [self wrapErrorCompletion:work];
-  };
-}
-
-+ (FBLPromise * (^)(dispatch_queue_t, void (^)(FBLPromiseErrorCompletion)))wrapErrorCompletionOn {
-  return ^(dispatch_queue_t queue, void (^work)(FBLPromiseErrorCompletion)) {
-    return [self onQueue:queue wrapErrorCompletion:work];
-  };
-}
-
-+ (FBLPromise * (^)(void (^)(FBLPromiseObjectOrErrorCompletion)))wrapObjectOrErrorCompletion {
-  return ^(void (^work)(FBLPromiseObjectOrErrorCompletion)) {
-    return [self wrapObjectOrErrorCompletion:work];
-  };
-}
-
-+ (FBLPromise * (^)(dispatch_queue_t,
-                    void (^)(FBLPromiseObjectOrErrorCompletion)))wrapObjectOrErrorCompletionOn {
-  return ^(dispatch_queue_t queue, void (^work)(FBLPromiseObjectOrErrorCompletion)) {
-    return [self onQueue:queue wrapObjectOrErrorCompletion:work];
-  };
-}
-
-+ (FBLPromise * (^)(void (^)(FBLPromiseErrorOrObjectCompletion)))wrapErrorOrObjectCompletion {
-  return ^(void (^work)(FBLPromiseErrorOrObjectCompletion)) {
-    return [self wrapErrorOrObjectCompletion:work];
-  };
-}
-
-+ (FBLPromise * (^)(dispatch_queue_t,
-                    void (^)(FBLPromiseErrorOrObjectCompletion)))wrapErrorOrObjectCompletionOn {
-  return ^(dispatch_queue_t queue, void (^work)(FBLPromiseErrorOrObjectCompletion)) {
-    return [self onQueue:queue wrapErrorOrObjectCompletion:work];
-  };
-}
-
-+ (FBLPromise<NSArray *> * (^)(void (^)(FBLPromise2ObjectsOrErrorCompletion)))
-    wrap2ObjectsOrErrorCompletion {
-  return ^(void (^work)(FBLPromise2ObjectsOrErrorCompletion)) {
-    return [self wrap2ObjectsOrErrorCompletion:work];
-  };
-}
-
-+ (FBLPromise<NSArray *> * (^)(dispatch_queue_t, void (^)(FBLPromise2ObjectsOrErrorCompletion)))
-    wrap2ObjectsOrErrorCompletionOn {
-  return ^(dispatch_queue_t queue, void (^work)(FBLPromise2ObjectsOrErrorCompletion)) {
-    return [self onQueue:queue wrap2ObjectsOrErrorCompletion:work];
-  };
-}
-
-+ (FBLPromise<NSNumber *> * (^)(void (^)(FBLPromiseBoolCompletion)))wrapBoolCompletion {
-  return ^(void (^work)(FBLPromiseBoolCompletion)) {
-    return [self wrapBoolCompletion:work];
-  };
-}
-
-+ (FBLPromise<NSNumber *> * (^)(dispatch_queue_t,
-                                void (^)(FBLPromiseBoolCompletion)))wrapBoolCompletionOn {
-  return ^(dispatch_queue_t queue, void (^work)(FBLPromiseBoolCompletion)) {
-    return [self onQueue:queue wrapBoolCompletion:work];
-  };
-}
-
-+ (FBLPromise<NSNumber *> * (^)(void (^)(FBLPromiseBoolOrErrorCompletion)))
-    wrapBoolOrErrorCompletion {
-  return ^(void (^work)(FBLPromiseBoolOrErrorCompletion)) {
-    return [self wrapBoolOrErrorCompletion:work];
-  };
-}
-
-+ (FBLPromise<NSNumber *> * (^)(dispatch_queue_t, void (^)(FBLPromiseBoolOrErrorCompletion)))
-    wrapBoolOrErrorCompletionOn {
-  return ^(dispatch_queue_t queue, void (^work)(FBLPromiseBoolOrErrorCompletion)) {
-    return [self onQueue:queue wrapBoolOrErrorCompletion:work];
-  };
-}
-
-+ (FBLPromise<NSNumber *> * (^)(void (^)(FBLPromiseIntegerCompletion)))wrapIntegerCompletion {
-  return ^(void (^work)(FBLPromiseIntegerCompletion)) {
-    return [self wrapIntegerCompletion:work];
-  };
-}
-
-+ (FBLPromise<NSNumber *> * (^)(dispatch_queue_t,
-                                void (^)(FBLPromiseIntegerCompletion)))wrapIntegerCompletionOn {
-  return ^(dispatch_queue_t queue, void (^work)(FBLPromiseIntegerCompletion)) {
-    return [self onQueue:queue wrapIntegerCompletion:work];
-  };
-}
-
-+ (FBLPromise<NSNumber *> * (^)(void (^)(FBLPromiseIntegerOrErrorCompletion)))
-    wrapIntegerOrErrorCompletion {
-  return ^(void (^work)(FBLPromiseIntegerOrErrorCompletion)) {
-    return [self wrapIntegerOrErrorCompletion:work];
-  };
-}
-
-+ (FBLPromise<NSNumber *> * (^)(dispatch_queue_t, void (^)(FBLPromiseIntegerOrErrorCompletion)))
-    wrapIntegerOrErrorCompletionOn {
-  return ^(dispatch_queue_t queue, void (^work)(FBLPromiseIntegerOrErrorCompletion)) {
-    return [self onQueue:queue wrapIntegerOrErrorCompletion:work];
-  };
-}
-
-+ (FBLPromise<NSNumber *> * (^)(void (^)(FBLPromiseDoubleCompletion)))wrapDoubleCompletion {
-  return ^(void (^work)(FBLPromiseDoubleCompletion)) {
-    return [self wrapDoubleCompletion:work];
-  };
-}
-
-+ (FBLPromise<NSNumber *> * (^)(dispatch_queue_t,
-                                void (^)(FBLPromiseDoubleCompletion)))wrapDoubleCompletionOn {
-  return ^(dispatch_queue_t queue, void (^work)(FBLPromiseDoubleCompletion)) {
-    return [self onQueue:queue wrapDoubleCompletion:work];
-  };
-}
-
-+ (FBLPromise<NSNumber *> * (^)(void (^)(FBLPromiseDoubleOrErrorCompletion)))
-    wrapDoubleOrErrorCompletion {
-  return ^(void (^work)(FBLPromiseDoubleOrErrorCompletion)) {
-    return [self wrapDoubleOrErrorCompletion:work];
-  };
-}
-
-+ (FBLPromise<NSNumber *> * (^)(dispatch_queue_t, void (^)(FBLPromiseDoubleOrErrorCompletion)))
-    wrapDoubleOrErrorCompletionOn {
-  return ^(dispatch_queue_t queue, void (^work)(FBLPromiseDoubleOrErrorCompletion)) {
-    return [self onQueue:queue wrapDoubleOrErrorCompletion:work];
-  };
-}
-
-@end
diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise.m b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise.m
deleted file mode 100644
index 0837b04..0000000
--- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise.m
+++ /dev/null
@@ -1,297 +0,0 @@
-/**
- Copyright 2018 Google Inc. All rights reserved.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at:
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "FBLPromisePrivate.h"
-
-/** All states a promise can be in. */
-typedef NS_ENUM(NSInteger, FBLPromiseState) {
-  FBLPromiseStatePending = 0,
-  FBLPromiseStateFulfilled,
-  FBLPromiseStateRejected,
-};
-
-typedef void (^FBLPromiseObserver)(FBLPromiseState state, id __nullable resolution);
-
-static dispatch_queue_t gFBLPromiseDefaultDispatchQueue;
-
-@implementation FBLPromise {
-  /** Current state of the promise. */
-  FBLPromiseState _state;
-  /**
-   Set of arbitrary objects to keep strongly while the promise is pending.
-   Becomes nil after the promise has been resolved.
-   */
-  NSMutableSet *__nullable _pendingObjects;
-  /**
-   Value to fulfill the promise with.
-   Can be nil if the promise is still pending, was resolved with nil or after it has been rejected.
-   */
-  id __nullable _value;
-  /**
-   Error to reject the promise with.
-   Can be nil if the promise is still pending or after it has been fulfilled.
-   */
-  NSError *__nullable _error;
-  /** List of observers to notify when the promise gets resolved. */
-  NSMutableArray<FBLPromiseObserver> *_observers;
-}
-
-+ (void)initialize {
-  if (self == [FBLPromise class]) {
-    gFBLPromiseDefaultDispatchQueue = dispatch_get_main_queue();
-  }
-}
-
-+ (dispatch_queue_t)defaultDispatchQueue {
-  @synchronized(self) {
-    return gFBLPromiseDefaultDispatchQueue;
-  }
-}
-
-+ (void)setDefaultDispatchQueue:(dispatch_queue_t)queue {
-  NSParameterAssert(queue);
-
-  @synchronized(self) {
-    gFBLPromiseDefaultDispatchQueue = queue;
-  }
-}
-
-+ (instancetype)pendingPromise {
-  return [[self alloc] initPending];
-}
-
-+ (instancetype)resolvedWith:(nullable id)resolution {
-  return [[self alloc] initWithResolution:resolution];
-}
-
-- (void)fulfill:(nullable id)value {
-  if ([value isKindOfClass:[NSError class]]) {
-    [self reject:(NSError *)value];
-  } else {
-    @synchronized(self) {
-      if (_state == FBLPromiseStatePending) {
-        _state = FBLPromiseStateFulfilled;
-        _value = value;
-        _pendingObjects = nil;
-        for (FBLPromiseObserver observer in _observers) {
-          observer(_state, _value);
-        }
-        _observers = nil;
-        dispatch_group_leave(FBLPromise.dispatchGroup);
-      }
-    }
-  }
-}
-
-- (void)reject:(NSError *)error {
-  NSAssert([error isKindOfClass:[NSError class]], @"Invalid error type.");
-
-  if (![error isKindOfClass:[NSError class]]) {
-    // Give up on invalid error type in Release mode.
-    @throw error;  // NOLINT
-  }
-  @synchronized(self) {
-    if (_state == FBLPromiseStatePending) {
-      _state = FBLPromiseStateRejected;
-      _error = error;
-      _pendingObjects = nil;
-      for (FBLPromiseObserver observer in _observers) {
-        observer(_state, _error);
-      }
-      _observers = nil;
-      dispatch_group_leave(FBLPromise.dispatchGroup);
-    }
-  }
-}
-
-#pragma mark - NSObject
-
-- (NSString *)description {
-  if (self.isFulfilled) {
-    return [NSString stringWithFormat:@"<%@ %p> Fulfilled: %@", NSStringFromClass([self class]),
-                                      self, self.value];
-  }
-  if (self.isRejected) {
-    return [NSString stringWithFormat:@"<%@ %p> Rejected: %@", NSStringFromClass([self class]),
-                                      self, self.error];
-  }
-  return [NSString stringWithFormat:@"<%@ %p> Pending", NSStringFromClass([self class]), self];
-}
-
-#pragma mark - Private
-
-- (instancetype)initPending {
-  self = [super init];
-  if (self) {
-    dispatch_group_enter(FBLPromise.dispatchGroup);
-  }
-  return self;
-}
-
-- (instancetype)initWithResolution:(nullable id)resolution {
-  self = [super init];
-  if (self) {
-    if ([resolution isKindOfClass:[NSError class]]) {
-      _state = FBLPromiseStateRejected;
-      _error = (NSError *)resolution;
-    } else {
-      _state = FBLPromiseStateFulfilled;
-      _value = resolution;
-    }
-  }
-  return self;
-}
-
-- (void)dealloc {
-  if (_state == FBLPromiseStatePending) {
-    dispatch_group_leave(FBLPromise.dispatchGroup);
-  }
-}
-
-- (BOOL)isPending {
-  @synchronized(self) {
-    return _state == FBLPromiseStatePending;
-  }
-}
-
-- (BOOL)isFulfilled {
-  @synchronized(self) {
-    return _state == FBLPromiseStateFulfilled;
-  }
-}
-
-- (BOOL)isRejected {
-  @synchronized(self) {
-    return _state == FBLPromiseStateRejected;
-  }
-}
-
-- (nullable id)value {
-  @synchronized(self) {
-    return _value;
-  }
-}
-
-- (NSError *__nullable)error {
-  @synchronized(self) {
-    return _error;
-  }
-}
-
-- (NSMutableSet *__nullable)pendingObjects {
-  @synchronized(self) {
-    if (_state == FBLPromiseStatePending) {
-      if (!_pendingObjects) {
-        _pendingObjects = [[NSMutableSet alloc] init];
-      }
-    }
-    return _pendingObjects;
-  }
-}
-
-- (void)observeOnQueue:(dispatch_queue_t)queue
-               fulfill:(FBLPromiseOnFulfillBlock)onFulfill
-                reject:(FBLPromiseOnRejectBlock)onReject {
-  NSParameterAssert(queue);
-  NSParameterAssert(onFulfill);
-  NSParameterAssert(onReject);
-
-  @synchronized(self) {
-    switch (_state) {
-      case FBLPromiseStatePending: {
-        if (!_observers) {
-          _observers = [[NSMutableArray alloc] init];
-        }
-        [_observers addObject:^(FBLPromiseState state, id __nullable resolution) {
-          dispatch_group_async(FBLPromise.dispatchGroup, queue, ^{
-            switch (state) {
-              case FBLPromiseStatePending:
-                break;
-              case FBLPromiseStateFulfilled:
-                onFulfill(resolution);
-                break;
-              case FBLPromiseStateRejected:
-                onReject(resolution);
-                break;
-            }
-          });
-        }];
-        break;
-      }
-      case FBLPromiseStateFulfilled: {
-        dispatch_group_async(FBLPromise.dispatchGroup, queue, ^{
-          onFulfill(self->_value);
-        });
-        break;
-      }
-      case FBLPromiseStateRejected: {
-        dispatch_group_async(FBLPromise.dispatchGroup, queue, ^{
-          onReject(self->_error);
-        });
-        break;
-      }
-    }
-  }
-}
-
-- (FBLPromise *)chainOnQueue:(dispatch_queue_t)queue
-              chainedFulfill:(FBLPromiseChainedFulfillBlock)chainedFulfill
-               chainedReject:(FBLPromiseChainedRejectBlock)chainedReject {
-  NSParameterAssert(queue);
-
-  FBLPromise *promise = [[FBLPromise alloc] initPending];
-  __auto_type resolver = ^(id __nullable value) {
-    if ([value isKindOfClass:[FBLPromise class]]) {
-      [(FBLPromise *)value observeOnQueue:queue
-          fulfill:^(id __nullable value) {
-            [promise fulfill:value];
-          }
-          reject:^(NSError *error) {
-            [promise reject:error];
-          }];
-    } else {
-      [promise fulfill:value];
-    }
-  };
-  [self observeOnQueue:queue
-      fulfill:^(id __nullable value) {
-        value = chainedFulfill ? chainedFulfill(value) : value;
-        resolver(value);
-      }
-      reject:^(NSError *error) {
-        id value = chainedReject ? chainedReject(error) : error;
-        resolver(value);
-      }];
-  return promise;
-}
-
-@end
-
-@implementation FBLPromise (DotSyntaxAdditions)
-
-+ (instancetype (^)(void))pending {
-  return ^(void) {
-    return [self pendingPromise];
-  };
-}
-
-+ (instancetype (^)(id __nullable))resolved {
-  return ^(id resolution) {
-    return [self resolvedWith:resolution];
-  };
-}
-
-@end
diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromiseError.m b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromiseError.m
deleted file mode 100644
index 1cc181a..0000000
--- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromiseError.m
+++ /dev/null
@@ -1,19 +0,0 @@
-/**
- Copyright 2018 Google Inc. All rights reserved.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at:
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "FBLPromiseError.h"
-
-NSErrorDomain const FBLPromiseErrorDomain = @"com.google.FBLPromises.Error";
diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+All.h b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+All.h
deleted file mode 100644
index 9c0090e..0000000
--- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+All.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- Copyright 2018 Google Inc. All rights reserved.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at:
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "FBLPromise.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface FBLPromise<Value>(AllAdditions)
-
-/**
- Wait until all of the given promises are fulfilled.
- If one of the given promises is rejected, then the returned promise is rejected with same error.
- If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`,
- it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly.
- Promises resolved with `nil` become `NSNull` instances in the resulting array.
-
- @param promises Promises to wait for.
- @return Promise of an array containing the values of input promises in the same order.
- */
-+ (FBLPromise<NSArray *> *)all:(NSArray *)promises NS_SWIFT_UNAVAILABLE("");
-
-/**
- Wait until all of the given promises are fulfilled.
- If one of the given promises is rejected, then the returned promise is rejected with same error.
- If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`,
- it's implicitly considered a pre-fulfilled or pre-rejected FBLPromise correspondingly.
- Promises resolved with `nil` become `NSNull` instances in the resulting array.
-
- @param queue A queue to dispatch on.
- @param promises Promises to wait for.
- @return Promise of an array containing the values of input promises in the same order.
- */
-+ (FBLPromise<NSArray *> *)onQueue:(dispatch_queue_t)queue
-                               all:(NSArray *)promises NS_REFINED_FOR_SWIFT;
-
-@end
-
-/**
- Convenience dot-syntax wrappers for `FBLPromise` `all` operators.
- Usage: FBLPromise.all(@[ ... ])
- */
-@interface FBLPromise<Value>(DotSyntax_AllAdditions)
-
-+ (FBLPromise<NSArray *> * (^)(NSArray *))all FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE("");
-+ (FBLPromise<NSArray *> * (^)(dispatch_queue_t, NSArray *))allOn FBL_PROMISES_DOT_SYNTAX
-    NS_SWIFT_UNAVAILABLE("");
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Always.h b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Always.h
deleted file mode 100644
index 13000f5..0000000
--- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Always.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- Copyright 2018 Google Inc. All rights reserved.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at:
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "FBLPromise.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface FBLPromise<Value>(AlwaysAdditions)
-
-typedef void (^FBLPromiseAlwaysWorkBlock)(void) NS_SWIFT_UNAVAILABLE("");
-
-/**
- @param work A block that always executes, no matter if the receiver is rejected or fulfilled.
- @return A new pending promise to be resolved with same resolution as the receiver.
- */
-- (FBLPromise *)always:(FBLPromiseAlwaysWorkBlock)work NS_SWIFT_UNAVAILABLE("");
-
-/**
- @param queue A queue to dispatch on.
- @param work A block that always executes, no matter if the receiver is rejected or fulfilled.
- @return A new pending promise to be resolved with same resolution as the receiver.
- */
-- (FBLPromise *)onQueue:(dispatch_queue_t)queue
-                 always:(FBLPromiseAlwaysWorkBlock)work NS_REFINED_FOR_SWIFT;
-
-@end
-
-/**
- Convenience dot-syntax wrappers for `FBLPromise` `always` operators.
- Usage: promise.always(^{...})
- */
-@interface FBLPromise<Value>(DotSyntax_AlwaysAdditions)
-
-- (FBLPromise* (^)(FBLPromiseAlwaysWorkBlock))always FBL_PROMISES_DOT_SYNTAX
-    NS_SWIFT_UNAVAILABLE("");
-- (FBLPromise* (^)(dispatch_queue_t, FBLPromiseAlwaysWorkBlock))alwaysOn FBL_PROMISES_DOT_SYNTAX
-    NS_SWIFT_UNAVAILABLE("");
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Any.h b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Any.h
deleted file mode 100644
index 82875bf..0000000
--- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Any.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/**
- Copyright 2018 Google Inc. All rights reserved.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at:
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "FBLPromise.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface FBLPromise<Value>(AnyAdditions)
-
-/**
- Waits until all of the given promises are either fulfilled or rejected.
- If all promises are rejected, then the returned promise is rejected with same error
- as the last one rejected.
- If at least one of the promises is fulfilled, the resulting promise is fulfilled with an array of
- values or `NSErrors`, matching the original order of fulfilled or rejected promises respectively.
- If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`,
- it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly.
- Promises resolved with `nil` become `NSNull` instances in the resulting array.
-
- @param promises Promises to wait for.
- @return Promise of array containing the values or `NSError`s of input promises in the same order.
- */
-+ (FBLPromise<NSArray *> *)any:(NSArray *)promises NS_SWIFT_UNAVAILABLE("");
-
-/**
- Waits until all of the given promises are either fulfilled or rejected.
- If all promises are rejected, then the returned promise is rejected with same error
- as the last one rejected.
- If at least one of the promises is fulfilled, the resulting promise is fulfilled with an array of
- values or `NSError`s, matching the original order of fulfilled or rejected promises respectively.
- If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`,
- it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly.
- Promises resolved with `nil` become `NSNull` instances in the resulting array.
-
- @param queue A queue to dispatch on.
- @param promises Promises to wait for.
- @return Promise of array containing the values or `NSError`s of input promises in the same order.
- */
-+ (FBLPromise<NSArray *> *)onQueue:(dispatch_queue_t)queue
-                               any:(NSArray *)promises NS_REFINED_FOR_SWIFT;
-
-@end
-
-/**
- Convenience dot-syntax wrappers for `FBLPromise` `any` operators.
- Usage: FBLPromise.any(@[ ... ])
- */
-@interface FBLPromise<Value>(DotSyntax_AnyAdditions)
-
-+ (FBLPromise<NSArray *> * (^)(NSArray *))any FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE("");
-+ (FBLPromise<NSArray *> * (^)(dispatch_queue_t, NSArray *))anyOn FBL_PROMISES_DOT_SYNTAX
-    NS_SWIFT_UNAVAILABLE("");
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Async.h b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Async.h
deleted file mode 100644
index 0588a9e..0000000
--- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Async.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- Copyright 2018 Google Inc. All rights reserved.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at:
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "FBLPromise.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface FBLPromise<Value>(AsyncAdditions)
-
-typedef void (^FBLPromiseFulfillBlock)(Value __nullable value) NS_SWIFT_UNAVAILABLE("");
-typedef void (^FBLPromiseRejectBlock)(NSError *error) NS_SWIFT_UNAVAILABLE("");
-typedef void (^FBLPromiseAsyncWorkBlock)(FBLPromiseFulfillBlock fulfill,
-                                         FBLPromiseRejectBlock reject) NS_SWIFT_UNAVAILABLE("");
-
-/**
- Creates a pending promise and executes `work` block asynchronously.
-
- @param work A block to perform any operations needed to resolve the promise.
- @return A new pending promise.
- */
-+ (instancetype)async:(FBLPromiseAsyncWorkBlock)work NS_SWIFT_UNAVAILABLE("");
-
-/**
- Creates a pending promise and executes `work` block asynchronously on the given queue.
-
- @param queue A queue to invoke the `work` block on.
- @param work A block to perform any operations needed to resolve the promise.
- @return A new pending promise.
- */
-+ (instancetype)onQueue:(dispatch_queue_t)queue
-                  async:(FBLPromiseAsyncWorkBlock)work NS_REFINED_FOR_SWIFT;
-
-@end
-
-/**
- Convenience dot-syntax wrappers for `FBLPromise` `async` operators.
- Usage: FBLPromise.async(^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) { ... })
- */
-@interface FBLPromise<Value>(DotSyntax_AsyncAdditions)
-
-+ (FBLPromise* (^)(FBLPromiseAsyncWorkBlock))async FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE("");
-+ (FBLPromise* (^)(dispatch_queue_t, FBLPromiseAsyncWorkBlock))asyncOn FBL_PROMISES_DOT_SYNTAX
-    NS_SWIFT_UNAVAILABLE("");
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Await.h b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Await.h
deleted file mode 100644
index c97a1ba..0000000
--- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Await.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- Copyright 2018 Google Inc. All rights reserved.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at:
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "FBLPromise.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-/**
- Waits for promise resolution. The current thread blocks until the promise is resolved.
-
- @param promise Promise to wait for.
- @param error Error the promise was rejected with, or `nil` if the promise was fulfilled.
- @return Value the promise was fulfilled with. If the promise was rejected, the return value
-         is always `nil`, but the error out arg is not.
- */
-FOUNDATION_EXTERN id __nullable FBLPromiseAwait(FBLPromise *promise,
-                                                NSError **error) NS_REFINED_FOR_SWIFT;
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Catch.h b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Catch.h
deleted file mode 100644
index a9ff170..0000000
--- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Catch.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/**
- Copyright 2018 Google Inc. All rights reserved.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at:
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "FBLPromise.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface FBLPromise<Value>(CatchAdditions)
-
-typedef void (^FBLPromiseCatchWorkBlock)(NSError *error) NS_SWIFT_UNAVAILABLE("");
-
-/**
- Creates a pending promise which eventually gets resolved with same resolution as the receiver.
- If receiver is rejected, then `reject` block is executed asynchronously.
-
- @param reject A block to handle the error that receiver was rejected with.
- @return A new pending promise.
- */
-- (FBLPromise *)catch:(FBLPromiseCatchWorkBlock)reject NS_SWIFT_UNAVAILABLE("");
-
-/**
- Creates a pending promise which eventually gets resolved with same resolution as the receiver.
- If receiver is rejected, then `reject` block is executed asynchronously on the given queue.
-
- @param queue A queue to invoke the `reject` block on.
- @param reject A block to handle the error that receiver was rejected with.
- @return A new pending promise.
- */
-- (FBLPromise *)onQueue:(dispatch_queue_t)queue
-                  catch:(FBLPromiseCatchWorkBlock)reject NS_REFINED_FOR_SWIFT;
-
-@end
-
-/**
- Convenience dot-syntax wrappers for `FBLPromise` `catch` operators.
- Usage: promise.catch(^(NSError *error) { ... })
- */
-@interface FBLPromise<Value>(DotSyntax_CatchAdditions)
-
-- (FBLPromise* (^)(FBLPromiseCatchWorkBlock))catch FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE("");
-- (FBLPromise* (^)(dispatch_queue_t, FBLPromiseCatchWorkBlock))catchOn FBL_PROMISES_DOT_SYNTAX
-    NS_SWIFT_UNAVAILABLE("");
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Delay.h b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Delay.h
deleted file mode 100644
index 557df48..0000000
--- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Delay.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/**
- Copyright 2018 Google Inc. All rights reserved.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at:
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "FBLPromise.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface FBLPromise<Value>(DelayAdditions)
-
-/**
- Creates a new pending promise that fulfills with the same value as `self` after the `delay`, or
- rejects with the same error immediately.
-
- @param interval Time to wait in seconds.
- @return A new pending promise that fulfills at least `delay` seconds later than `self`, or rejects
-         with the same error immediately.
- */
-- (FBLPromise *)delay:(NSTimeInterval)interval NS_SWIFT_UNAVAILABLE("");
-
-/**
- Creates a new pending promise that fulfills with the same value as `self` after the `delay`, or
- rejects with the same error immediately.
-
- @param queue A queue to dispatch on.
- @param interval Time to wait in seconds.
- @return A new pending promise that fulfills at least `delay` seconds later than `self`, or rejects
-         with the same error immediately.
- */
-- (FBLPromise *)onQueue:(dispatch_queue_t)queue
-                  delay:(NSTimeInterval)interval NS_REFINED_FOR_SWIFT;
-
-@end
-
-/**
- Convenience dot-syntax wrappers for `FBLPromise` `delay` operators.
- Usage: promise.delay(...)
- */
-@interface FBLPromise<Value>(DotSyntax_DelayAdditions)
-
-- (FBLPromise * (^)(NSTimeInterval))delay FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE("");
-- (FBLPromise * (^)(dispatch_queue_t, NSTimeInterval))delayOn FBL_PROMISES_DOT_SYNTAX
-    NS_SWIFT_UNAVAILABLE("");
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Do.h b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Do.h
deleted file mode 100644
index 6838e0a..0000000
--- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Do.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- Copyright 2018 Google Inc. All rights reserved.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at:
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "FBLPromise.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface FBLPromise<Value>(DoAdditions)
-
-typedef id __nullable (^FBLPromiseDoWorkBlock)(void) NS_SWIFT_UNAVAILABLE("");
-
-/**
- Creates a pending promise and executes `work` block asynchronously.
-
- @param work A block that returns a value or an error used to resolve the promise.
- @return A new pending promise.
- */
-+ (instancetype)do:(FBLPromiseDoWorkBlock)work NS_SWIFT_UNAVAILABLE("");
-
-/**
- Creates a pending promise and executes `work` block asynchronously on the given queue.
-
- @param queue A queue to invoke the `work` block on.
- @param work A block that returns a value or an error used to resolve the promise.
- @return A new pending promise.
- */
-+ (instancetype)onQueue:(dispatch_queue_t)queue do:(FBLPromiseDoWorkBlock)work NS_REFINED_FOR_SWIFT;
-
-@end
-
-/**
- Convenience dot-syntax wrappers for `FBLPromise` `do` operators.
- Usage: FBLPromise.doOn(queue, ^(NSError *error) { ... })
- */
-@interface FBLPromise<Value>(DotSyntax_DoAdditions)
-
-+ (FBLPromise * (^)(dispatch_queue_t, FBLPromiseDoWorkBlock))doOn FBL_PROMISES_DOT_SYNTAX
-    NS_SWIFT_UNAVAILABLE("");
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Race.h b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Race.h
deleted file mode 100644
index 2f67258..0000000
--- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Race.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- Copyright 2018 Google Inc. All rights reserved.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at:
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "FBLPromise.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface FBLPromise<Value>(RaceAdditions)
-
-/**
- Wait until any of the given promises are fulfilled.
- If one of the promises is rejected, then the returned promise is rejected with same error.
- If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`,
- it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly.
-
- @param promises Promises to wait for.
- @return A new pending promise to be resolved with the same resolution as the first promise, among
-         the given ones, which was resolved.
- */
-+ (instancetype)race:(NSArray *)promises NS_SWIFT_UNAVAILABLE("");
-
-/**
- Wait until any of the given promises are fulfilled.
- If one of the promises is rejected, then the returned promise is rejected with same error.
- If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`,
- it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly.
-
- @param queue A queue to dispatch on.
- @param promises Promises to wait for.
- @return A new pending promise to be resolved with the same resolution as the first promise, among
-         the given ones, which was resolved.
- */
-+ (instancetype)onQueue:(dispatch_queue_t)queue race:(NSArray *)promises NS_REFINED_FOR_SWIFT;
-
-@end
-
-/**
- Convenience dot-syntax wrappers for `FBLPromise` `race` operators.
- Usage: FBLPromise.race(@[ ... ])
- */
-@interface FBLPromise<Value>(DotSyntax_RaceAdditions)
-
-+ (FBLPromise * (^)(NSArray *))race FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE("");
-+ (FBLPromise * (^)(dispatch_queue_t, NSArray *))raceOn FBL_PROMISES_DOT_SYNTAX
-    NS_SWIFT_UNAVAILABLE("");
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Recover.h b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Recover.h
deleted file mode 100644
index bb7df7e..0000000
--- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Recover.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- Copyright 2018 Google Inc. All rights reserved.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at:
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "FBLPromise.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface FBLPromise<Value>(RecoverAdditions)
-
-typedef id __nullable (^FBLPromiseRecoverWorkBlock)(NSError *error) NS_SWIFT_UNAVAILABLE("");
-
-/**
- Provides a new promise to recover in case the receiver gets rejected.
-
- @param recovery A block to handle the error that the receiver was rejected with.
- @return A new pending promise to use instead of the rejected one that gets resolved with resolution
-         returned from `recovery` block.
- */
-- (FBLPromise *)recover:(FBLPromiseRecoverWorkBlock)recovery NS_SWIFT_UNAVAILABLE("");
-
-/**
- Provides a new promise to recover in case the receiver gets rejected.
-
- @param queue A queue to dispatch on.
- @param recovery A block to handle the error that the receiver was rejected with.
- @return A new pending promise to use instead of the rejected one that gets resolved with resolution
-         returned from `recovery` block.
- */
-- (FBLPromise *)onQueue:(dispatch_queue_t)queue
-                recover:(FBLPromiseRecoverWorkBlock)recovery NS_REFINED_FOR_SWIFT;
-
-@end
-
-/**
- Convenience dot-syntax wrappers for `FBLPromise` `recover` operators.
- Usage: promise.recover(^id(NSError *error) {...})
- */
-@interface FBLPromise<Value>(DotSyntax_RecoverAdditions)
-
-- (FBLPromise * (^)(FBLPromiseRecoverWorkBlock))recover FBL_PROMISES_DOT_SYNTAX
-    NS_SWIFT_UNAVAILABLE("");
-- (FBLPromise * (^)(dispatch_queue_t, FBLPromiseRecoverWorkBlock))recoverOn FBL_PROMISES_DOT_SYNTAX
-    NS_SWIFT_UNAVAILABLE("");
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Reduce.h b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Reduce.h
deleted file mode 100644
index 5bb1eee..0000000
--- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Reduce.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/**
- Copyright 2018 Google Inc. All rights reserved.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at:
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "FBLPromise.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface FBLPromise<Value>(ReduceAdditions)
-
-typedef id __nullable (^FBLPromiseReducerBlock)(Value __nullable partial, id next)
-    NS_SWIFT_UNAVAILABLE("");
-
-/**
- Sequentially reduces a collection of values to a single promise using a given combining block
- and the value `self` resolves with as initial value.
-
- @param items An array of values to process in order.
- @param reducer A block to combine an accumulating value and an element of the sequence into
-                the new accumulating value or a promise resolved with it, to be used in the next
-                call of the `reducer` or returned to the caller.
- @return A new pending promise returned from the last `reducer` invocation.
-         Or `self` if `items` is empty.
- */
-- (FBLPromise *)reduce:(NSArray *)items
-               combine:(FBLPromiseReducerBlock)reducer NS_SWIFT_UNAVAILABLE("");
-
-/**
- Sequentially reduces a collection of values to a single promise using a given combining block
- and the value `self` resolves with as initial value.
-
- @param queue A queue to dispatch on.
- @param items An array of values to process in order.
- @param reducer A block to combine an accumulating value and an element of the sequence into
-                the new accumulating value or a promise resolved with it, to be used in the next
-                call of the `reducer` or returned to the caller.
- @return A new pending promise returned from the last `reducer` invocation.
-         Or `self` if `items` is empty.
- */
-- (FBLPromise *)onQueue:(dispatch_queue_t)queue
-                 reduce:(NSArray *)items
-                combine:(FBLPromiseReducerBlock)reducer NS_SWIFT_UNAVAILABLE("");
-
-@end
-
-/**
- Convenience dot-syntax wrappers for `FBLPromise` `reduce` operators.
- Usage: promise.reduce(values, ^id(id partial, id next) { ... })
- */
-@interface FBLPromise<Value>(DotSyntax_ReduceAdditions)
-
-- (FBLPromise * (^)(NSArray *, FBLPromiseReducerBlock))reduce FBL_PROMISES_DOT_SYNTAX
-    NS_SWIFT_UNAVAILABLE("");
-- (FBLPromise * (^)(dispatch_queue_t, NSArray *, FBLPromiseReducerBlock))reduceOn
-    FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE("");
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Retry.h b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Retry.h
deleted file mode 100644
index 98ef558..0000000
--- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Retry.h
+++ /dev/null
@@ -1,165 +0,0 @@
-/**
- Copyright 2018 Google Inc. All rights reserved.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at:
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "FBLPromise.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-/** The default number of retry attempts is 1. */
-FOUNDATION_EXTERN NSInteger const FBLPromiseRetryDefaultAttemptsCount NS_REFINED_FOR_SWIFT;
-
-/** The default delay interval before making a retry attempt is 1.0 second. */
-FOUNDATION_EXTERN NSTimeInterval const FBLPromiseRetryDefaultDelayInterval NS_REFINED_FOR_SWIFT;
-
-@interface FBLPromise<Value>(RetryAdditions)
-
-typedef id __nullable (^FBLPromiseRetryWorkBlock)(void) NS_SWIFT_UNAVAILABLE("");
-typedef BOOL (^FBLPromiseRetryPredicateBlock)(NSInteger, NSError *) NS_SWIFT_UNAVAILABLE("");
-
-/**
- Creates a pending promise that fulfills with the same value as the promise returned from `work`
- block, which executes asynchronously, or rejects with the same error after all retry attempts have
- been exhausted. Defaults to `FBLPromiseRetryDefaultAttemptsCount` attempt(s) on rejection where the
- `work` block is retried after a delay of `FBLPromiseRetryDefaultDelayInterval` second(s).
-
- @param work A block that executes asynchronously on the default queue and returns a value or an
-             error used to resolve the promise.
- @return A new pending promise that fulfills with the same value as the promise returned from `work`
-         block, or rejects with the same error after all retry attempts have been exhausted.
- */
-+ (FBLPromise *)retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE("");
-
-/**
- Creates a pending promise that fulfills with the same value as the promise returned from `work`
- block, which executes asynchronously on the given `queue`, or rejects with the same error after all
- retry attempts have been exhausted. Defaults to `FBLPromiseRetryDefaultAttemptsCount` attempt(s) on
- rejection where the `work` block is retried on the given `queue` after a delay of
- `FBLPromiseRetryDefaultDelayInterval` second(s).
-
- @param queue A queue to invoke the `work` block on.
- @param work A block that executes asynchronously on the given `queue` and returns a value or an
-             error used to resolve the promise.
- @return A new pending promise that fulfills with the same value as the promise returned from `work`
-         block, or rejects with the same error after all retry attempts have been exhausted.
- */
-+ (FBLPromise *)onQueue:(dispatch_queue_t)queue
-                  retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE("");
-
-/**
- Creates a pending promise that fulfills with the same value as the promise returned from `work`
- block, which executes asynchronously, or rejects with the same error after all retry attempts have
- been exhausted.
-
- @param count Max number of retry attempts. The `work` block will be executed once if the specified
-              count is less than or equal to zero.
- @param work A block that executes asynchronously on the default queue and returns a value or an
-             error used to resolve the promise.
- @return A new pending promise that fulfills with the same value as the promise returned from `work`
-         block, or rejects with the same error after all retry attempts have been exhausted.
- */
-+ (FBLPromise *)attempts:(NSInteger)count
-                   retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE("");
-
-/**
- Creates a pending promise that fulfills with the same value as the promise returned from `work`
- block, which executes asynchronously on the given `queue`, or rejects with the same error after all
- retry attempts have been exhausted.
-
- @param queue A queue to invoke the `work` block on.
- @param count Max number of retry attempts. The `work` block will be executed once if the specified
-              count is less than or equal to zero.
- @param work A block that executes asynchronously on the given `queue` and returns a value or an
-             error used to resolve the promise.
- @return A new pending promise that fulfills with the same value as the promise returned from `work`
-         block, or rejects with the same error after all retry attempts have been exhausted.
- */
-+ (FBLPromise *)onQueue:(dispatch_queue_t)queue
-               attempts:(NSInteger)count
-                  retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE("");
-
-/**
- Creates a pending promise that fulfills with the same value as the promise returned from `work`
- block, which executes asynchronously, or rejects with the same error after all retry attempts have
- been exhausted. On rejection, the `work` block is retried after the given delay `interval` and will
- continue to retry until the number of specified attempts have been exhausted or will bail early if
- the given condition is not met.
-
- @param count Max number of retry attempts. The `work` block will be executed once if the specified
-              count is less than or equal to zero.
- @param interval Time to wait before the next retry attempt.
- @param predicate Condition to check before the next retry attempt. The predicate block provides the
-                  the number of remaining retry attempts and the error that the promise was rejected
-                  with.
- @param work A block that executes asynchronously on the default queue and returns a value or an
-             error used to resolve the promise.
- @return A new pending promise that fulfills with the same value as the promise returned from `work`
-         block, or rejects with the same error after all retry attempts have been exhausted or if
-         the given condition is not met.
- */
-+ (FBLPromise *)attempts:(NSInteger)count
-                   delay:(NSTimeInterval)interval
-               condition:(nullable FBLPromiseRetryPredicateBlock)predicate
-                   retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE("");
-
-/**
- Creates a pending promise that fulfills with the same value as the promise returned from `work`
- block, which executes asynchronously on the given `queue`, or rejects with the same error after all
- retry attempts have been exhausted. On rejection, the `work` block is retried after the given
- delay `interval` and will continue to retry until the number of specified attempts have been
- exhausted or will bail early if the given condition is not met.
-
- @param queue A queue to invoke the `work` block on.
- @param count Max number of retry attempts. The `work` block will be executed once if the specified
-              count is less than or equal to zero.
- @param interval Time to wait before the next retry attempt.
- @param predicate Condition to check before the next retry attempt. The predicate block provides the
-                  the number of remaining retry attempts and the error that the promise was rejected
-                  with.
- @param work A block that executes asynchronously on the given `queue` and returns a value or an
-             error used to resolve the promise.
- @return A new pending promise that fulfills with the same value as the promise returned from `work`
-         block, or rejects with the same error after all retry attempts have been exhausted or if
-         the given condition is not met.
- */
-+ (FBLPromise *)onQueue:(dispatch_queue_t)queue
-               attempts:(NSInteger)count
-                  delay:(NSTimeInterval)interval
-              condition:(nullable FBLPromiseRetryPredicateBlock)predicate
-                  retry:(FBLPromiseRetryWorkBlock)work NS_REFINED_FOR_SWIFT;
-
-@end
-
-/**
- Convenience dot-syntax wrappers for `FBLPromise+Retry` operators.
- Usage: FBLPromise.retry(^id { ... })
- */
-@interface FBLPromise<Value>(DotSyntax_RetryAdditions)
-
-+ (FBLPromise * (^)(FBLPromiseRetryWorkBlock))retry FBL_PROMISES_DOT_SYNTAX
-    NS_SWIFT_UNAVAILABLE("");
-+ (FBLPromise * (^)(dispatch_queue_t, FBLPromiseRetryWorkBlock))retryOn FBL_PROMISES_DOT_SYNTAX
-    NS_SWIFT_UNAVAILABLE("");
-+ (FBLPromise * (^)(NSInteger, NSTimeInterval, FBLPromiseRetryPredicateBlock __nullable,
-                    FBLPromiseRetryWorkBlock))retryAgain FBL_PROMISES_DOT_SYNTAX
-    NS_SWIFT_UNAVAILABLE("");
-+ (FBLPromise * (^)(dispatch_queue_t, NSInteger, NSTimeInterval,
-                    FBLPromiseRetryPredicateBlock __nullable,
-                    FBLPromiseRetryWorkBlock))retryAgainOn FBL_PROMISES_DOT_SYNTAX
-    NS_SWIFT_UNAVAILABLE("");
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Testing.h b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Testing.h
deleted file mode 100644
index 07a65ec..0000000
--- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Testing.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- Copyright 2018 Google Inc. All rights reserved.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at:
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "FBLPromise.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-/**
- Waits for all scheduled promises blocks.
-
- @param timeout Maximum time to wait.
- @return YES if all promises blocks have completed before the timeout and NO otherwise.
- */
-FOUNDATION_EXTERN BOOL FBLWaitForPromisesWithTimeout(NSTimeInterval timeout) NS_REFINED_FOR_SWIFT;
-
-@interface FBLPromise<Value>(TestingAdditions)
-
-/**
- Dispatch group for promises that is typically used to wait for all scheduled blocks.
- */
-@property(class, nonatomic, readonly) dispatch_group_t dispatchGroup NS_REFINED_FOR_SWIFT;
-
-/**
- Properties to get the current state of the promise.
- */
-@property(nonatomic, readonly) BOOL isPending NS_REFINED_FOR_SWIFT;
-@property(nonatomic, readonly) BOOL isFulfilled NS_REFINED_FOR_SWIFT;
-@property(nonatomic, readonly) BOOL isRejected NS_REFINED_FOR_SWIFT;
-
-/**
- Set of arbitrary objects to keep strongly while the promise is pending.
- Becomes nil after the promise has been resolved.
- */
-@property(nonatomic, readonly, nullable) NSMutableSet *pendingObjects NS_REFINED_FOR_SWIFT;
-
-/**
- Value the promise was fulfilled with.
- Can be nil if the promise is still pending, was resolved with nil or after it has been rejected.
- */
-@property(nonatomic, readonly, nullable) Value value NS_REFINED_FOR_SWIFT;
-
-/**
- Error the promise was rejected with.
- Can be nil if the promise is still pending or after it has been fulfilled.
- */
-@property(nonatomic, readonly, nullable) NSError *error NS_REFINED_FOR_SWIFT;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Then.h b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Then.h
deleted file mode 100644
index 32027e6..0000000
--- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Then.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- Copyright 2018 Google Inc. All rights reserved.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at:
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "FBLPromise.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface FBLPromise<Value>(ThenAdditions)
-
-typedef id __nullable (^FBLPromiseThenWorkBlock)(Value __nullable value) NS_SWIFT_UNAVAILABLE("");
-
-/**
- Creates a pending promise which eventually gets resolved with resolution returned from `work`
- block: either value, error or another promise. The `work` block is executed asynchronously only
- when the receiver is fulfilled. If receiver is rejected, the returned promise is also rejected with
- the same error.
-
- @param work A block to handle the value that receiver was fulfilled with.
- @return A new pending promise to be resolved with resolution returned from the `work` block.
- */
-- (FBLPromise *)then:(FBLPromiseThenWorkBlock)work NS_SWIFT_UNAVAILABLE("");
-
-/**
- Creates a pending promise which eventually gets resolved with resolution returned from `work`
- block: either value, error or another promise. The `work` block is executed asynchronously when the
- receiver is fulfilled. If receiver is rejected, the returned promise is also rejected with the same
- error.
-
- @param queue A queue to invoke the `work` block on.
- @param work A block to handle the value that receiver was fulfilled with.
- @return A new pending promise to be resolved with resolution returned from the `work` block.
- */
-- (FBLPromise *)onQueue:(dispatch_queue_t)queue
-                   then:(FBLPromiseThenWorkBlock)work NS_REFINED_FOR_SWIFT;
-
-@end
-
-/**
- Convenience dot-syntax wrappers for `FBLPromise` `then` operators.
- Usage: promise.then(^id(id value) { ... })
- */
-@interface FBLPromise<Value>(DotSyntax_ThenAdditions)
-
-- (FBLPromise* (^)(FBLPromiseThenWorkBlock))then FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE("");
-- (FBLPromise* (^)(dispatch_queue_t, FBLPromiseThenWorkBlock))thenOn FBL_PROMISES_DOT_SYNTAX
-    NS_SWIFT_UNAVAILABLE("");
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Timeout.h b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Timeout.h
deleted file mode 100644
index 184ba16..0000000
--- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Timeout.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- Copyright 2018 Google Inc. All rights reserved.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at:
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "FBLPromise.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface FBLPromise<Value>(TimeoutAdditions)
-
-/**
- Waits for a promise with the specified `timeout`.
-
- @param interval Time to wait in seconds.
- @return A new pending promise that gets either resolved with same resolution as the receiver or
-         rejected with `FBLPromiseErrorCodeTimedOut` error code in `FBLPromiseErrorDomain`.
- */
-- (FBLPromise *)timeout:(NSTimeInterval)interval NS_SWIFT_UNAVAILABLE("");
-
-/**
- Waits for a promise with the specified `timeout`.
-
- @param queue A queue to dispatch on.
- @param interval Time to wait in seconds.
- @return A new pending promise that gets either resolved with same resolution as the receiver or
-         rejected with `FBLPromiseErrorCodeTimedOut` error code in `FBLPromiseErrorDomain`.
- */
-- (FBLPromise *)onQueue:(dispatch_queue_t)queue
-                timeout:(NSTimeInterval)interval NS_REFINED_FOR_SWIFT;
-
-@end
-
-/**
- Convenience dot-syntax wrappers for `FBLPromise` `timeout` operators.
- Usage: promise.timeout(...)
- */
-@interface FBLPromise<Value>(DotSyntax_TimeoutAdditions)
-
-- (FBLPromise* (^)(NSTimeInterval))timeout FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE("");
-- (FBLPromise* (^)(dispatch_queue_t, NSTimeInterval))timeoutOn FBL_PROMISES_DOT_SYNTAX
-    NS_SWIFT_UNAVAILABLE("");
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Validate.h b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Validate.h
deleted file mode 100644
index 9dfa2f1..0000000
--- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Validate.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- Copyright 2018 Google Inc. All rights reserved.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at:
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "FBLPromise.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface FBLPromise<Value>(ValidateAdditions)
-
-typedef BOOL (^FBLPromiseValidateWorkBlock)(Value __nullable value) NS_SWIFT_UNAVAILABLE("");
-
-/**
- Validates a fulfilled value or rejects the value if it can not be validated.
-
- @param predicate An expression to validate.
- @return A new pending promise that gets either resolved with same resolution as the receiver or
-         rejected with `FBLPromiseErrorCodeValidationFailure` error code in `FBLPromiseErrorDomain`.
- */
-- (FBLPromise *)validate:(FBLPromiseValidateWorkBlock)predicate NS_SWIFT_UNAVAILABLE("");
-
-/**
- Validates a fulfilled value or rejects the value if it can not be validated.
-
- @param queue A queue to dispatch on.
- @param predicate An expression to validate.
- @return A new pending promise that gets either resolved with same resolution as the receiver or
-         rejected with `FBLPromiseErrorCodeValidationFailure` error code in `FBLPromiseErrorDomain`.
- */
-- (FBLPromise *)onQueue:(dispatch_queue_t)queue
-               validate:(FBLPromiseValidateWorkBlock)predicate NS_REFINED_FOR_SWIFT;
-
-@end
-
-/**
- Convenience dot-syntax wrappers for `FBLPromise` `validate` operators.
- Usage: promise.validate(^BOOL(id value) { ... })
- */
-@interface FBLPromise<Value>(DotSyntax_ValidateAdditions)
-
-- (FBLPromise * (^)(FBLPromiseValidateWorkBlock))validate FBL_PROMISES_DOT_SYNTAX
-    NS_SWIFT_UNAVAILABLE("");
-- (FBLPromise * (^)(dispatch_queue_t, FBLPromiseValidateWorkBlock))validateOn
-    FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE("");
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Wrap.h b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Wrap.h
deleted file mode 100644
index 664e1bb..0000000
--- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Wrap.h
+++ /dev/null
@@ -1,316 +0,0 @@
-/**
- Copyright 2018 Google Inc. All rights reserved.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at:
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "FBLPromise.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-/**
- Different types of completion handlers available to be wrapped with promise.
- */
-typedef void (^FBLPromiseCompletion)(void) NS_SWIFT_UNAVAILABLE("");
-typedef void (^FBLPromiseObjectCompletion)(id __nullable) NS_SWIFT_UNAVAILABLE("");
-typedef void (^FBLPromiseErrorCompletion)(NSError* __nullable) NS_SWIFT_UNAVAILABLE("");
-typedef void (^FBLPromiseObjectOrErrorCompletion)(id __nullable, NSError* __nullable)
-    NS_SWIFT_UNAVAILABLE("");
-typedef void (^FBLPromiseErrorOrObjectCompletion)(NSError* __nullable, id __nullable)
-    NS_SWIFT_UNAVAILABLE("");
-typedef void (^FBLPromise2ObjectsOrErrorCompletion)(id __nullable, id __nullable,
-                                                    NSError* __nullable) NS_SWIFT_UNAVAILABLE("");
-typedef void (^FBLPromiseBoolCompletion)(BOOL) NS_SWIFT_UNAVAILABLE("");
-typedef void (^FBLPromiseBoolOrErrorCompletion)(BOOL, NSError* __nullable) NS_SWIFT_UNAVAILABLE("");
-typedef void (^FBLPromiseIntegerCompletion)(NSInteger) NS_SWIFT_UNAVAILABLE("");
-typedef void (^FBLPromiseIntegerOrErrorCompletion)(NSInteger, NSError* __nullable)
-    NS_SWIFT_UNAVAILABLE("");
-typedef void (^FBLPromiseDoubleCompletion)(double) NS_SWIFT_UNAVAILABLE("");
-typedef void (^FBLPromiseDoubleOrErrorCompletion)(double, NSError* __nullable)
-    NS_SWIFT_UNAVAILABLE("");
-
-/**
- Provides an easy way to convert methods that use common callback patterns into promises.
- */
-@interface FBLPromise<Value>(WrapAdditions)
-
-/**
- @param work A block to perform any operations needed to resolve the promise.
- @returns A promise that resolves with `nil` when completion handler is invoked.
- */
-+ (instancetype)wrapCompletion:(void (^)(FBLPromiseCompletion handler))work
-    NS_SWIFT_UNAVAILABLE("");
-
-/**
- @param queue A queue to invoke the `work` block on.
- @param work A block to perform any operations needed to resolve the promise.
- @returns A promise that resolves with `nil` when completion handler is invoked.
- */
-+ (instancetype)onQueue:(dispatch_queue_t)queue
-         wrapCompletion:(void (^)(FBLPromiseCompletion handler))work NS_SWIFT_UNAVAILABLE("");
-
-/**
- @param work A block to perform any operations needed to resolve the promise.
- @returns A promise that resolves with an object provided by completion handler.
- */
-+ (instancetype)wrapObjectCompletion:(void (^)(FBLPromiseObjectCompletion handler))work
-    NS_SWIFT_UNAVAILABLE("");
-
-/**
- @param queue A queue to invoke the `work` block on.
- @param work A block to perform any operations needed to resolve the promise.
- @returns A promise that resolves with an object provided by completion handler.
- */
-+ (instancetype)onQueue:(dispatch_queue_t)queue
-    wrapObjectCompletion:(void (^)(FBLPromiseObjectCompletion handler))work
-    NS_SWIFT_UNAVAILABLE("");
-
-/**
- @param work A block to perform any operations needed to resolve the promise.
- @returns A promise that resolves with an error provided by completion handler.
- If error is `nil`, fulfills with `nil`, otherwise rejects with the error.
- */
-+ (instancetype)wrapErrorCompletion:(void (^)(FBLPromiseErrorCompletion handler))work
-    NS_SWIFT_UNAVAILABLE("");
-
-/**
- @param queue A queue to invoke the `work` block on.
- @param work A block to perform any operations needed to resolve the promise.
- @returns A promise that resolves with an error provided by completion handler.
- If error is `nil`, fulfills with `nil`, otherwise rejects with the error.
- */
-+ (instancetype)onQueue:(dispatch_queue_t)queue
-    wrapErrorCompletion:(void (^)(FBLPromiseErrorCompletion handler))work NS_SWIFT_UNAVAILABLE("");
-
-/**
- @param work A block to perform any operations needed to resolve the promise.
- @returns A promise that resolves with an object provided by completion handler if error is `nil`.
- Otherwise, rejects with the error.
- */
-+ (instancetype)wrapObjectOrErrorCompletion:
-    (void (^)(FBLPromiseObjectOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE("");
-
-/**
- @param queue A queue to invoke the `work` block on.
- @param work A block to perform any operations needed to resolve the promise.
- @returns A promise that resolves with an object provided by completion handler if error is `nil`.
- Otherwise, rejects with the error.
- */
-+ (instancetype)onQueue:(dispatch_queue_t)queue
-    wrapObjectOrErrorCompletion:(void (^)(FBLPromiseObjectOrErrorCompletion handler))work
-    NS_SWIFT_UNAVAILABLE("");
-
-/**
- @param work A block to perform any operations needed to resolve the promise.
- @returns A promise that resolves with an error or object provided by completion handler. If error
- is not `nil`, rejects with the error.
- */
-+ (instancetype)wrapErrorOrObjectCompletion:
-    (void (^)(FBLPromiseErrorOrObjectCompletion handler))work NS_SWIFT_UNAVAILABLE("");
-
-/**
- @param queue A queue to invoke the `work` block on.
- @param work A block to perform any operations needed to resolve the promise.
- @returns A promise that resolves with an error or object provided by completion handler. If error
- is not `nil`, rejects with the error.
- */
-+ (instancetype)onQueue:(dispatch_queue_t)queue
-    wrapErrorOrObjectCompletion:(void (^)(FBLPromiseErrorOrObjectCompletion handler))work
-    NS_SWIFT_UNAVAILABLE("");
-
-/**
- @param work A block to perform any operations needed to resolve the promise.
- @returns A promise that resolves with an array of objects provided by completion handler in order
- if error is `nil`. Otherwise, rejects with the error.
- */
-+ (FBLPromise<NSArray*>*)wrap2ObjectsOrErrorCompletion:
-    (void (^)(FBLPromise2ObjectsOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE("");
-
-/**
- @param queue A queue to invoke the `work` block on.
- @param work A block to perform any operations needed to resolve the promise.
- @returns A promise that resolves with an array of objects provided by completion handler in order
- if error is `nil`. Otherwise, rejects with the error.
- */
-+ (FBLPromise<NSArray*>*)onQueue:(dispatch_queue_t)queue
-    wrap2ObjectsOrErrorCompletion:(void (^)(FBLPromise2ObjectsOrErrorCompletion handler))work
-    NS_SWIFT_UNAVAILABLE("");
-
-/**
- @param work A block to perform any operations needed to resolve the promise.
- @returns A promise that resolves with an `NSNumber` wrapping YES/NO.
- */
-+ (FBLPromise<NSNumber*>*)wrapBoolCompletion:(void (^)(FBLPromiseBoolCompletion handler))work
-    NS_SWIFT_UNAVAILABLE("");
-
-/**
- @param queue A queue to invoke the `work` block on.
- @param work A block to perform any operations needed to resolve the promise.
- @returns A promise that resolves with an `NSNumber` wrapping YES/NO.
- */
-+ (FBLPromise<NSNumber*>*)onQueue:(dispatch_queue_t)queue
-               wrapBoolCompletion:(void (^)(FBLPromiseBoolCompletion handler))work
-    NS_SWIFT_UNAVAILABLE("");
-
-/**
- @param work A block to perform any operations needed to resolve the promise.
- @returns A promise that resolves with an `NSNumber` wrapping YES/NO when error is `nil`.
- Otherwise rejects with the error.
- */
-+ (FBLPromise<NSNumber*>*)wrapBoolOrErrorCompletion:
-    (void (^)(FBLPromiseBoolOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE("");
-
-/**
- @param queue A queue to invoke the `work` block on.
- @param work A block to perform any operations needed to resolve the promise.
- @returns A promise that resolves with an `NSNumber` wrapping YES/NO when error is `nil`.
- Otherwise rejects with the error.
- */
-+ (FBLPromise<NSNumber*>*)onQueue:(dispatch_queue_t)queue
-        wrapBoolOrErrorCompletion:(void (^)(FBLPromiseBoolOrErrorCompletion handler))work
-    NS_SWIFT_UNAVAILABLE("");
-
-/**
- @param work A block to perform any operations needed to resolve the promise.
- @returns A promise that resolves with an `NSNumber` wrapping an integer.
- */
-+ (FBLPromise<NSNumber*>*)wrapIntegerCompletion:(void (^)(FBLPromiseIntegerCompletion handler))work
-    NS_SWIFT_UNAVAILABLE("");
-
-/**
- @param queue A queue to invoke the `work` block on.
- @param work A block to perform any operations needed to resolve the promise.
- @returns A promise that resolves with an `NSNumber` wrapping an integer.
- */
-+ (FBLPromise<NSNumber*>*)onQueue:(dispatch_queue_t)queue
-            wrapIntegerCompletion:(void (^)(FBLPromiseIntegerCompletion handler))work
-    NS_SWIFT_UNAVAILABLE("");
-
-/**
- @param work A block to perform any operations needed to resolve the promise.
- @returns A promise that resolves with an `NSNumber` wrapping an integer when error is `nil`.
- Otherwise rejects with the error.
- */
-+ (FBLPromise<NSNumber*>*)wrapIntegerOrErrorCompletion:
-    (void (^)(FBLPromiseIntegerOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE("");
-
-/**
- @param queue A queue to invoke the `work` block on.
- @param work A block to perform any operations needed to resolve the promise.
- @returns A promise that resolves with an `NSNumber` wrapping an integer when error is `nil`.
- Otherwise rejects with the error.
- */
-+ (FBLPromise<NSNumber*>*)onQueue:(dispatch_queue_t)queue
-     wrapIntegerOrErrorCompletion:(void (^)(FBLPromiseIntegerOrErrorCompletion handler))work
-    NS_SWIFT_UNAVAILABLE("");
-
-/**
- @param work A block to perform any operations needed to resolve the promise.
- @returns A promise that resolves with an `NSNumber` wrapping a double.
- */
-+ (FBLPromise<NSNumber*>*)wrapDoubleCompletion:(void (^)(FBLPromiseDoubleCompletion handler))work
-    NS_SWIFT_UNAVAILABLE("");
-
-/**
- @param queue A queue to invoke the `work` block on.
- @param work A block to perform any operations needed to resolve the promise.
- @returns A promise that resolves with an `NSNumber` wrapping a double.
- */
-+ (FBLPromise<NSNumber*>*)onQueue:(dispatch_queue_t)queue
-             wrapDoubleCompletion:(void (^)(FBLPromiseDoubleCompletion handler))work
-    NS_SWIFT_UNAVAILABLE("");
-
-/**
- @param work A block to perform any operations needed to resolve the promise.
- @returns A promise that resolves with an `NSNumber` wrapping a double when error is `nil`.
- Otherwise rejects with the error.
- */
-+ (FBLPromise<NSNumber*>*)wrapDoubleOrErrorCompletion:
-    (void (^)(FBLPromiseDoubleOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE("");
-
-/**
- @param queue A queue to invoke the `work` block on.
- @param work A block to perform any operations needed to resolve the promise.
- @returns A promise that resolves with an `NSNumber` wrapping a double when error is `nil`.
- Otherwise rejects with the error.
- */
-+ (FBLPromise<NSNumber*>*)onQueue:(dispatch_queue_t)queue
-      wrapDoubleOrErrorCompletion:(void (^)(FBLPromiseDoubleOrErrorCompletion handler))work
-    NS_SWIFT_UNAVAILABLE("");
-
-@end
-
-/**
- Convenience dot-syntax wrappers for `FBLPromise` `wrap` operators.
- Usage: FBLPromise.wrapCompletion(^(FBLPromiseCompletion handler) {...})
- */
-@interface FBLPromise<Value>(DotSyntax_WrapAdditions)
-
-+ (FBLPromise* (^)(void (^)(FBLPromiseCompletion)))wrapCompletion FBL_PROMISES_DOT_SYNTAX
-    NS_SWIFT_UNAVAILABLE("");
-+ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromiseCompletion)))wrapCompletionOn
-    FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE("");
-+ (FBLPromise* (^)(void (^)(FBLPromiseObjectCompletion)))wrapObjectCompletion
-    FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE("");
-+ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromiseObjectCompletion)))wrapObjectCompletionOn
-    FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE("");
-+ (FBLPromise* (^)(void (^)(FBLPromiseErrorCompletion)))wrapErrorCompletion FBL_PROMISES_DOT_SYNTAX
-    NS_SWIFT_UNAVAILABLE("");
-+ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromiseErrorCompletion)))wrapErrorCompletionOn
-    FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE("");
-+ (FBLPromise* (^)(void (^)(FBLPromiseObjectOrErrorCompletion)))wrapObjectOrErrorCompletion
-    FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE("");
-+ (FBLPromise* (^)(dispatch_queue_t,
-                   void (^)(FBLPromiseObjectOrErrorCompletion)))wrapObjectOrErrorCompletionOn
-    FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE("");
-+ (FBLPromise* (^)(void (^)(FBLPromiseErrorOrObjectCompletion)))wrapErrorOrObjectCompletion
-    FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE("");
-+ (FBLPromise* (^)(dispatch_queue_t,
-                   void (^)(FBLPromiseErrorOrObjectCompletion)))wrapErrorOrObjectCompletionOn
-    FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE("");
-+ (FBLPromise<NSArray*>* (^)(void (^)(FBLPromise2ObjectsOrErrorCompletion)))
-    wrap2ObjectsOrErrorCompletion FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE("");
-+ (FBLPromise<NSArray*>* (^)(dispatch_queue_t, void (^)(FBLPromise2ObjectsOrErrorCompletion)))
-    wrap2ObjectsOrErrorCompletionOn FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE("");
-+ (FBLPromise<NSNumber*>* (^)(void (^)(FBLPromiseBoolCompletion)))wrapBoolCompletion
-    FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE("");
-+ (FBLPromise<NSNumber*>* (^)(dispatch_queue_t,
-                              void (^)(FBLPromiseBoolCompletion)))wrapBoolCompletionOn
-    FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE("");
-+ (FBLPromise<NSNumber*>* (^)(void (^)(FBLPromiseBoolOrErrorCompletion)))wrapBoolOrErrorCompletion
-    FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE("");
-+ (FBLPromise<NSNumber*>* (^)(dispatch_queue_t,
-                              void (^)(FBLPromiseBoolOrErrorCompletion)))wrapBoolOrErrorCompletionOn
-    FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE("");
-+ (FBLPromise<NSNumber*>* (^)(void (^)(FBLPromiseIntegerCompletion)))wrapIntegerCompletion
-    FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE("");
-+ (FBLPromise<NSNumber*>* (^)(dispatch_queue_t,
-                              void (^)(FBLPromiseIntegerCompletion)))wrapIntegerCompletionOn
-    FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE("");
-+ (FBLPromise<NSNumber*>* (^)(void (^)(FBLPromiseIntegerOrErrorCompletion)))
-    wrapIntegerOrErrorCompletion FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE("");
-+ (FBLPromise<NSNumber*>* (^)(dispatch_queue_t, void (^)(FBLPromiseIntegerOrErrorCompletion)))
-    wrapIntegerOrErrorCompletionOn FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE("");
-+ (FBLPromise<NSNumber*>* (^)(void (^)(FBLPromiseDoubleCompletion)))wrapDoubleCompletion
-    FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE("");
-+ (FBLPromise<NSNumber*>* (^)(dispatch_queue_t,
-                              void (^)(FBLPromiseDoubleCompletion)))wrapDoubleCompletionOn
-    FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE("");
-+ (FBLPromise<NSNumber*>* (^)(void (^)(FBLPromiseDoubleOrErrorCompletion)))
-    wrapDoubleOrErrorCompletion FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE("");
-+ (FBLPromise<NSNumber*>* (^)(dispatch_queue_t, void (^)(FBLPromiseDoubleOrErrorCompletion)))
-    wrapDoubleOrErrorCompletionOn FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE("");
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise.h b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise.h
deleted file mode 100644
index cec6336..0000000
--- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/**
- Copyright 2018 Google Inc. All rights reserved.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at:
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "FBLPromiseError.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-/**
- Promises synchronization construct in Objective-C.
- */
-@interface FBLPromise<__covariant Value> : NSObject
-
-/**
- Default dispatch queue used for `FBLPromise`, which is `main` if a queue is not specified.
- */
-@property(class) dispatch_queue_t defaultDispatchQueue NS_REFINED_FOR_SWIFT;
-
-/**
- Creates a pending promise.
- */
-+ (instancetype)pendingPromise NS_REFINED_FOR_SWIFT;
-
-/**
- Creates a resolved promise.
-
- @param resolution An object to resolve the promise with: either a value or an error.
- @return A new resolved promise.
- */
-+ (instancetype)resolvedWith:(nullable id)resolution NS_REFINED_FOR_SWIFT;
-
-/**
- Synchronously fulfills the promise with a value.
-
- @param value An arbitrary value to fulfill the promise with, including `nil`.
- */
-- (void)fulfill:(nullable Value)value NS_REFINED_FOR_SWIFT;
-
-/**
- Synchronously rejects the promise with an error.
-
- @param error An error to reject the promise with.
- */
-- (void)reject:(NSError *)error NS_REFINED_FOR_SWIFT;
-
-+ (instancetype)new NS_UNAVAILABLE;
-- (instancetype)init NS_UNAVAILABLE;
-
-@end
-
-#ifdef FBL_PROMISES_DOT_SYNTAX_IS_DEPRECATED
-#define FBL_PROMISES_DOT_SYNTAX __attribute__((deprecated))
-#else
-#define FBL_PROMISES_DOT_SYNTAX
-#endif
-
-@interface FBLPromise<Value>(DotSyntaxAdditions)
-
-/**
- Convenience dot-syntax wrappers for FBLPromise.
- Usage: FBLPromise.pending()
-        FBLPromise.resolved(value)
-
- */
-+ (instancetype (^)(void))pending FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE("");
-+ (instancetype (^)(id __nullable))resolved FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE("");
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromiseError.h b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromiseError.h
deleted file mode 100644
index d37af53..0000000
--- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromiseError.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- Copyright 2018 Google Inc. All rights reserved.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at:
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-FOUNDATION_EXTERN NSErrorDomain const FBLPromiseErrorDomain NS_REFINED_FOR_SWIFT;
-
-/**
- Possible error codes in `FBLPromiseErrorDomain`.
- */
-typedef NS_ENUM(NSInteger, FBLPromiseErrorCode) {
-  /** Promise failed to resolve in time. */
-  FBLPromiseErrorCodeTimedOut = 1,
-  /** Validation predicate returned false. */
-  FBLPromiseErrorCodeValidationFailure = 2,
-} NS_REFINED_FOR_SWIFT;
-
-NS_INLINE BOOL FBLPromiseErrorIsTimedOut(NSError *error) NS_SWIFT_UNAVAILABLE("") {
-  return error.domain == FBLPromiseErrorDomain &&
-         error.code == FBLPromiseErrorCodeTimedOut;
-}
-
-NS_INLINE BOOL FBLPromiseErrorIsValidationFailure(NSError *error) NS_SWIFT_UNAVAILABLE("") {
-  return error.domain == FBLPromiseErrorDomain &&
-         error.code == FBLPromiseErrorCodeValidationFailure;
-}
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromisePrivate.h b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromisePrivate.h
deleted file mode 100644
index 7a132f2..0000000
--- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromisePrivate.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- Copyright 2018 Google Inc. All rights reserved.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at:
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "FBLPromise+Testing.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-/**
- Miscellaneous low-level private interfaces available to extend standard FBLPromise functionality.
- */
-@interface FBLPromise<Value>()
-
-typedef void (^FBLPromiseOnFulfillBlock)(Value __nullable value) NS_SWIFT_UNAVAILABLE("");
-typedef void (^FBLPromiseOnRejectBlock)(NSError *error) NS_SWIFT_UNAVAILABLE("");
-typedef id __nullable (^__nullable FBLPromiseChainedFulfillBlock)(Value __nullable value)
-    NS_SWIFT_UNAVAILABLE("");
-typedef id __nullable (^__nullable FBLPromiseChainedRejectBlock)(NSError *error)
-    NS_SWIFT_UNAVAILABLE("");
-
-/**
- Creates a pending promise.
- */
-- (instancetype)initPending NS_SWIFT_UNAVAILABLE("");
-
-/**
- Creates a resolved promise.
-
- @param resolution An object to resolve the promise with: either a value or an error.
- @return A new resolved promise.
- */
-- (instancetype)initWithResolution:(nullable id)resolution NS_SWIFT_UNAVAILABLE("");
-
-/**
- Invokes `fulfill` and `reject` blocks on `queue` when the receiver gets either fulfilled or
- rejected respectively.
- */
-- (void)observeOnQueue:(dispatch_queue_t)queue
-               fulfill:(FBLPromiseOnFulfillBlock)onFulfill
-                reject:(FBLPromiseOnRejectBlock)onReject NS_SWIFT_UNAVAILABLE("");
-
-/**
- Returns a new promise which gets resolved with the return value of `chainedFulfill` or
- `chainedReject` blocks respectively. The blocks are invoked when the receiver gets either
- fulfilled or rejected. If `nil` is passed to either block arg, the returned promise is resolved
- with the same resolution as the receiver.
- */
-- (FBLPromise *)chainOnQueue:(dispatch_queue_t)queue
-              chainedFulfill:(FBLPromiseChainedFulfillBlock)chainedFulfill
-               chainedReject:(FBLPromiseChainedRejectBlock)chainedReject NS_SWIFT_UNAVAILABLE("");
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromises.h b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromises.h
deleted file mode 100644
index 2d90bad..0000000
--- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromises.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- Copyright 2018 Google Inc. All rights reserved.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at:
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "FBLPromise+All.h"
-#import "FBLPromise+Always.h"
-#import "FBLPromise+Any.h"
-#import "FBLPromise+Async.h"
-#import "FBLPromise+Await.h"
-#import "FBLPromise+Catch.h"
-#import "FBLPromise+Delay.h"
-#import "FBLPromise+Do.h"
-#import "FBLPromise+Race.h"
-#import "FBLPromise+Recover.h"
-#import "FBLPromise+Reduce.h"
-#import "FBLPromise+Retry.h"
-#import "FBLPromise+Then.h"
-#import "FBLPromise+Timeout.h"
-#import "FBLPromise+Validate.h"
-#import "FBLPromise+Wrap.h"
diff --git a/assign5/openTok/Pods/Target Support Files/Firebase/Firebase.debug.xcconfig b/assign5/openTok/Pods/Target Support Files/Firebase/Firebase.debug.xcconfig
deleted file mode 100644
index c4452f9..0000000
--- a/assign5/openTok/Pods/Target Support Files/Firebase/Firebase.debug.xcconfig	
+++ /dev/null
@@ -1,11 +0,0 @@
-CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Firebase
-FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseDatabase" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/leveldb-library" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb"
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Firebase" "${PODS_ROOT}/Headers/Public"
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_ROOT = ${SRCROOT}
-PODS_TARGET_SRCROOT = ${PODS_ROOT}/Firebase
-PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
-SKIP_INSTALL = YES
-USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
diff --git a/assign5/openTok/Pods/Target Support Files/Firebase/Firebase.release.xcconfig b/assign5/openTok/Pods/Target Support Files/Firebase/Firebase.release.xcconfig
deleted file mode 100644
index c4452f9..0000000
--- a/assign5/openTok/Pods/Target Support Files/Firebase/Firebase.release.xcconfig	
+++ /dev/null
@@ -1,11 +0,0 @@
-CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Firebase
-FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseDatabase" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/leveldb-library" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb"
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Firebase" "${PODS_ROOT}/Headers/Public"
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_ROOT = ${SRCROOT}
-PODS_TARGET_SRCROOT = ${PODS_ROOT}/Firebase
-PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
-SKIP_INSTALL = YES
-USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
diff --git a/assign5/openTok/Pods/Target Support Files/FirebaseAuthInterop/FirebaseAuthInterop.debug.xcconfig b/assign5/openTok/Pods/Target Support Files/FirebaseAuthInterop/FirebaseAuthInterop.debug.xcconfig
deleted file mode 100644
index 316604a..0000000
--- a/assign5/openTok/Pods/Target Support Files/FirebaseAuthInterop/FirebaseAuthInterop.debug.xcconfig	
+++ /dev/null
@@ -1,10 +0,0 @@
-CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuthInterop
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/FirebaseAuthInterop" "${PODS_ROOT}/Headers/Public"
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_ROOT = ${SRCROOT}
-PODS_TARGET_SRCROOT = ${PODS_ROOT}/FirebaseAuthInterop
-PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
-SKIP_INSTALL = YES
-USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
diff --git a/assign5/openTok/Pods/Target Support Files/FirebaseAuthInterop/FirebaseAuthInterop.release.xcconfig b/assign5/openTok/Pods/Target Support Files/FirebaseAuthInterop/FirebaseAuthInterop.release.xcconfig
deleted file mode 100644
index 316604a..0000000
--- a/assign5/openTok/Pods/Target Support Files/FirebaseAuthInterop/FirebaseAuthInterop.release.xcconfig	
+++ /dev/null
@@ -1,10 +0,0 @@
-CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuthInterop
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/FirebaseAuthInterop" "${PODS_ROOT}/Headers/Public"
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_ROOT = ${SRCROOT}
-PODS_TARGET_SRCROOT = ${PODS_ROOT}/FirebaseAuthInterop
-PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
-SKIP_INSTALL = YES
-USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
diff --git a/assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore-Info.plist b/assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore-Info.plist
deleted file mode 100644
index 84a1892..0000000
--- a/assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore-Info.plist	
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-  <key>CFBundleDevelopmentRegion</key>
-  <string>en</string>
-  <key>CFBundleExecutable</key>
-  <string>${EXECUTABLE_NAME}</string>
-  <key>CFBundleIdentifier</key>
-  <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
-  <key>CFBundleInfoDictionaryVersion</key>
-  <string>6.0</string>
-  <key>CFBundleName</key>
-  <string>${PRODUCT_NAME}</string>
-  <key>CFBundlePackageType</key>
-  <string>FMWK</string>
-  <key>CFBundleShortVersionString</key>
-  <string>6.6.7</string>
-  <key>CFBundleSignature</key>
-  <string>????</string>
-  <key>CFBundleVersion</key>
-  <string>${CURRENT_PROJECT_VERSION}</string>
-  <key>NSPrincipalClass</key>
-  <string></string>
-</dict>
-</plist>
diff --git a/assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore-dummy.m b/assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore-dummy.m
deleted file mode 100644
index 4f1eb27..0000000
--- a/assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore-dummy.m	
+++ /dev/null
@@ -1,5 +0,0 @@
-#import <Foundation/Foundation.h>
-@interface PodsDummy_FirebaseCore : NSObject
-@end
-@implementation PodsDummy_FirebaseCore
-@end
diff --git a/assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore-umbrella.h b/assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore-umbrella.h
deleted file mode 100644
index 102aecb..0000000
--- a/assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore-umbrella.h	
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifdef __OBJC__
-#import <UIKit/UIKit.h>
-#else
-#ifndef FOUNDATION_EXPORT
-#if defined(__cplusplus)
-#define FOUNDATION_EXPORT extern "C"
-#else
-#define FOUNDATION_EXPORT extern
-#endif
-#endif
-#endif
-
-#import "FIRApp.h"
-#import "FIRConfiguration.h"
-#import "FirebaseCore.h"
-#import "FIRLoggerLevel.h"
-#import "FIROptions.h"
-
-FOUNDATION_EXPORT double FirebaseCoreVersionNumber;
-FOUNDATION_EXPORT const unsigned char FirebaseCoreVersionString[];
-
diff --git a/assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore.debug.xcconfig b/assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore.debug.xcconfig
deleted file mode 100644
index a3c20de..0000000
--- a/assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore.debug.xcconfig	
+++ /dev/null
@@ -1,13 +0,0 @@
-CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore
-FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb"
-GCC_C_LANGUAGE_STANDARD = c99
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 FIRCore_VERSION=6.6.7 Firebase_VERSION=6.23.0
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_TARGET_SRCROOT}"
-OTHER_CFLAGS = $(inherited) -fno-autolink
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_ROOT = ${SRCROOT}
-PODS_TARGET_SRCROOT = ${PODS_ROOT}/FirebaseCore
-PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
-SKIP_INSTALL = YES
-USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
diff --git a/assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore.modulemap b/assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore.modulemap
deleted file mode 100644
index 4c38b87..0000000
--- a/assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore.modulemap	
+++ /dev/null
@@ -1,6 +0,0 @@
-framework module FirebaseCore {
-  umbrella header "FirebaseCore-umbrella.h"
-
-  export *
-  module * { export * }
-}
diff --git a/assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore.release.xcconfig b/assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore.release.xcconfig
deleted file mode 100644
index a3c20de..0000000
--- a/assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore.release.xcconfig	
+++ /dev/null
@@ -1,13 +0,0 @@
-CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore
-FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb"
-GCC_C_LANGUAGE_STANDARD = c99
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 FIRCore_VERSION=6.6.7 Firebase_VERSION=6.23.0
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_TARGET_SRCROOT}"
-OTHER_CFLAGS = $(inherited) -fno-autolink
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_ROOT = ${SRCROOT}
-PODS_TARGET_SRCROOT = ${PODS_ROOT}/FirebaseCore
-PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
-SKIP_INSTALL = YES
-USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
diff --git a/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-Info.plist b/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-Info.plist
deleted file mode 100644
index 2e6c90d..0000000
--- a/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-Info.plist	
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-  <key>CFBundleDevelopmentRegion</key>
-  <string>en</string>
-  <key>CFBundleExecutable</key>
-  <string>${EXECUTABLE_NAME}</string>
-  <key>CFBundleIdentifier</key>
-  <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
-  <key>CFBundleInfoDictionaryVersion</key>
-  <string>6.0</string>
-  <key>CFBundleName</key>
-  <string>${PRODUCT_NAME}</string>
-  <key>CFBundlePackageType</key>
-  <string>FMWK</string>
-  <key>CFBundleShortVersionString</key>
-  <string>1.2.4</string>
-  <key>CFBundleSignature</key>
-  <string>????</string>
-  <key>CFBundleVersion</key>
-  <string>${CURRENT_PROJECT_VERSION}</string>
-  <key>NSPrincipalClass</key>
-  <string></string>
-</dict>
-</plist>
diff --git a/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-dummy.m b/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-dummy.m
deleted file mode 100644
index 224d263..0000000
--- a/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-dummy.m	
+++ /dev/null
@@ -1,5 +0,0 @@
-#import <Foundation/Foundation.h>
-@interface PodsDummy_FirebaseCoreDiagnostics : NSObject
-@end
-@implementation PodsDummy_FirebaseCoreDiagnostics
-@end
diff --git a/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-umbrella.h b/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-umbrella.h
deleted file mode 100644
index d6c0706..0000000
--- a/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-umbrella.h	
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifdef __OBJC__
-#import <UIKit/UIKit.h>
-#else
-#ifndef FOUNDATION_EXPORT
-#if defined(__cplusplus)
-#define FOUNDATION_EXPORT extern "C"
-#else
-#define FOUNDATION_EXPORT extern
-#endif
-#endif
-#endif
-
-#import "firebasecore.nanopb.h"
-
-FOUNDATION_EXPORT double FirebaseCoreDiagnosticsVersionNumber;
-FOUNDATION_EXPORT const unsigned char FirebaseCoreDiagnosticsVersionString[];
-
diff --git a/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.debug.xcconfig b/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.debug.xcconfig
deleted file mode 100644
index aab1b33..0000000
--- a/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.debug.xcconfig	
+++ /dev/null
@@ -1,14 +0,0 @@
-CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES
-CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics
-FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb"
-GCC_C_LANGUAGE_STANDARD = c99
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1
-GCC_TREAT_WARNINGS_AS_ERRORS = YES
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_TARGET_SRCROOT}/Firebase/CoreDiagnostics/"
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_ROOT = ${SRCROOT}
-PODS_TARGET_SRCROOT = ${PODS_ROOT}/FirebaseCoreDiagnostics
-PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
-SKIP_INSTALL = YES
-USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
diff --git a/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.modulemap b/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.modulemap
deleted file mode 100644
index d9cad8b..0000000
--- a/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.modulemap	
+++ /dev/null
@@ -1,6 +0,0 @@
-framework module FirebaseCoreDiagnostics {
-  umbrella header "FirebaseCoreDiagnostics-umbrella.h"
-
-  export *
-  module * { export * }
-}
diff --git a/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.release.xcconfig b/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.release.xcconfig
deleted file mode 100644
index aab1b33..0000000
--- a/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.release.xcconfig	
+++ /dev/null
@@ -1,14 +0,0 @@
-CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES
-CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics
-FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb"
-GCC_C_LANGUAGE_STANDARD = c99
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1
-GCC_TREAT_WARNINGS_AS_ERRORS = YES
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_TARGET_SRCROOT}/Firebase/CoreDiagnostics/"
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_ROOT = ${SRCROOT}
-PODS_TARGET_SRCROOT = ${PODS_ROOT}/FirebaseCoreDiagnostics
-PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
-SKIP_INSTALL = YES
-USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
diff --git a/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnosticsInterop/FirebaseCoreDiagnosticsInterop.debug.xcconfig b/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnosticsInterop/FirebaseCoreDiagnosticsInterop.debug.xcconfig
deleted file mode 100644
index 66fd960..0000000
--- a/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnosticsInterop/FirebaseCoreDiagnosticsInterop.debug.xcconfig	
+++ /dev/null
@@ -1,10 +0,0 @@
-CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnosticsInterop
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/FirebaseCoreDiagnosticsInterop" "${PODS_ROOT}/Headers/Public"
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_ROOT = ${SRCROOT}
-PODS_TARGET_SRCROOT = ${PODS_ROOT}/FirebaseCoreDiagnosticsInterop
-PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
-SKIP_INSTALL = YES
-USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
diff --git a/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnosticsInterop/FirebaseCoreDiagnosticsInterop.release.xcconfig b/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnosticsInterop/FirebaseCoreDiagnosticsInterop.release.xcconfig
deleted file mode 100644
index 66fd960..0000000
--- a/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnosticsInterop/FirebaseCoreDiagnosticsInterop.release.xcconfig	
+++ /dev/null
@@ -1,10 +0,0 @@
-CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnosticsInterop
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/FirebaseCoreDiagnosticsInterop" "${PODS_ROOT}/Headers/Public"
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_ROOT = ${SRCROOT}
-PODS_TARGET_SRCROOT = ${PODS_ROOT}/FirebaseCoreDiagnosticsInterop
-PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
-SKIP_INSTALL = YES
-USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
diff --git a/assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase-Info.plist b/assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase-Info.plist
deleted file mode 100644
index 45024a7..0000000
--- a/assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase-Info.plist	
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-  <key>CFBundleDevelopmentRegion</key>
-  <string>en</string>
-  <key>CFBundleExecutable</key>
-  <string>${EXECUTABLE_NAME}</string>
-  <key>CFBundleIdentifier</key>
-  <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
-  <key>CFBundleInfoDictionaryVersion</key>
-  <string>6.0</string>
-  <key>CFBundleName</key>
-  <string>${PRODUCT_NAME}</string>
-  <key>CFBundlePackageType</key>
-  <string>FMWK</string>
-  <key>CFBundleShortVersionString</key>
-  <string>6.2.0</string>
-  <key>CFBundleSignature</key>
-  <string>????</string>
-  <key>CFBundleVersion</key>
-  <string>${CURRENT_PROJECT_VERSION}</string>
-  <key>NSPrincipalClass</key>
-  <string></string>
-</dict>
-</plist>
diff --git a/assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase-dummy.m b/assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase-dummy.m
deleted file mode 100644
index 40813e7..0000000
--- a/assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase-dummy.m	
+++ /dev/null
@@ -1,5 +0,0 @@
-#import <Foundation/Foundation.h>
-@interface PodsDummy_FirebaseDatabase : NSObject
-@end
-@implementation PodsDummy_FirebaseDatabase
-@end
diff --git a/assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase-umbrella.h b/assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase-umbrella.h
deleted file mode 100644
index b9b40ff..0000000
--- a/assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase-umbrella.h	
+++ /dev/null
@@ -1,25 +0,0 @@
-#ifdef __OBJC__
-#import <UIKit/UIKit.h>
-#else
-#ifndef FOUNDATION_EXPORT
-#if defined(__cplusplus)
-#define FOUNDATION_EXPORT extern "C"
-#else
-#define FOUNDATION_EXPORT extern
-#endif
-#endif
-#endif
-
-#import "FIRDatabase.h"
-#import "FIRDatabaseQuery.h"
-#import "FIRDatabaseReference.h"
-#import "FIRDataEventType.h"
-#import "FIRDataSnapshot.h"
-#import "FirebaseDatabase.h"
-#import "FIRMutableData.h"
-#import "FIRServerValue.h"
-#import "FIRTransactionResult.h"
-
-FOUNDATION_EXPORT double FirebaseDatabaseVersionNumber;
-FOUNDATION_EXPORT const unsigned char FirebaseDatabaseVersionString[];
-
diff --git a/assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase.debug.xcconfig b/assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase.debug.xcconfig
deleted file mode 100644
index fc10939..0000000
--- a/assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase.debug.xcconfig	
+++ /dev/null
@@ -1,12 +0,0 @@
-CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseDatabase
-FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/leveldb-library" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb"
-GCC_C_LANGUAGE_STANDARD = c99
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 FIRDatabase_VERSION=6.2.0
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public"
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_ROOT = ${SRCROOT}
-PODS_TARGET_SRCROOT = ${PODS_ROOT}/FirebaseDatabase
-PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
-SKIP_INSTALL = YES
-USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
diff --git a/assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase.modulemap b/assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase.modulemap
deleted file mode 100644
index 7424a95..0000000
--- a/assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase.modulemap	
+++ /dev/null
@@ -1,6 +0,0 @@
-framework module FirebaseDatabase {
-  umbrella header "FirebaseDatabase-umbrella.h"
-
-  export *
-  module * { export * }
-}
diff --git a/assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase.release.xcconfig b/assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase.release.xcconfig
deleted file mode 100644
index fc10939..0000000
--- a/assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase.release.xcconfig	
+++ /dev/null
@@ -1,12 +0,0 @@
-CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseDatabase
-FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/leveldb-library" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb"
-GCC_C_LANGUAGE_STANDARD = c99
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 FIRDatabase_VERSION=6.2.0
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public"
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_ROOT = ${SRCROOT}
-PODS_TARGET_SRCROOT = ${PODS_ROOT}/FirebaseDatabase
-PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
-SKIP_INSTALL = YES
-USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
diff --git a/assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-Info.plist b/assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-Info.plist
deleted file mode 100644
index e92eb78..0000000
--- a/assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-Info.plist	
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-  <key>CFBundleDevelopmentRegion</key>
-  <string>en</string>
-  <key>CFBundleExecutable</key>
-  <string>${EXECUTABLE_NAME}</string>
-  <key>CFBundleIdentifier</key>
-  <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
-  <key>CFBundleInfoDictionaryVersion</key>
-  <string>6.0</string>
-  <key>CFBundleName</key>
-  <string>${PRODUCT_NAME}</string>
-  <key>CFBundlePackageType</key>
-  <string>FMWK</string>
-  <key>CFBundleShortVersionString</key>
-  <string>6.0.0</string>
-  <key>CFBundleSignature</key>
-  <string>????</string>
-  <key>CFBundleVersion</key>
-  <string>${CURRENT_PROJECT_VERSION}</string>
-  <key>NSPrincipalClass</key>
-  <string></string>
-</dict>
-</plist>
diff --git a/assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-dummy.m b/assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-dummy.m
deleted file mode 100644
index 9a08ec3..0000000
--- a/assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-dummy.m	
+++ /dev/null
@@ -1,5 +0,0 @@
-#import <Foundation/Foundation.h>
-@interface PodsDummy_GoogleDataTransport : NSObject
-@end
-@implementation PodsDummy_GoogleDataTransport
-@end
diff --git a/assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-umbrella.h b/assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-umbrella.h
deleted file mode 100644
index eb436e1..0000000
--- a/assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-umbrella.h	
+++ /dev/null
@@ -1,33 +0,0 @@
-#ifdef __OBJC__
-#import <UIKit/UIKit.h>
-#else
-#ifndef FOUNDATION_EXPORT
-#if defined(__cplusplus)
-#define FOUNDATION_EXPORT extern "C"
-#else
-#define FOUNDATION_EXPORT extern
-#endif
-#endif
-#endif
-
-#import "GDTCORAssert.h"
-#import "GDTCORClock.h"
-#import "GDTCORConsoleLogger.h"
-#import "GDTCOREvent.h"
-#import "GDTCOREventDataObject.h"
-#import "GDTCOREventTransformer.h"
-#import "GDTCORLifecycle.h"
-#import "GDTCORPlatform.h"
-#import "GDTCORPrioritizer.h"
-#import "GDTCORReachability.h"
-#import "GDTCORRegistrar.h"
-#import "GDTCORStorageProtocol.h"
-#import "GDTCORTargets.h"
-#import "GDTCORTransport.h"
-#import "GDTCORUploader.h"
-#import "GDTCORUploadPackage.h"
-#import "GoogleDataTransport.h"
-
-FOUNDATION_EXPORT double GoogleDataTransportVersionNumber;
-FOUNDATION_EXPORT const unsigned char GoogleDataTransportVersionString[];
-
diff --git a/assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.debug.xcconfig b/assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.debug.xcconfig
deleted file mode 100644
index dc81c5b..0000000
--- a/assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.debug.xcconfig	
+++ /dev/null
@@ -1,13 +0,0 @@
-CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES
-CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport
-GCC_C_LANGUAGE_STANDARD = c99
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 GDTCOR_VERSION=6.0.0
-GCC_TREAT_WARNINGS_AS_ERRORS = YES
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}/GoogleDataTransport/"
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_ROOT = ${SRCROOT}
-PODS_TARGET_SRCROOT = ${PODS_ROOT}/GoogleDataTransport
-PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
-SKIP_INSTALL = YES
-USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
diff --git a/assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.modulemap b/assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.modulemap
deleted file mode 100644
index 8a67414..0000000
--- a/assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.modulemap	
+++ /dev/null
@@ -1,6 +0,0 @@
-framework module GoogleDataTransport {
-  umbrella header "GoogleDataTransport-umbrella.h"
-
-  export *
-  module * { export * }
-}
diff --git a/assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.release.xcconfig b/assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.release.xcconfig
deleted file mode 100644
index dc81c5b..0000000
--- a/assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.release.xcconfig	
+++ /dev/null
@@ -1,13 +0,0 @@
-CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES
-CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport
-GCC_C_LANGUAGE_STANDARD = c99
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 GDTCOR_VERSION=6.0.0
-GCC_TREAT_WARNINGS_AS_ERRORS = YES
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}/GoogleDataTransport/"
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_ROOT = ${SRCROOT}
-PODS_TARGET_SRCROOT = ${PODS_ROOT}/GoogleDataTransport
-PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
-SKIP_INSTALL = YES
-USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
diff --git a/assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-Info.plist b/assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-Info.plist
deleted file mode 100644
index 4522675..0000000
--- a/assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-Info.plist	
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-  <key>CFBundleDevelopmentRegion</key>
-  <string>en</string>
-  <key>CFBundleExecutable</key>
-  <string>${EXECUTABLE_NAME}</string>
-  <key>CFBundleIdentifier</key>
-  <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
-  <key>CFBundleInfoDictionaryVersion</key>
-  <string>6.0</string>
-  <key>CFBundleName</key>
-  <string>${PRODUCT_NAME}</string>
-  <key>CFBundlePackageType</key>
-  <string>FMWK</string>
-  <key>CFBundleShortVersionString</key>
-  <string>3.0.0</string>
-  <key>CFBundleSignature</key>
-  <string>????</string>
-  <key>CFBundleVersion</key>
-  <string>${CURRENT_PROJECT_VERSION}</string>
-  <key>NSPrincipalClass</key>
-  <string></string>
-</dict>
-</plist>
diff --git a/assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-dummy.m b/assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-dummy.m
deleted file mode 100644
index 3c7f556..0000000
--- a/assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-dummy.m	
+++ /dev/null
@@ -1,5 +0,0 @@
-#import <Foundation/Foundation.h>
-@interface PodsDummy_GoogleDataTransportCCTSupport : NSObject
-@end
-@implementation PodsDummy_GoogleDataTransportCCTSupport
-@end
diff --git a/assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-umbrella.h b/assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-umbrella.h
deleted file mode 100644
index 7f5ac1c..0000000
--- a/assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-umbrella.h	
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifdef __OBJC__
-#import <UIKit/UIKit.h>
-#else
-#ifndef FOUNDATION_EXPORT
-#if defined(__cplusplus)
-#define FOUNDATION_EXPORT extern "C"
-#else
-#define FOUNDATION_EXPORT extern
-#endif
-#endif
-#endif
-
-#import "cct.nanopb.h"
-
-FOUNDATION_EXPORT double GoogleDataTransportCCTSupportVersionNumber;
-FOUNDATION_EXPORT const unsigned char GoogleDataTransportCCTSupportVersionString[];
-
diff --git a/assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.debug.xcconfig b/assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.debug.xcconfig
deleted file mode 100644
index d1a9d30..0000000
--- a/assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.debug.xcconfig	
+++ /dev/null
@@ -1,14 +0,0 @@
-CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES
-CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport
-FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb"
-GCC_C_LANGUAGE_STANDARD = c99
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1 GDTCCTSUPPORT_VERSION=3.0.0
-GCC_TREAT_WARNINGS_AS_ERRORS = YES
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}/GoogleDataTransportCCTSupport/"
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_ROOT = ${SRCROOT}
-PODS_TARGET_SRCROOT = ${PODS_ROOT}/GoogleDataTransportCCTSupport
-PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
-SKIP_INSTALL = YES
-USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
diff --git a/assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.modulemap b/assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.modulemap
deleted file mode 100644
index 7cec8f0..0000000
--- a/assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.modulemap	
+++ /dev/null
@@ -1,6 +0,0 @@
-framework module GoogleDataTransportCCTSupport {
-  umbrella header "GoogleDataTransportCCTSupport-umbrella.h"
-
-  export *
-  module * { export * }
-}
diff --git a/assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.release.xcconfig b/assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.release.xcconfig
deleted file mode 100644
index d1a9d30..0000000
--- a/assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.release.xcconfig	
+++ /dev/null
@@ -1,14 +0,0 @@
-CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES
-CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport
-FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb"
-GCC_C_LANGUAGE_STANDARD = c99
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1 GDTCCTSUPPORT_VERSION=3.0.0
-GCC_TREAT_WARNINGS_AS_ERRORS = YES
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}/GoogleDataTransportCCTSupport/"
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_ROOT = ${SRCROOT}
-PODS_TARGET_SRCROOT = ${PODS_ROOT}/GoogleDataTransportCCTSupport
-PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
-SKIP_INSTALL = YES
-USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
diff --git a/assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-Info.plist b/assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-Info.plist
deleted file mode 100644
index 3fe24c0..0000000
--- a/assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-Info.plist	
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-  <key>CFBundleDevelopmentRegion</key>
-  <string>en</string>
-  <key>CFBundleExecutable</key>
-  <string>${EXECUTABLE_NAME}</string>
-  <key>CFBundleIdentifier</key>
-  <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
-  <key>CFBundleInfoDictionaryVersion</key>
-  <string>6.0</string>
-  <key>CFBundleName</key>
-  <string>${PRODUCT_NAME}</string>
-  <key>CFBundlePackageType</key>
-  <string>FMWK</string>
-  <key>CFBundleShortVersionString</key>
-  <string>6.6.0</string>
-  <key>CFBundleSignature</key>
-  <string>????</string>
-  <key>CFBundleVersion</key>
-  <string>${CURRENT_PROJECT_VERSION}</string>
-  <key>NSPrincipalClass</key>
-  <string></string>
-</dict>
-</plist>
diff --git a/assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-dummy.m b/assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-dummy.m
deleted file mode 100644
index 98ac4e9..0000000
--- a/assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-dummy.m	
+++ /dev/null
@@ -1,5 +0,0 @@
-#import <Foundation/Foundation.h>
-@interface PodsDummy_GoogleUtilities : NSObject
-@end
-@implementation PodsDummy_GoogleUtilities
-@end
diff --git a/assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-prefix.pch b/assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-prefix.pch
deleted file mode 100644
index beb2a24..0000000
--- a/assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-prefix.pch	
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifdef __OBJC__
-#import <UIKit/UIKit.h>
-#else
-#ifndef FOUNDATION_EXPORT
-#if defined(__cplusplus)
-#define FOUNDATION_EXPORT extern "C"
-#else
-#define FOUNDATION_EXPORT extern
-#endif
-#endif
-#endif
-
diff --git a/assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-umbrella.h b/assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-umbrella.h
deleted file mode 100644
index 2b68b6a..0000000
--- a/assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-umbrella.h	
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifdef __OBJC__
-#import <UIKit/UIKit.h>
-#else
-#ifndef FOUNDATION_EXPORT
-#if defined(__cplusplus)
-#define FOUNDATION_EXPORT extern "C"
-#else
-#define FOUNDATION_EXPORT extern
-#endif
-#endif
-#endif
-
-#import "GULLoggerLevel.h"
-
-FOUNDATION_EXPORT double GoogleUtilitiesVersionNumber;
-FOUNDATION_EXPORT const unsigned char GoogleUtilitiesVersionString[];
-
diff --git a/assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.debug.xcconfig b/assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.debug.xcconfig
deleted file mode 100644
index ac907df..0000000
--- a/assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.debug.xcconfig	
+++ /dev/null
@@ -1,12 +0,0 @@
-CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities
-FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC"
-GCC_C_LANGUAGE_STANDARD = c99
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}"
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_ROOT = ${SRCROOT}
-PODS_TARGET_SRCROOT = ${PODS_ROOT}/GoogleUtilities
-PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
-SKIP_INSTALL = YES
-USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
diff --git a/assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.modulemap b/assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.modulemap
deleted file mode 100644
index 491dd0a..0000000
--- a/assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.modulemap	
+++ /dev/null
@@ -1,6 +0,0 @@
-framework module GoogleUtilities {
-  umbrella header "GoogleUtilities-umbrella.h"
-
-  export *
-  module * { export * }
-}
diff --git a/assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.release.xcconfig b/assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.release.xcconfig
deleted file mode 100644
index ac907df..0000000
--- a/assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.release.xcconfig	
+++ /dev/null
@@ -1,12 +0,0 @@
-CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities
-FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC"
-GCC_C_LANGUAGE_STANDARD = c99
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}"
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_ROOT = ${SRCROOT}
-PODS_TARGET_SRCROOT = ${PODS_ROOT}/GoogleUtilities
-PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
-SKIP_INSTALL = YES
-USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
diff --git a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-Info.plist b/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-Info.plist
deleted file mode 100644
index 2243fe6..0000000
--- a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-Info.plist	
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-  <key>CFBundleDevelopmentRegion</key>
-  <string>en</string>
-  <key>CFBundleExecutable</key>
-  <string>${EXECUTABLE_NAME}</string>
-  <key>CFBundleIdentifier</key>
-  <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
-  <key>CFBundleInfoDictionaryVersion</key>
-  <string>6.0</string>
-  <key>CFBundleName</key>
-  <string>${PRODUCT_NAME}</string>
-  <key>CFBundlePackageType</key>
-  <string>FMWK</string>
-  <key>CFBundleShortVersionString</key>
-  <string>1.0.0</string>
-  <key>CFBundleSignature</key>
-  <string>????</string>
-  <key>CFBundleVersion</key>
-  <string>${CURRENT_PROJECT_VERSION}</string>
-  <key>NSPrincipalClass</key>
-  <string></string>
-</dict>
-</plist>
diff --git a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-acknowledgements.markdown b/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-acknowledgements.markdown
deleted file mode 100644
index d3827e9..0000000
--- a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-acknowledgements.markdown	
+++ /dev/null
@@ -1,2163 +0,0 @@
-# Acknowledgements
-This application makes use of the following third party libraries:
-
-## Firebase
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
-
-## FirebaseAuthInterop
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
-
-## FirebaseCore
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
-
-## FirebaseCoreDiagnostics
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
-
-## FirebaseCoreDiagnosticsInterop
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
-
-## FirebaseDatabase
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
-
-## GoogleDataTransport
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
-
-## GoogleDataTransportCCTSupport
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
-
-## GoogleUtilities
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
-================================================================================
-
-The following copyright from Landon J. Fuller applies to the isAppEncrypted
-function in Environment/third_party/GULAppEnvironmentUtil.m.
-
-Copyright (c) 2017 Landon J. Fuller <landon@landonf.org>
-All rights reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Comment from
-<a href="http://iphonedevwiki.net/index.php/Crack_prevention">iPhone Dev Wiki
-Crack Prevention</a>: App Store binaries are signed by both their developer
-and Apple. This encrypts the binary so that decryption keys are needed in order
-to make the binary readable. When iOS executes the binary, the decryption keys
-are used to decrypt the binary into a readable state where it is then loaded
-into memory and executed. iOS can tell the encryption status of a binary via the
-cryptid structure member of LC_ENCRYPTION_INFO MachO load command. If cryptid is
-a non-zero value then the binary is encrypted.
-
-'Cracking' works by letting the kernel decrypt the binary then siphoning the
-decrypted data into a new binary file, resigning, and repackaging. This will
-only work on jailbroken devices as codesignature validation has been removed.
-Resigning takes place because while the codesignature doesn't have to be valid
-thanks to the jailbreak, it does have to be in place unless you have AppSync or
-similar to disable codesignature checks.
-
-More information at <a href="http://landonf.org/2009/02/index.html">Landon
-Fuller's blog</a>
-
-
-## PromisesObjC
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
-
-## leveldb-library
-
-Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-   * Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
-   * Redistributions in binary form must reproduce the above
-copyright notice, this list of conditions and the following disclaimer
-in the documentation and/or other materials provided with the
-distribution.
-   * Neither the name of Google Inc. nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
-## nanopb
-
-Copyright (c) 2011 Petteri Aimonen <jpa at nanopb.mail.kapsi.fi>
-
-This software is provided 'as-is', without any express or 
-implied warranty. In no event will the authors be held liable 
-for any damages arising from the use of this software.
-
-Permission is granted to anyone to use this software for any 
-purpose, including commercial applications, and to alter it and 
-redistribute it freely, subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you 
-   must not claim that you wrote the original software. If you use 
-   this software in a product, an acknowledgment in the product 
-   documentation would be appreciated but is not required.
-
-2. Altered source versions must be plainly marked as such, and 
-   must not be misrepresented as being the original software.
-
-3. This notice may not be removed or altered from any source 
-   distribution.
-
-Generated by CocoaPods - https://cocoapods.org
diff --git a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-acknowledgements.plist b/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-acknowledgements.plist
deleted file mode 100644
index 635e229..0000000
--- a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-acknowledgements.plist	
+++ /dev/null
@@ -1,2261 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>PreferenceSpecifiers</key>
-	<array>
-		<dict>
-			<key>FooterText</key>
-			<string>This application makes use of the following third party libraries:</string>
-			<key>Title</key>
-			<string>Acknowledgements</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-</string>
-			<key>License</key>
-			<string>Apache</string>
-			<key>Title</key>
-			<string>Firebase</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-</string>
-			<key>License</key>
-			<string>Apache</string>
-			<key>Title</key>
-			<string>FirebaseAuthInterop</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-</string>
-			<key>License</key>
-			<string>Apache</string>
-			<key>Title</key>
-			<string>FirebaseCore</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-</string>
-			<key>License</key>
-			<string>Apache</string>
-			<key>Title</key>
-			<string>FirebaseCoreDiagnostics</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-</string>
-			<key>License</key>
-			<string>Apache</string>
-			<key>Title</key>
-			<string>FirebaseCoreDiagnosticsInterop</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-</string>
-			<key>License</key>
-			<string>Apache</string>
-			<key>Title</key>
-			<string>FirebaseDatabase</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-</string>
-			<key>License</key>
-			<string>Apache</string>
-			<key>Title</key>
-			<string>GoogleDataTransport</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-</string>
-			<key>License</key>
-			<string>Apache</string>
-			<key>Title</key>
-			<string>GoogleDataTransportCCTSupport</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
-================================================================================
-
-The following copyright from Landon J. Fuller applies to the isAppEncrypted
-function in Environment/third_party/GULAppEnvironmentUtil.m.
-
-Copyright (c) 2017 Landon J. Fuller &lt;landon@landonf.org&gt;
-All rights reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Comment from
-&lt;a href="http://iphonedevwiki.net/index.php/Crack_prevention"&gt;iPhone Dev Wiki
-Crack Prevention&lt;/a&gt;: App Store binaries are signed by both their developer
-and Apple. This encrypts the binary so that decryption keys are needed in order
-to make the binary readable. When iOS executes the binary, the decryption keys
-are used to decrypt the binary into a readable state where it is then loaded
-into memory and executed. iOS can tell the encryption status of a binary via the
-cryptid structure member of LC_ENCRYPTION_INFO MachO load command. If cryptid is
-a non-zero value then the binary is encrypted.
-
-'Cracking' works by letting the kernel decrypt the binary then siphoning the
-decrypted data into a new binary file, resigning, and repackaging. This will
-only work on jailbroken devices as codesignature validation has been removed.
-Resigning takes place because while the codesignature doesn't have to be valid
-thanks to the jailbreak, it does have to be in place unless you have AppSync or
-similar to disable codesignature checks.
-
-More information at &lt;a href="http://landonf.org/2009/02/index.html"&gt;Landon
-Fuller's blog&lt;/a&gt;
-</string>
-			<key>License</key>
-			<string>Apache</string>
-			<key>Title</key>
-			<string>GoogleUtilities</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-</string>
-			<key>License</key>
-			<string>Apache</string>
-			<key>Title</key>
-			<string>PromisesObjC</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-   * Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
-   * Redistributions in binary form must reproduce the above
-copyright notice, this list of conditions and the following disclaimer
-in the documentation and/or other materials provided with the
-distribution.
-   * Neither the name of Google Inc. nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-</string>
-			<key>License</key>
-			<string>New BSD</string>
-			<key>Title</key>
-			<string>leveldb-library</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>Copyright (c) 2011 Petteri Aimonen &lt;jpa at nanopb.mail.kapsi.fi&gt;
-
-This software is provided 'as-is', without any express or 
-implied warranty. In no event will the authors be held liable 
-for any damages arising from the use of this software.
-
-Permission is granted to anyone to use this software for any 
-purpose, including commercial applications, and to alter it and 
-redistribute it freely, subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you 
-   must not claim that you wrote the original software. If you use 
-   this software in a product, an acknowledgment in the product 
-   documentation would be appreciated but is not required.
-
-2. Altered source versions must be plainly marked as such, and 
-   must not be misrepresented as being the original software.
-
-3. This notice may not be removed or altered from any source 
-   distribution.
-</string>
-			<key>License</key>
-			<string>zlib</string>
-			<key>Title</key>
-			<string>nanopb</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>Generated by CocoaPods - https://cocoapods.org</string>
-			<key>Title</key>
-			<string></string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-	</array>
-	<key>StringsTable</key>
-	<string>Acknowledgements</string>
-	<key>Title</key>
-	<string>Acknowledgements</string>
-</dict>
-</plist>
diff --git a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-dummy.m b/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-dummy.m
deleted file mode 100644
index 51ab1e6..0000000
--- a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-dummy.m	
+++ /dev/null
@@ -1,5 +0,0 @@
-#import <Foundation/Foundation.h>
-@interface PodsDummy_Pods_openTok : NSObject
-@end
-@implementation PodsDummy_Pods_openTok
-@end
diff --git a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-frameworks-Debug-input-files.xcfilelist b/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-frameworks-Debug-input-files.xcfilelist
deleted file mode 100644
index dcd3340..0000000
--- a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-frameworks-Debug-input-files.xcfilelist	
+++ /dev/null
@@ -1,5 +0,0 @@
-${PODS_ROOT}/Target Support Files/Pods-openTok/Pods-openTok-frameworks.sh
-${BUILT_PRODUCTS_DIR}/GoogleUtilities/GoogleUtilities.framework
-${BUILT_PRODUCTS_DIR}/PromisesObjC/FBLPromises.framework
-${BUILT_PRODUCTS_DIR}/leveldb-library/leveldb.framework
-${BUILT_PRODUCTS_DIR}/nanopb/nanopb.framework
\ No newline at end of file
diff --git a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-frameworks-Debug-output-files.xcfilelist b/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-frameworks-Debug-output-files.xcfilelist
deleted file mode 100644
index 4dc74c3..0000000
--- a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-frameworks-Debug-output-files.xcfilelist	
+++ /dev/null
@@ -1,4 +0,0 @@
-${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleUtilities.framework
-${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FBLPromises.framework
-${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/leveldb.framework
-${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/nanopb.framework
\ No newline at end of file
diff --git a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-frameworks-Release-input-files.xcfilelist b/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-frameworks-Release-input-files.xcfilelist
deleted file mode 100644
index dcd3340..0000000
--- a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-frameworks-Release-input-files.xcfilelist	
+++ /dev/null
@@ -1,5 +0,0 @@
-${PODS_ROOT}/Target Support Files/Pods-openTok/Pods-openTok-frameworks.sh
-${BUILT_PRODUCTS_DIR}/GoogleUtilities/GoogleUtilities.framework
-${BUILT_PRODUCTS_DIR}/PromisesObjC/FBLPromises.framework
-${BUILT_PRODUCTS_DIR}/leveldb-library/leveldb.framework
-${BUILT_PRODUCTS_DIR}/nanopb/nanopb.framework
\ No newline at end of file
diff --git a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-frameworks-Release-output-files.xcfilelist b/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-frameworks-Release-output-files.xcfilelist
deleted file mode 100644
index 4dc74c3..0000000
--- a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-frameworks-Release-output-files.xcfilelist	
+++ /dev/null
@@ -1,4 +0,0 @@
-${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleUtilities.framework
-${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FBLPromises.framework
-${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/leveldb.framework
-${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/nanopb.framework
\ No newline at end of file
diff --git a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-frameworks.sh b/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-frameworks.sh
deleted file mode 100755
index ef3a79f..0000000
--- a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-frameworks.sh	
+++ /dev/null
@@ -1,213 +0,0 @@
-#!/bin/sh
-set -e
-set -u
-set -o pipefail
-
-function on_error {
-  echo "$(realpath -mq "${0}"):$1: error: Unexpected failure"
-}
-trap 'on_error $LINENO' ERR
-
-if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then
-  # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy
-  # frameworks to, so exit 0 (signalling the script phase was successful).
-  exit 0
-fi
-
-echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
-mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
-
-COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}"
-SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}"
-
-# Used as a return value for each invocation of `strip_invalid_archs` function.
-STRIP_BINARY_RETVAL=0
-
-# This protects against multiple targets copying the same framework dependency at the same time. The solution
-# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html
-RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????")
-
-# Copies and strips a vendored framework
-install_framework()
-{
-  if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then
-    local source="${BUILT_PRODUCTS_DIR}/$1"
-  elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then
-    local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")"
-  elif [ -r "$1" ]; then
-    local source="$1"
-  fi
-
-  local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
-
-  if [ -L "${source}" ]; then
-    echo "Symlinked..."
-    source="$(readlink "${source}")"
-  fi
-
-  # Use filter instead of exclude so missing patterns don't throw errors.
-  echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\""
-  rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}"
-
-  local basename
-  basename="$(basename -s .framework "$1")"
-  binary="${destination}/${basename}.framework/${basename}"
-
-  if ! [ -r "$binary" ]; then
-    binary="${destination}/${basename}"
-  elif [ -L "${binary}" ]; then
-    echo "Destination binary is symlinked..."
-    dirname="$(dirname "${binary}")"
-    binary="${dirname}/$(readlink "${binary}")"
-  fi
-
-  # Strip invalid architectures so "fat" simulator / device frameworks work on device
-  if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then
-    strip_invalid_archs "$binary"
-  fi
-
-  # Resign the code if required by the build settings to avoid unstable apps
-  code_sign_if_enabled "${destination}/$(basename "$1")"
-
-  # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7.
-  if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then
-    local swift_runtime_libs
-    swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u)
-    for lib in $swift_runtime_libs; do
-      echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\""
-      rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}"
-      code_sign_if_enabled "${destination}/${lib}"
-    done
-  fi
-}
-
-# Copies and strips a vendored dSYM
-install_dsym() {
-  local source="$1"
-  warn_missing_arch=${2:-true}
-  if [ -r "$source" ]; then
-    # Copy the dSYM into the targets temp dir.
-    echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\""
-    rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}"
-
-    local basename
-    basename="$(basename -s .dSYM "$source")"
-    binary_name="$(ls "$source/Contents/Resources/DWARF")"
-    binary="${DERIVED_FILES_DIR}/${basename}.dSYM/Contents/Resources/DWARF/${binary_name}"
-
-    # Strip invalid architectures so "fat" simulator / device frameworks work on device
-    if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then
-      strip_invalid_archs "$binary" "$warn_missing_arch"
-    fi
-
-    if [[ $STRIP_BINARY_RETVAL == 1 ]]; then
-      # Move the stripped file into its final destination.
-      echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\""
-      rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.dSYM" "${DWARF_DSYM_FOLDER_PATH}"
-    else
-      # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing.
-      touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.dSYM"
-    fi
-  fi
-}
-
-# Copies the bcsymbolmap files of a vendored framework
-install_bcsymbolmap() {
-    local bcsymbolmap_path="$1"
-    local destination="${BUILT_PRODUCTS_DIR}"
-    echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}""
-    rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}"
-}
-
-# Signs a framework with the provided identity
-code_sign_if_enabled() {
-  if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then
-    # Use the current code_sign_identity
-    echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}"
-    local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'"
-
-    if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
-      code_sign_cmd="$code_sign_cmd &"
-    fi
-    echo "$code_sign_cmd"
-    eval "$code_sign_cmd"
-  fi
-}
-
-# Strip invalid architectures
-strip_invalid_archs() {
-  binary="$1"
-  warn_missing_arch=${2:-true}
-  # Get architectures for current target binary
-  binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)"
-  # Intersect them with the architectures we are building for
-  intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)"
-  # If there are no archs supported by this binary then warn the user
-  if [[ -z "$intersected_archs" ]]; then
-    if [[ "$warn_missing_arch" == "true" ]]; then
-      echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)."
-    fi
-    STRIP_BINARY_RETVAL=0
-    return
-  fi
-  stripped=""
-  for arch in $binary_archs; do
-    if ! [[ "${ARCHS}" == *"$arch"* ]]; then
-      # Strip non-valid architectures in-place
-      lipo -remove "$arch" -output "$binary" "$binary"
-      stripped="$stripped $arch"
-    fi
-  done
-  if [[ "$stripped" ]]; then
-    echo "Stripped $binary of architectures:$stripped"
-  fi
-  STRIP_BINARY_RETVAL=1
-}
-
-install_artifact() {
-  artifact="$1"
-  base="$(basename "$artifact")"
-  case $base in
-  *.framework)
-    install_framework "$artifact"
-    ;;
-  *.dSYM)
-    # Suppress arch warnings since XCFrameworks will include many dSYM files
-    install_dsym "$artifact" "false"
-    ;;
-  *.bcsymbolmap)
-    install_bcsymbolmap "$artifact"
-    ;;
-  *)
-    echo "error: Unrecognized artifact "$artifact""
-    ;;
-  esac
-}
-
-copy_artifacts() {
-  file_list="$1"
-  while read artifact; do
-    install_artifact "$artifact"
-  done <$file_list
-}
-
-ARTIFACT_LIST_FILE="${BUILT_PRODUCTS_DIR}/cocoapods-artifacts-${CONFIGURATION}.txt"
-if [ -r "${ARTIFACT_LIST_FILE}" ]; then
-  copy_artifacts "${ARTIFACT_LIST_FILE}"
-fi
-
-if [[ "$CONFIGURATION" == "Debug" ]]; then
-  install_framework "${BUILT_PRODUCTS_DIR}/GoogleUtilities/GoogleUtilities.framework"
-  install_framework "${BUILT_PRODUCTS_DIR}/PromisesObjC/FBLPromises.framework"
-  install_framework "${BUILT_PRODUCTS_DIR}/leveldb-library/leveldb.framework"
-  install_framework "${BUILT_PRODUCTS_DIR}/nanopb/nanopb.framework"
-fi
-if [[ "$CONFIGURATION" == "Release" ]]; then
-  install_framework "${BUILT_PRODUCTS_DIR}/GoogleUtilities/GoogleUtilities.framework"
-  install_framework "${BUILT_PRODUCTS_DIR}/PromisesObjC/FBLPromises.framework"
-  install_framework "${BUILT_PRODUCTS_DIR}/leveldb-library/leveldb.framework"
-  install_framework "${BUILT_PRODUCTS_DIR}/nanopb/nanopb.framework"
-fi
-if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
-  wait
-fi
diff --git a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-umbrella.h b/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-umbrella.h
deleted file mode 100644
index 6c3cfa8..0000000
--- a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-umbrella.h	
+++ /dev/null
@@ -1,16 +0,0 @@
-#ifdef __OBJC__
-#import <UIKit/UIKit.h>
-#else
-#ifndef FOUNDATION_EXPORT
-#if defined(__cplusplus)
-#define FOUNDATION_EXPORT extern "C"
-#else
-#define FOUNDATION_EXPORT extern
-#endif
-#endif
-#endif
-
-
-FOUNDATION_EXPORT double Pods_openTokVersionNumber;
-FOUNDATION_EXPORT const unsigned char Pods_openTokVersionString[];
-
diff --git a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok.debug.xcconfig b/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok.debug.xcconfig
deleted file mode 100644
index a25fcb4..0000000
--- a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok.debug.xcconfig	
+++ /dev/null
@@ -1,10 +0,0 @@
-FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseDatabase" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/leveldb-library" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb"
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseDatabase/FirebaseDatabase.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport/GoogleDataTransport.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC/FBLPromises.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/leveldb-library/leveldb.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" "${PODS_ROOT}/Headers/Public/FirebaseAuthInterop" "${PODS_ROOT}/Headers/Public/FirebaseCoreDiagnosticsInterop" $(inherited) ${PODS_ROOT}/Firebase/CoreOnly/Sources "${PODS_TARGET_SRCROOT}/Sources/FBLPromises/include"
-LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
-OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"icucore" -l"z" -framework "CFNetwork" -framework "CoreTelephony" -framework "FBLPromises" -framework "FirebaseCore" -framework "FirebaseCoreDiagnostics" -framework "FirebaseDatabase" -framework "Foundation" -framework "GoogleDataTransport" -framework "GoogleDataTransportCCTSupport" -framework "GoogleUtilities" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "leveldb" -framework "nanopb"
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
-PODS_ROOT = ${SRCROOT}/Pods
-USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
diff --git a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok.modulemap b/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok.modulemap
deleted file mode 100644
index 2dd690a..0000000
--- a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok.modulemap	
+++ /dev/null
@@ -1,6 +0,0 @@
-framework module Pods_openTok {
-  umbrella header "Pods-openTok-umbrella.h"
-
-  export *
-  module * { export * }
-}
diff --git a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok.release.xcconfig b/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok.release.xcconfig
deleted file mode 100644
index a25fcb4..0000000
--- a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok.release.xcconfig	
+++ /dev/null
@@ -1,10 +0,0 @@
-FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseDatabase" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/leveldb-library" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb"
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseDatabase/FirebaseDatabase.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport/GoogleDataTransport.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC/FBLPromises.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/leveldb-library/leveldb.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" "${PODS_ROOT}/Headers/Public/FirebaseAuthInterop" "${PODS_ROOT}/Headers/Public/FirebaseCoreDiagnosticsInterop" $(inherited) ${PODS_ROOT}/Firebase/CoreOnly/Sources "${PODS_TARGET_SRCROOT}/Sources/FBLPromises/include"
-LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
-OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"icucore" -l"z" -framework "CFNetwork" -framework "CoreTelephony" -framework "FBLPromises" -framework "FirebaseCore" -framework "FirebaseCoreDiagnostics" -framework "FirebaseDatabase" -framework "Foundation" -framework "GoogleDataTransport" -framework "GoogleDataTransportCCTSupport" -framework "GoogleUtilities" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "leveldb" -framework "nanopb"
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
-PODS_ROOT = ${SRCROOT}/Pods
-USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
diff --git a/assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC-Info.plist b/assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC-Info.plist
deleted file mode 100644
index f5f78f7..0000000
--- a/assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC-Info.plist	
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-  <key>CFBundleDevelopmentRegion</key>
-  <string>en</string>
-  <key>CFBundleExecutable</key>
-  <string>${EXECUTABLE_NAME}</string>
-  <key>CFBundleIdentifier</key>
-  <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
-  <key>CFBundleInfoDictionaryVersion</key>
-  <string>6.0</string>
-  <key>CFBundleName</key>
-  <string>${PRODUCT_NAME}</string>
-  <key>CFBundlePackageType</key>
-  <string>FMWK</string>
-  <key>CFBundleShortVersionString</key>
-  <string>1.2.8</string>
-  <key>CFBundleSignature</key>
-  <string>????</string>
-  <key>CFBundleVersion</key>
-  <string>${CURRENT_PROJECT_VERSION}</string>
-  <key>NSPrincipalClass</key>
-  <string></string>
-</dict>
-</plist>
diff --git a/assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC-dummy.m b/assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC-dummy.m
deleted file mode 100644
index ab1f210..0000000
--- a/assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC-dummy.m	
+++ /dev/null
@@ -1,5 +0,0 @@
-#import <Foundation/Foundation.h>
-@interface PodsDummy_PromisesObjC : NSObject
-@end
-@implementation PodsDummy_PromisesObjC
-@end
diff --git a/assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC-umbrella.h b/assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC-umbrella.h
deleted file mode 100644
index 5b014a8..0000000
--- a/assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC-umbrella.h	
+++ /dev/null
@@ -1,36 +0,0 @@
-#ifdef __OBJC__
-#import <UIKit/UIKit.h>
-#else
-#ifndef FOUNDATION_EXPORT
-#if defined(__cplusplus)
-#define FOUNDATION_EXPORT extern "C"
-#else
-#define FOUNDATION_EXPORT extern
-#endif
-#endif
-#endif
-
-#import "FBLPromise+All.h"
-#import "FBLPromise+Always.h"
-#import "FBLPromise+Any.h"
-#import "FBLPromise+Async.h"
-#import "FBLPromise+Await.h"
-#import "FBLPromise+Catch.h"
-#import "FBLPromise+Delay.h"
-#import "FBLPromise+Do.h"
-#import "FBLPromise+Race.h"
-#import "FBLPromise+Recover.h"
-#import "FBLPromise+Reduce.h"
-#import "FBLPromise+Retry.h"
-#import "FBLPromise+Testing.h"
-#import "FBLPromise+Then.h"
-#import "FBLPromise+Timeout.h"
-#import "FBLPromise+Validate.h"
-#import "FBLPromise+Wrap.h"
-#import "FBLPromise.h"
-#import "FBLPromiseError.h"
-#import "FBLPromises.h"
-
-FOUNDATION_EXPORT double FBLPromisesVersionNumber;
-FOUNDATION_EXPORT const unsigned char FBLPromisesVersionString[];
-
diff --git a/assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC.debug.xcconfig b/assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC.debug.xcconfig
deleted file mode 100644
index dac127e..0000000
--- a/assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC.debug.xcconfig	
+++ /dev/null
@@ -1,10 +0,0 @@
-CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}/Sources/FBLPromises/include"
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_ROOT = ${SRCROOT}
-PODS_TARGET_SRCROOT = ${PODS_ROOT}/PromisesObjC
-PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
-SKIP_INSTALL = YES
-USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
diff --git a/assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC.modulemap b/assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC.modulemap
deleted file mode 100644
index 7d485cd..0000000
--- a/assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC.modulemap	
+++ /dev/null
@@ -1,6 +0,0 @@
-framework module FBLPromises {
-  umbrella header "PromisesObjC-umbrella.h"
-
-  export *
-  module * { export * }
-}
diff --git a/assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC.release.xcconfig b/assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC.release.xcconfig
deleted file mode 100644
index dac127e..0000000
--- a/assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC.release.xcconfig	
+++ /dev/null
@@ -1,10 +0,0 @@
-CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}/Sources/FBLPromises/include"
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_ROOT = ${SRCROOT}
-PODS_TARGET_SRCROOT = ${PODS_ROOT}/PromisesObjC
-PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
-SKIP_INSTALL = YES
-USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
diff --git a/assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library-Info.plist b/assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library-Info.plist
deleted file mode 100644
index da1bc00..0000000
--- a/assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library-Info.plist	
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-  <key>CFBundleDevelopmentRegion</key>
-  <string>en</string>
-  <key>CFBundleExecutable</key>
-  <string>${EXECUTABLE_NAME}</string>
-  <key>CFBundleIdentifier</key>
-  <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
-  <key>CFBundleInfoDictionaryVersion</key>
-  <string>6.0</string>
-  <key>CFBundleName</key>
-  <string>${PRODUCT_NAME}</string>
-  <key>CFBundlePackageType</key>
-  <string>FMWK</string>
-  <key>CFBundleShortVersionString</key>
-  <string>1.22.0</string>
-  <key>CFBundleSignature</key>
-  <string>????</string>
-  <key>CFBundleVersion</key>
-  <string>${CURRENT_PROJECT_VERSION}</string>
-  <key>NSPrincipalClass</key>
-  <string></string>
-</dict>
-</plist>
diff --git a/assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library-dummy.m b/assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library-dummy.m
deleted file mode 100644
index dba1492..0000000
--- a/assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library-dummy.m	
+++ /dev/null
@@ -1,5 +0,0 @@
-#import <Foundation/Foundation.h>
-@interface PodsDummy_leveldb_library : NSObject
-@end
-@implementation PodsDummy_leveldb_library
-@end
diff --git a/assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library-prefix.pch b/assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library-prefix.pch
deleted file mode 100644
index beb2a24..0000000
--- a/assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library-prefix.pch	
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifdef __OBJC__
-#import <UIKit/UIKit.h>
-#else
-#ifndef FOUNDATION_EXPORT
-#if defined(__cplusplus)
-#define FOUNDATION_EXPORT extern "C"
-#else
-#define FOUNDATION_EXPORT extern
-#endif
-#endif
-#endif
-
diff --git a/assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library-umbrella.h b/assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library-umbrella.h
deleted file mode 100644
index 6a45902..0000000
--- a/assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library-umbrella.h	
+++ /dev/null
@@ -1,31 +0,0 @@
-#ifdef __OBJC__
-#import <UIKit/UIKit.h>
-#else
-#ifndef FOUNDATION_EXPORT
-#if defined(__cplusplus)
-#define FOUNDATION_EXPORT extern "C"
-#else
-#define FOUNDATION_EXPORT extern
-#endif
-#endif
-#endif
-
-#import "c.h"
-#import "cache.h"
-#import "comparator.h"
-#import "db.h"
-#import "dumpfile.h"
-#import "env.h"
-#import "export.h"
-#import "filter_policy.h"
-#import "iterator.h"
-#import "options.h"
-#import "slice.h"
-#import "status.h"
-#import "table.h"
-#import "table_builder.h"
-#import "write_batch.h"
-
-FOUNDATION_EXPORT double leveldbVersionNumber;
-FOUNDATION_EXPORT const unsigned char leveldbVersionString[];
-
diff --git a/assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library.debug.xcconfig b/assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library.debug.xcconfig
deleted file mode 100644
index d1992a1..0000000
--- a/assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library.debug.xcconfig	
+++ /dev/null
@@ -1,13 +0,0 @@
-CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/leveldb-library
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LEVELDB_IS_BIG_ENDIAN=0 LEVELDB_PLATFORM_POSIX HAVE_FULLFSYNC=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/leveldb-library" "${PODS_ROOT}/leveldb-library/include"
-OTHER_LDFLAGS = $(inherited) -l"c++"
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_ROOT = ${SRCROOT}
-PODS_TARGET_SRCROOT = ${PODS_ROOT}/leveldb-library
-PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
-SKIP_INSTALL = YES
-USE_HEADERMAP = No
-USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
-WARNING_CFLAGS = -Wno-shorten-64-to-32 -Wno-comma -Wno-unreachable-code -Wno-conditional-uninitialized -Wno-deprecated-declarations
diff --git a/assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library.modulemap b/assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library.modulemap
deleted file mode 100644
index fd77435..0000000
--- a/assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library.modulemap	
+++ /dev/null
@@ -1,6 +0,0 @@
-framework module leveldb {
-  umbrella header "leveldb-library-umbrella.h"
-
-  export *
-  module * { export * }
-}
diff --git a/assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library.release.xcconfig b/assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library.release.xcconfig
deleted file mode 100644
index d1992a1..0000000
--- a/assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library.release.xcconfig	
+++ /dev/null
@@ -1,13 +0,0 @@
-CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/leveldb-library
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LEVELDB_IS_BIG_ENDIAN=0 LEVELDB_PLATFORM_POSIX HAVE_FULLFSYNC=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/leveldb-library" "${PODS_ROOT}/leveldb-library/include"
-OTHER_LDFLAGS = $(inherited) -l"c++"
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_ROOT = ${SRCROOT}
-PODS_TARGET_SRCROOT = ${PODS_ROOT}/leveldb-library
-PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
-SKIP_INSTALL = YES
-USE_HEADERMAP = No
-USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
-WARNING_CFLAGS = -Wno-shorten-64-to-32 -Wno-comma -Wno-unreachable-code -Wno-conditional-uninitialized -Wno-deprecated-declarations
diff --git a/assign5/openTok/Pods/Target Support Files/nanopb/nanopb-Info.plist b/assign5/openTok/Pods/Target Support Files/nanopb/nanopb-Info.plist
deleted file mode 100644
index bcc2778..0000000
--- a/assign5/openTok/Pods/Target Support Files/nanopb/nanopb-Info.plist	
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-  <key>CFBundleDevelopmentRegion</key>
-  <string>en</string>
-  <key>CFBundleExecutable</key>
-  <string>${EXECUTABLE_NAME}</string>
-  <key>CFBundleIdentifier</key>
-  <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
-  <key>CFBundleInfoDictionaryVersion</key>
-  <string>6.0</string>
-  <key>CFBundleName</key>
-  <string>${PRODUCT_NAME}</string>
-  <key>CFBundlePackageType</key>
-  <string>FMWK</string>
-  <key>CFBundleShortVersionString</key>
-  <string>0.3.9011</string>
-  <key>CFBundleSignature</key>
-  <string>????</string>
-  <key>CFBundleVersion</key>
-  <string>${CURRENT_PROJECT_VERSION}</string>
-  <key>NSPrincipalClass</key>
-  <string></string>
-</dict>
-</plist>
diff --git a/assign5/openTok/Pods/Target Support Files/nanopb/nanopb-dummy.m b/assign5/openTok/Pods/Target Support Files/nanopb/nanopb-dummy.m
deleted file mode 100644
index b3fa595..0000000
--- a/assign5/openTok/Pods/Target Support Files/nanopb/nanopb-dummy.m	
+++ /dev/null
@@ -1,5 +0,0 @@
-#import <Foundation/Foundation.h>
-@interface PodsDummy_nanopb : NSObject
-@end
-@implementation PodsDummy_nanopb
-@end
diff --git a/assign5/openTok/Pods/Target Support Files/nanopb/nanopb-prefix.pch b/assign5/openTok/Pods/Target Support Files/nanopb/nanopb-prefix.pch
deleted file mode 100644
index beb2a24..0000000
--- a/assign5/openTok/Pods/Target Support Files/nanopb/nanopb-prefix.pch	
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifdef __OBJC__
-#import <UIKit/UIKit.h>
-#else
-#ifndef FOUNDATION_EXPORT
-#if defined(__cplusplus)
-#define FOUNDATION_EXPORT extern "C"
-#else
-#define FOUNDATION_EXPORT extern
-#endif
-#endif
-#endif
-
diff --git a/assign5/openTok/Pods/Target Support Files/nanopb/nanopb-umbrella.h b/assign5/openTok/Pods/Target Support Files/nanopb/nanopb-umbrella.h
deleted file mode 100644
index 07e77b3..0000000
--- a/assign5/openTok/Pods/Target Support Files/nanopb/nanopb-umbrella.h	
+++ /dev/null
@@ -1,26 +0,0 @@
-#ifdef __OBJC__
-#import <UIKit/UIKit.h>
-#else
-#ifndef FOUNDATION_EXPORT
-#if defined(__cplusplus)
-#define FOUNDATION_EXPORT extern "C"
-#else
-#define FOUNDATION_EXPORT extern
-#endif
-#endif
-#endif
-
-#import "pb.h"
-#import "pb_common.h"
-#import "pb_decode.h"
-#import "pb_encode.h"
-#import "pb.h"
-#import "pb_decode.h"
-#import "pb_common.h"
-#import "pb.h"
-#import "pb_encode.h"
-#import "pb_common.h"
-
-FOUNDATION_EXPORT double nanopbVersionNumber;
-FOUNDATION_EXPORT const unsigned char nanopbVersionString[];
-
diff --git a/assign5/openTok/Pods/Target Support Files/nanopb/nanopb.debug.xcconfig b/assign5/openTok/Pods/Target Support Files/nanopb/nanopb.debug.xcconfig
deleted file mode 100644
index 8e7193b..0000000
--- a/assign5/openTok/Pods/Target Support Files/nanopb/nanopb.debug.xcconfig	
+++ /dev/null
@@ -1,9 +0,0 @@
-CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/nanopb
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_ROOT = ${SRCROOT}
-PODS_TARGET_SRCROOT = ${PODS_ROOT}/nanopb
-PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
-SKIP_INSTALL = YES
-USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
diff --git a/assign5/openTok/Pods/Target Support Files/nanopb/nanopb.modulemap b/assign5/openTok/Pods/Target Support Files/nanopb/nanopb.modulemap
deleted file mode 100644
index e8d4b53..0000000
--- a/assign5/openTok/Pods/Target Support Files/nanopb/nanopb.modulemap	
+++ /dev/null
@@ -1,6 +0,0 @@
-framework module nanopb {
-  umbrella header "nanopb-umbrella.h"
-
-  export *
-  module * { export * }
-}
diff --git a/assign5/openTok/Pods/Target Support Files/nanopb/nanopb.release.xcconfig b/assign5/openTok/Pods/Target Support Files/nanopb/nanopb.release.xcconfig
deleted file mode 100644
index 8e7193b..0000000
--- a/assign5/openTok/Pods/Target Support Files/nanopb/nanopb.release.xcconfig	
+++ /dev/null
@@ -1,9 +0,0 @@
-CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/nanopb
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_ROOT = ${SRCROOT}
-PODS_TARGET_SRCROOT = ${PODS_ROOT}/nanopb
-PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
-SKIP_INSTALL = YES
-USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
diff --git a/assign5/openTok/Pods/leveldb-library/LICENSE b/assign5/openTok/Pods/leveldb-library/LICENSE
deleted file mode 100644
index 8e80208..0000000
--- a/assign5/openTok/Pods/leveldb-library/LICENSE
+++ /dev/null
@@ -1,27 +0,0 @@
-Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-   * Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
-   * Redistributions in binary form must reproduce the above
-copyright notice, this list of conditions and the following disclaimer
-in the documentation and/or other materials provided with the
-distribution.
-   * Neither the name of Google Inc. nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/assign5/openTok/Pods/leveldb-library/README.md b/assign5/openTok/Pods/leveldb-library/README.md
deleted file mode 100644
index 0b660ae..0000000
--- a/assign5/openTok/Pods/leveldb-library/README.md
+++ /dev/null
@@ -1,225 +0,0 @@
-**LevelDB is a fast key-value storage library written at Google that provides an ordered mapping from string keys to string values.**
-
-[![Build Status](https://travis-ci.org/google/leveldb.svg?branch=master)](https://travis-ci.org/google/leveldb)
-[![Build status](https://ci.appveyor.com/api/projects/status/g2j5j4rfkda6eyw5/branch/master?svg=true)](https://ci.appveyor.com/project/pwnall/leveldb)
-
-Authors: Sanjay Ghemawat (sanjay@google.com) and Jeff Dean (jeff@google.com)
-
-# Features
-
-  * Keys and values are arbitrary byte arrays.
-  * Data is stored sorted by key.
-  * Callers can provide a custom comparison function to override the sort order.
-  * The basic operations are `Put(key,value)`, `Get(key)`, `Delete(key)`.
-  * Multiple changes can be made in one atomic batch.
-  * Users can create a transient snapshot to get a consistent view of data.
-  * Forward and backward iteration is supported over the data.
-  * Data is automatically compressed using the [Snappy compression library](http://google.github.io/snappy/).
-  * External activity (file system operations etc.) is relayed through a virtual interface so users can customize the operating system interactions.
-
-# Documentation
-
-  [LevelDB library documentation](https://github.com/google/leveldb/blob/master/doc/index.md) is online and bundled with the source code.
-
-# Limitations
-
-  * This is not a SQL database.  It does not have a relational data model, it does not support SQL queries, and it has no support for indexes.
-  * Only a single process (possibly multi-threaded) can access a particular database at a time.
-  * There is no client-server support builtin to the library.  An application that needs such support will have to wrap their own server around the library.
-
-# Building
-
-This project supports [CMake](https://cmake.org/) out of the box.
-
-### Build for POSIX
-
-Quick start:
-
-```bash
-mkdir -p build && cd build
-cmake -DCMAKE_BUILD_TYPE=Release .. && cmake --build .
-```
-
-### Building for Windows
-
-First generate the Visual Studio 2017 project/solution files:
-
-```cmd
-mkdir build
-cd build
-cmake -G "Visual Studio 15" ..
-```
-The default default will build for x86. For 64-bit run:
-
-```cmd
-cmake -G "Visual Studio 15 Win64" ..
-```
-
-To compile the Windows solution from the command-line:
-
-```cmd
-devenv /build Debug leveldb.sln
-```
-
-or open leveldb.sln in Visual Studio and build from within.
-
-Please see the CMake documentation and `CMakeLists.txt` for more advanced usage.
-
-# Contributing to the leveldb Project
-
-The leveldb project welcomes contributions. leveldb's primary goal is to be
-a reliable and fast key/value store. Changes that are in line with the
-features/limitations outlined above, and meet the requirements below,
-will be considered.
-
-Contribution requirements:
-
-1. **Tested platforms only**. We _generally_ will only accept changes for
-   platforms that are compiled and tested. This means POSIX (for Linux and
-   macOS) or Windows. Very small changes will sometimes be accepted, but
-   consider that more of an exception than the rule.
-
-2. **Stable API**. We strive very hard to maintain a stable API. Changes that
-   require changes for projects using leveldb _might_ be rejected without
-   sufficient benefit to the project.
-
-3. **Tests**: All changes must be accompanied by a new (or changed) test, or
-   a sufficient explanation as to why a new (or changed) test is not required.
-
-4. **Consistent Style**: This project conforms to the
-   [Google C++ Style Guide](https://google.github.io/styleguide/cppguide.html).
-   To ensure your changes are properly formatted please run:
-
-   ```
-   clang-format -i --style=file <file>
-   ```
-
-## Submitting a Pull Request
-
-Before any pull request will be accepted the author must first sign a
-Contributor License Agreement (CLA) at https://cla.developers.google.com/.
-
-In order to keep the commit timeline linear
-[squash](https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History#Squashing-Commits)
-your changes down to a single commit and [rebase](https://git-scm.com/docs/git-rebase)
-on google/leveldb/master. This keeps the commit timeline linear and more easily sync'ed
-with the internal repository at Google. More information at GitHub's
-[About Git rebase](https://help.github.com/articles/about-git-rebase/) page.
-
-# Performance
-
-Here is a performance report (with explanations) from the run of the
-included db_bench program.  The results are somewhat noisy, but should
-be enough to get a ballpark performance estimate.
-
-## Setup
-
-We use a database with a million entries.  Each entry has a 16 byte
-key, and a 100 byte value.  Values used by the benchmark compress to
-about half their original size.
-
-    LevelDB:    version 1.1
-    Date:       Sun May  1 12:11:26 2011
-    CPU:        4 x Intel(R) Core(TM)2 Quad CPU    Q6600  @ 2.40GHz
-    CPUCache:   4096 KB
-    Keys:       16 bytes each
-    Values:     100 bytes each (50 bytes after compression)
-    Entries:    1000000
-    Raw Size:   110.6 MB (estimated)
-    File Size:  62.9 MB (estimated)
-
-## Write performance
-
-The "fill" benchmarks create a brand new database, in either
-sequential, or random order.  The "fillsync" benchmark flushes data
-from the operating system to the disk after every operation; the other
-write operations leave the data sitting in the operating system buffer
-cache for a while.  The "overwrite" benchmark does random writes that
-update existing keys in the database.
-
-    fillseq      :       1.765 micros/op;   62.7 MB/s
-    fillsync     :     268.409 micros/op;    0.4 MB/s (10000 ops)
-    fillrandom   :       2.460 micros/op;   45.0 MB/s
-    overwrite    :       2.380 micros/op;   46.5 MB/s
-
-Each "op" above corresponds to a write of a single key/value pair.
-I.e., a random write benchmark goes at approximately 400,000 writes per second.
-
-Each "fillsync" operation costs much less (0.3 millisecond)
-than a disk seek (typically 10 milliseconds).  We suspect that this is
-because the hard disk itself is buffering the update in its memory and
-responding before the data has been written to the platter.  This may
-or may not be safe based on whether or not the hard disk has enough
-power to save its memory in the event of a power failure.
-
-## Read performance
-
-We list the performance of reading sequentially in both the forward
-and reverse direction, and also the performance of a random lookup.
-Note that the database created by the benchmark is quite small.
-Therefore the report characterizes the performance of leveldb when the
-working set fits in memory.  The cost of reading a piece of data that
-is not present in the operating system buffer cache will be dominated
-by the one or two disk seeks needed to fetch the data from disk.
-Write performance will be mostly unaffected by whether or not the
-working set fits in memory.
-
-    readrandom  : 16.677 micros/op;  (approximately 60,000 reads per second)
-    readseq     :  0.476 micros/op;  232.3 MB/s
-    readreverse :  0.724 micros/op;  152.9 MB/s
-
-LevelDB compacts its underlying storage data in the background to
-improve read performance.  The results listed above were done
-immediately after a lot of random writes.  The results after
-compactions (which are usually triggered automatically) are better.
-
-    readrandom  : 11.602 micros/op;  (approximately 85,000 reads per second)
-    readseq     :  0.423 micros/op;  261.8 MB/s
-    readreverse :  0.663 micros/op;  166.9 MB/s
-
-Some of the high cost of reads comes from repeated decompression of blocks
-read from disk.  If we supply enough cache to the leveldb so it can hold the
-uncompressed blocks in memory, the read performance improves again:
-
-    readrandom  : 9.775 micros/op;  (approximately 100,000 reads per second before compaction)
-    readrandom  : 5.215 micros/op;  (approximately 190,000 reads per second after compaction)
-
-## Repository contents
-
-See [doc/index.md](doc/index.md) for more explanation. See
-[doc/impl.md](doc/impl.md) for a brief overview of the implementation.
-
-The public interface is in include/*.h.  Callers should not include or
-rely on the details of any other header files in this package.  Those
-internal APIs may be changed without warning.
-
-Guide to header files:
-
-* **include/db.h**: Main interface to the DB: Start here
-
-* **include/options.h**: Control over the behavior of an entire database,
-and also control over the behavior of individual reads and writes.
-
-* **include/comparator.h**: Abstraction for user-specified comparison function.
-If you want just bytewise comparison of keys, you can use the default
-comparator, but clients can write their own comparator implementations if they
-want custom ordering (e.g. to handle different character encodings, etc.)
-
-* **include/iterator.h**: Interface for iterating over data. You can get
-an iterator from a DB object.
-
-* **include/write_batch.h**: Interface for atomically applying multiple
-updates to a database.
-
-* **include/slice.h**: A simple module for maintaining a pointer and a
-length into some other byte array.
-
-* **include/status.h**: Status is returned from many of the public interfaces
-and is used to report success and various kinds of errors.
-
-* **include/env.h**:
-Abstraction of the OS environment.  A posix implementation of this interface is
-in util/env_posix.cc
-
-* **include/table.h, include/table_builder.h**: Lower-level modules that most
-clients probably won't use directly
diff --git a/assign5/openTok/Pods/leveldb-library/db/builder.cc b/assign5/openTok/Pods/leveldb-library/db/builder.cc
deleted file mode 100644
index 9520ee4..0000000
--- a/assign5/openTok/Pods/leveldb-library/db/builder.cc
+++ /dev/null
@@ -1,79 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#include "db/builder.h"
-
-#include "db/dbformat.h"
-#include "db/filename.h"
-#include "db/table_cache.h"
-#include "db/version_edit.h"
-#include "leveldb/db.h"
-#include "leveldb/env.h"
-#include "leveldb/iterator.h"
-
-namespace leveldb {
-
-Status BuildTable(const std::string& dbname, Env* env, const Options& options,
-                  TableCache* table_cache, Iterator* iter, FileMetaData* meta) {
-  Status s;
-  meta->file_size = 0;
-  iter->SeekToFirst();
-
-  std::string fname = TableFileName(dbname, meta->number);
-  if (iter->Valid()) {
-    WritableFile* file;
-    s = env->NewWritableFile(fname, &file);
-    if (!s.ok()) {
-      return s;
-    }
-
-    TableBuilder* builder = new TableBuilder(options, file);
-    meta->smallest.DecodeFrom(iter->key());
-    for (; iter->Valid(); iter->Next()) {
-      Slice key = iter->key();
-      meta->largest.DecodeFrom(key);
-      builder->Add(key, iter->value());
-    }
-
-    // Finish and check for builder errors
-    s = builder->Finish();
-    if (s.ok()) {
-      meta->file_size = builder->FileSize();
-      assert(meta->file_size > 0);
-    }
-    delete builder;
-
-    // Finish and check for file errors
-    if (s.ok()) {
-      s = file->Sync();
-    }
-    if (s.ok()) {
-      s = file->Close();
-    }
-    delete file;
-    file = nullptr;
-
-    if (s.ok()) {
-      // Verify that the table is usable
-      Iterator* it = table_cache->NewIterator(ReadOptions(), meta->number,
-                                              meta->file_size);
-      s = it->status();
-      delete it;
-    }
-  }
-
-  // Check for input iterator errors
-  if (!iter->status().ok()) {
-    s = iter->status();
-  }
-
-  if (s.ok() && meta->file_size > 0) {
-    // Keep it
-  } else {
-    env->DeleteFile(fname);
-  }
-  return s;
-}
-
-}  // namespace leveldb
diff --git a/assign5/openTok/Pods/leveldb-library/db/builder.h b/assign5/openTok/Pods/leveldb-library/db/builder.h
deleted file mode 100644
index 7bd0b80..0000000
--- a/assign5/openTok/Pods/leveldb-library/db/builder.h
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#ifndef STORAGE_LEVELDB_DB_BUILDER_H_
-#define STORAGE_LEVELDB_DB_BUILDER_H_
-
-#include "leveldb/status.h"
-
-namespace leveldb {
-
-struct Options;
-struct FileMetaData;
-
-class Env;
-class Iterator;
-class TableCache;
-class VersionEdit;
-
-// Build a Table file from the contents of *iter.  The generated file
-// will be named according to meta->number.  On success, the rest of
-// *meta will be filled with metadata about the generated table.
-// If no data is present in *iter, meta->file_size will be set to
-// zero, and no Table file will be produced.
-Status BuildTable(const std::string& dbname, Env* env, const Options& options,
-                  TableCache* table_cache, Iterator* iter, FileMetaData* meta);
-
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_DB_BUILDER_H_
diff --git a/assign5/openTok/Pods/leveldb-library/db/c.cc b/assign5/openTok/Pods/leveldb-library/db/c.cc
deleted file mode 100644
index e0f3367..0000000
--- a/assign5/openTok/Pods/leveldb-library/db/c.cc
+++ /dev/null
@@ -1,566 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#include "leveldb/c.h"
-
-#include <stdlib.h>
-
-#include "leveldb/cache.h"
-#include "leveldb/comparator.h"
-#include "leveldb/db.h"
-#include "leveldb/env.h"
-#include "leveldb/filter_policy.h"
-#include "leveldb/iterator.h"
-#include "leveldb/options.h"
-#include "leveldb/status.h"
-#include "leveldb/write_batch.h"
-
-using leveldb::Cache;
-using leveldb::Comparator;
-using leveldb::CompressionType;
-using leveldb::DB;
-using leveldb::Env;
-using leveldb::FileLock;
-using leveldb::FilterPolicy;
-using leveldb::Iterator;
-using leveldb::kMajorVersion;
-using leveldb::kMinorVersion;
-using leveldb::Logger;
-using leveldb::NewBloomFilterPolicy;
-using leveldb::NewLRUCache;
-using leveldb::Options;
-using leveldb::RandomAccessFile;
-using leveldb::Range;
-using leveldb::ReadOptions;
-using leveldb::SequentialFile;
-using leveldb::Slice;
-using leveldb::Snapshot;
-using leveldb::Status;
-using leveldb::WritableFile;
-using leveldb::WriteBatch;
-using leveldb::WriteOptions;
-
-extern "C" {
-
-struct leveldb_t {
-  DB* rep;
-};
-struct leveldb_iterator_t {
-  Iterator* rep;
-};
-struct leveldb_writebatch_t {
-  WriteBatch rep;
-};
-struct leveldb_snapshot_t {
-  const Snapshot* rep;
-};
-struct leveldb_readoptions_t {
-  ReadOptions rep;
-};
-struct leveldb_writeoptions_t {
-  WriteOptions rep;
-};
-struct leveldb_options_t {
-  Options rep;
-};
-struct leveldb_cache_t {
-  Cache* rep;
-};
-struct leveldb_seqfile_t {
-  SequentialFile* rep;
-};
-struct leveldb_randomfile_t {
-  RandomAccessFile* rep;
-};
-struct leveldb_writablefile_t {
-  WritableFile* rep;
-};
-struct leveldb_logger_t {
-  Logger* rep;
-};
-struct leveldb_filelock_t {
-  FileLock* rep;
-};
-
-struct leveldb_comparator_t : public Comparator {
-  virtual ~leveldb_comparator_t() { (*destructor_)(state_); }
-
-  virtual int Compare(const Slice& a, const Slice& b) const {
-    return (*compare_)(state_, a.data(), a.size(), b.data(), b.size());
-  }
-
-  virtual const char* Name() const { return (*name_)(state_); }
-
-  // No-ops since the C binding does not support key shortening methods.
-  virtual void FindShortestSeparator(std::string*, const Slice&) const {}
-  virtual void FindShortSuccessor(std::string* key) const {}
-
-  void* state_;
-  void (*destructor_)(void*);
-  int (*compare_)(void*, const char* a, size_t alen, const char* b,
-                  size_t blen);
-  const char* (*name_)(void*);
-};
-
-struct leveldb_filterpolicy_t : public FilterPolicy {
-  virtual ~leveldb_filterpolicy_t() { (*destructor_)(state_); }
-
-  virtual const char* Name() const { return (*name_)(state_); }
-
-  virtual void CreateFilter(const Slice* keys, int n, std::string* dst) const {
-    std::vector<const char*> key_pointers(n);
-    std::vector<size_t> key_sizes(n);
-    for (int i = 0; i < n; i++) {
-      key_pointers[i] = keys[i].data();
-      key_sizes[i] = keys[i].size();
-    }
-    size_t len;
-    char* filter = (*create_)(state_, &key_pointers[0], &key_sizes[0], n, &len);
-    dst->append(filter, len);
-    free(filter);
-  }
-
-  virtual bool KeyMayMatch(const Slice& key, const Slice& filter) const {
-    return (*key_match_)(state_, key.data(), key.size(), filter.data(),
-                         filter.size());
-  }
-
-  void* state_;
-  void (*destructor_)(void*);
-  const char* (*name_)(void*);
-  char* (*create_)(void*, const char* const* key_array,
-                   const size_t* key_length_array, int num_keys,
-                   size_t* filter_length);
-  unsigned char (*key_match_)(void*, const char* key, size_t length,
-                              const char* filter, size_t filter_length);
-};
-
-struct leveldb_env_t {
-  Env* rep;
-  bool is_default;
-};
-
-static bool SaveError(char** errptr, const Status& s) {
-  assert(errptr != nullptr);
-  if (s.ok()) {
-    return false;
-  } else if (*errptr == nullptr) {
-    *errptr = strdup(s.ToString().c_str());
-  } else {
-    // TODO(sanjay): Merge with existing error?
-    free(*errptr);
-    *errptr = strdup(s.ToString().c_str());
-  }
-  return true;
-}
-
-static char* CopyString(const std::string& str) {
-  char* result = reinterpret_cast<char*>(malloc(sizeof(char) * str.size()));
-  memcpy(result, str.data(), sizeof(char) * str.size());
-  return result;
-}
-
-leveldb_t* leveldb_open(const leveldb_options_t* options, const char* name,
-                        char** errptr) {
-  DB* db;
-  if (SaveError(errptr, DB::Open(options->rep, std::string(name), &db))) {
-    return nullptr;
-  }
-  leveldb_t* result = new leveldb_t;
-  result->rep = db;
-  return result;
-}
-
-void leveldb_close(leveldb_t* db) {
-  delete db->rep;
-  delete db;
-}
-
-void leveldb_put(leveldb_t* db, const leveldb_writeoptions_t* options,
-                 const char* key, size_t keylen, const char* val, size_t vallen,
-                 char** errptr) {
-  SaveError(errptr,
-            db->rep->Put(options->rep, Slice(key, keylen), Slice(val, vallen)));
-}
-
-void leveldb_delete(leveldb_t* db, const leveldb_writeoptions_t* options,
-                    const char* key, size_t keylen, char** errptr) {
-  SaveError(errptr, db->rep->Delete(options->rep, Slice(key, keylen)));
-}
-
-void leveldb_write(leveldb_t* db, const leveldb_writeoptions_t* options,
-                   leveldb_writebatch_t* batch, char** errptr) {
-  SaveError(errptr, db->rep->Write(options->rep, &batch->rep));
-}
-
-char* leveldb_get(leveldb_t* db, const leveldb_readoptions_t* options,
-                  const char* key, size_t keylen, size_t* vallen,
-                  char** errptr) {
-  char* result = nullptr;
-  std::string tmp;
-  Status s = db->rep->Get(options->rep, Slice(key, keylen), &tmp);
-  if (s.ok()) {
-    *vallen = tmp.size();
-    result = CopyString(tmp);
-  } else {
-    *vallen = 0;
-    if (!s.IsNotFound()) {
-      SaveError(errptr, s);
-    }
-  }
-  return result;
-}
-
-leveldb_iterator_t* leveldb_create_iterator(
-    leveldb_t* db, const leveldb_readoptions_t* options) {
-  leveldb_iterator_t* result = new leveldb_iterator_t;
-  result->rep = db->rep->NewIterator(options->rep);
-  return result;
-}
-
-const leveldb_snapshot_t* leveldb_create_snapshot(leveldb_t* db) {
-  leveldb_snapshot_t* result = new leveldb_snapshot_t;
-  result->rep = db->rep->GetSnapshot();
-  return result;
-}
-
-void leveldb_release_snapshot(leveldb_t* db,
-                              const leveldb_snapshot_t* snapshot) {
-  db->rep->ReleaseSnapshot(snapshot->rep);
-  delete snapshot;
-}
-
-char* leveldb_property_value(leveldb_t* db, const char* propname) {
-  std::string tmp;
-  if (db->rep->GetProperty(Slice(propname), &tmp)) {
-    // We use strdup() since we expect human readable output.
-    return strdup(tmp.c_str());
-  } else {
-    return nullptr;
-  }
-}
-
-void leveldb_approximate_sizes(leveldb_t* db, int num_ranges,
-                               const char* const* range_start_key,
-                               const size_t* range_start_key_len,
-                               const char* const* range_limit_key,
-                               const size_t* range_limit_key_len,
-                               uint64_t* sizes) {
-  Range* ranges = new Range[num_ranges];
-  for (int i = 0; i < num_ranges; i++) {
-    ranges[i].start = Slice(range_start_key[i], range_start_key_len[i]);
-    ranges[i].limit = Slice(range_limit_key[i], range_limit_key_len[i]);
-  }
-  db->rep->GetApproximateSizes(ranges, num_ranges, sizes);
-  delete[] ranges;
-}
-
-void leveldb_compact_range(leveldb_t* db, const char* start_key,
-                           size_t start_key_len, const char* limit_key,
-                           size_t limit_key_len) {
-  Slice a, b;
-  db->rep->CompactRange(
-      // Pass null Slice if corresponding "const char*" is null
-      (start_key ? (a = Slice(start_key, start_key_len), &a) : nullptr),
-      (limit_key ? (b = Slice(limit_key, limit_key_len), &b) : nullptr));
-}
-
-void leveldb_destroy_db(const leveldb_options_t* options, const char* name,
-                        char** errptr) {
-  SaveError(errptr, DestroyDB(name, options->rep));
-}
-
-void leveldb_repair_db(const leveldb_options_t* options, const char* name,
-                       char** errptr) {
-  SaveError(errptr, RepairDB(name, options->rep));
-}
-
-void leveldb_iter_destroy(leveldb_iterator_t* iter) {
-  delete iter->rep;
-  delete iter;
-}
-
-unsigned char leveldb_iter_valid(const leveldb_iterator_t* iter) {
-  return iter->rep->Valid();
-}
-
-void leveldb_iter_seek_to_first(leveldb_iterator_t* iter) {
-  iter->rep->SeekToFirst();
-}
-
-void leveldb_iter_seek_to_last(leveldb_iterator_t* iter) {
-  iter->rep->SeekToLast();
-}
-
-void leveldb_iter_seek(leveldb_iterator_t* iter, const char* k, size_t klen) {
-  iter->rep->Seek(Slice(k, klen));
-}
-
-void leveldb_iter_next(leveldb_iterator_t* iter) { iter->rep->Next(); }
-
-void leveldb_iter_prev(leveldb_iterator_t* iter) { iter->rep->Prev(); }
-
-const char* leveldb_iter_key(const leveldb_iterator_t* iter, size_t* klen) {
-  Slice s = iter->rep->key();
-  *klen = s.size();
-  return s.data();
-}
-
-const char* leveldb_iter_value(const leveldb_iterator_t* iter, size_t* vlen) {
-  Slice s = iter->rep->value();
-  *vlen = s.size();
-  return s.data();
-}
-
-void leveldb_iter_get_error(const leveldb_iterator_t* iter, char** errptr) {
-  SaveError(errptr, iter->rep->status());
-}
-
-leveldb_writebatch_t* leveldb_writebatch_create() {
-  return new leveldb_writebatch_t;
-}
-
-void leveldb_writebatch_destroy(leveldb_writebatch_t* b) { delete b; }
-
-void leveldb_writebatch_clear(leveldb_writebatch_t* b) { b->rep.Clear(); }
-
-void leveldb_writebatch_put(leveldb_writebatch_t* b, const char* key,
-                            size_t klen, const char* val, size_t vlen) {
-  b->rep.Put(Slice(key, klen), Slice(val, vlen));
-}
-
-void leveldb_writebatch_delete(leveldb_writebatch_t* b, const char* key,
-                               size_t klen) {
-  b->rep.Delete(Slice(key, klen));
-}
-
-void leveldb_writebatch_iterate(const leveldb_writebatch_t* b, void* state,
-                                void (*put)(void*, const char* k, size_t klen,
-                                            const char* v, size_t vlen),
-                                void (*deleted)(void*, const char* k,
-                                                size_t klen)) {
-  class H : public WriteBatch::Handler {
-   public:
-    void* state_;
-    void (*put_)(void*, const char* k, size_t klen, const char* v, size_t vlen);
-    void (*deleted_)(void*, const char* k, size_t klen);
-    virtual void Put(const Slice& key, const Slice& value) {
-      (*put_)(state_, key.data(), key.size(), value.data(), value.size());
-    }
-    virtual void Delete(const Slice& key) {
-      (*deleted_)(state_, key.data(), key.size());
-    }
-  };
-  H handler;
-  handler.state_ = state;
-  handler.put_ = put;
-  handler.deleted_ = deleted;
-  b->rep.Iterate(&handler);
-}
-
-void leveldb_writebatch_append(leveldb_writebatch_t* destination,
-                               const leveldb_writebatch_t* source) {
-  destination->rep.Append(source->rep);
-}
-
-leveldb_options_t* leveldb_options_create() { return new leveldb_options_t; }
-
-void leveldb_options_destroy(leveldb_options_t* options) { delete options; }
-
-void leveldb_options_set_comparator(leveldb_options_t* opt,
-                                    leveldb_comparator_t* cmp) {
-  opt->rep.comparator = cmp;
-}
-
-void leveldb_options_set_filter_policy(leveldb_options_t* opt,
-                                       leveldb_filterpolicy_t* policy) {
-  opt->rep.filter_policy = policy;
-}
-
-void leveldb_options_set_create_if_missing(leveldb_options_t* opt,
-                                           unsigned char v) {
-  opt->rep.create_if_missing = v;
-}
-
-void leveldb_options_set_error_if_exists(leveldb_options_t* opt,
-                                         unsigned char v) {
-  opt->rep.error_if_exists = v;
-}
-
-void leveldb_options_set_paranoid_checks(leveldb_options_t* opt,
-                                         unsigned char v) {
-  opt->rep.paranoid_checks = v;
-}
-
-void leveldb_options_set_env(leveldb_options_t* opt, leveldb_env_t* env) {
-  opt->rep.env = (env ? env->rep : nullptr);
-}
-
-void leveldb_options_set_info_log(leveldb_options_t* opt, leveldb_logger_t* l) {
-  opt->rep.info_log = (l ? l->rep : nullptr);
-}
-
-void leveldb_options_set_write_buffer_size(leveldb_options_t* opt, size_t s) {
-  opt->rep.write_buffer_size = s;
-}
-
-void leveldb_options_set_max_open_files(leveldb_options_t* opt, int n) {
-  opt->rep.max_open_files = n;
-}
-
-void leveldb_options_set_cache(leveldb_options_t* opt, leveldb_cache_t* c) {
-  opt->rep.block_cache = c->rep;
-}
-
-void leveldb_options_set_block_size(leveldb_options_t* opt, size_t s) {
-  opt->rep.block_size = s;
-}
-
-void leveldb_options_set_block_restart_interval(leveldb_options_t* opt, int n) {
-  opt->rep.block_restart_interval = n;
-}
-
-void leveldb_options_set_max_file_size(leveldb_options_t* opt, size_t s) {
-  opt->rep.max_file_size = s;
-}
-
-void leveldb_options_set_compression(leveldb_options_t* opt, int t) {
-  opt->rep.compression = static_cast<CompressionType>(t);
-}
-
-leveldb_comparator_t* leveldb_comparator_create(
-    void* state, void (*destructor)(void*),
-    int (*compare)(void*, const char* a, size_t alen, const char* b,
-                   size_t blen),
-    const char* (*name)(void*)) {
-  leveldb_comparator_t* result = new leveldb_comparator_t;
-  result->state_ = state;
-  result->destructor_ = destructor;
-  result->compare_ = compare;
-  result->name_ = name;
-  return result;
-}
-
-void leveldb_comparator_destroy(leveldb_comparator_t* cmp) { delete cmp; }
-
-leveldb_filterpolicy_t* leveldb_filterpolicy_create(
-    void* state, void (*destructor)(void*),
-    char* (*create_filter)(void*, const char* const* key_array,
-                           const size_t* key_length_array, int num_keys,
-                           size_t* filter_length),
-    unsigned char (*key_may_match)(void*, const char* key, size_t length,
-                                   const char* filter, size_t filter_length),
-    const char* (*name)(void*)) {
-  leveldb_filterpolicy_t* result = new leveldb_filterpolicy_t;
-  result->state_ = state;
-  result->destructor_ = destructor;
-  result->create_ = create_filter;
-  result->key_match_ = key_may_match;
-  result->name_ = name;
-  return result;
-}
-
-void leveldb_filterpolicy_destroy(leveldb_filterpolicy_t* filter) {
-  delete filter;
-}
-
-leveldb_filterpolicy_t* leveldb_filterpolicy_create_bloom(int bits_per_key) {
-  // Make a leveldb_filterpolicy_t, but override all of its methods so
-  // they delegate to a NewBloomFilterPolicy() instead of user
-  // supplied C functions.
-  struct Wrapper : public leveldb_filterpolicy_t {
-    static void DoNothing(void*) {}
-
-    ~Wrapper() { delete rep_; }
-    const char* Name() const { return rep_->Name(); }
-    void CreateFilter(const Slice* keys, int n, std::string* dst) const {
-      return rep_->CreateFilter(keys, n, dst);
-    }
-    bool KeyMayMatch(const Slice& key, const Slice& filter) const {
-      return rep_->KeyMayMatch(key, filter);
-    }
-
-    const FilterPolicy* rep_;
-  };
-  Wrapper* wrapper = new Wrapper;
-  wrapper->rep_ = NewBloomFilterPolicy(bits_per_key);
-  wrapper->state_ = nullptr;
-  wrapper->destructor_ = &Wrapper::DoNothing;
-  return wrapper;
-}
-
-leveldb_readoptions_t* leveldb_readoptions_create() {
-  return new leveldb_readoptions_t;
-}
-
-void leveldb_readoptions_destroy(leveldb_readoptions_t* opt) { delete opt; }
-
-void leveldb_readoptions_set_verify_checksums(leveldb_readoptions_t* opt,
-                                              unsigned char v) {
-  opt->rep.verify_checksums = v;
-}
-
-void leveldb_readoptions_set_fill_cache(leveldb_readoptions_t* opt,
-                                        unsigned char v) {
-  opt->rep.fill_cache = v;
-}
-
-void leveldb_readoptions_set_snapshot(leveldb_readoptions_t* opt,
-                                      const leveldb_snapshot_t* snap) {
-  opt->rep.snapshot = (snap ? snap->rep : nullptr);
-}
-
-leveldb_writeoptions_t* leveldb_writeoptions_create() {
-  return new leveldb_writeoptions_t;
-}
-
-void leveldb_writeoptions_destroy(leveldb_writeoptions_t* opt) { delete opt; }
-
-void leveldb_writeoptions_set_sync(leveldb_writeoptions_t* opt,
-                                   unsigned char v) {
-  opt->rep.sync = v;
-}
-
-leveldb_cache_t* leveldb_cache_create_lru(size_t capacity) {
-  leveldb_cache_t* c = new leveldb_cache_t;
-  c->rep = NewLRUCache(capacity);
-  return c;
-}
-
-void leveldb_cache_destroy(leveldb_cache_t* cache) {
-  delete cache->rep;
-  delete cache;
-}
-
-leveldb_env_t* leveldb_create_default_env() {
-  leveldb_env_t* result = new leveldb_env_t;
-  result->rep = Env::Default();
-  result->is_default = true;
-  return result;
-}
-
-void leveldb_env_destroy(leveldb_env_t* env) {
-  if (!env->is_default) delete env->rep;
-  delete env;
-}
-
-char* leveldb_env_get_test_directory(leveldb_env_t* env) {
-  std::string result;
-  if (!env->rep->GetTestDirectory(&result).ok()) {
-    return nullptr;
-  }
-
-  char* buffer = static_cast<char*>(malloc(result.size() + 1));
-  memcpy(buffer, result.data(), result.size());
-  buffer[result.size()] = '\0';
-  return buffer;
-}
-
-void leveldb_free(void* ptr) { free(ptr); }
-
-int leveldb_major_version() { return kMajorVersion; }
-
-int leveldb_minor_version() { return kMinorVersion; }
-
-}  // end extern "C"
diff --git a/assign5/openTok/Pods/leveldb-library/db/db_impl.cc b/assign5/openTok/Pods/leveldb-library/db/db_impl.cc
deleted file mode 100644
index 761ebf6..0000000
--- a/assign5/openTok/Pods/leveldb-library/db/db_impl.cc
+++ /dev/null
@@ -1,1550 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#include "db/db_impl.h"
-
-#include <stdint.h>
-#include <stdio.h>
-
-#include <algorithm>
-#include <atomic>
-#include <set>
-#include <string>
-#include <vector>
-
-#include "db/builder.h"
-#include "db/db_iter.h"
-#include "db/dbformat.h"
-#include "db/filename.h"
-#include "db/log_reader.h"
-#include "db/log_writer.h"
-#include "db/memtable.h"
-#include "db/table_cache.h"
-#include "db/version_set.h"
-#include "db/write_batch_internal.h"
-#include "leveldb/db.h"
-#include "leveldb/env.h"
-#include "leveldb/status.h"
-#include "leveldb/table.h"
-#include "leveldb/table_builder.h"
-#include "port/port.h"
-#include "table/block.h"
-#include "table/merger.h"
-#include "table/two_level_iterator.h"
-#include "util/coding.h"
-#include "util/logging.h"
-#include "util/mutexlock.h"
-
-namespace leveldb {
-
-const int kNumNonTableCacheFiles = 10;
-
-// Information kept for every waiting writer
-struct DBImpl::Writer {
-  explicit Writer(port::Mutex* mu)
-      : batch(nullptr), sync(false), done(false), cv(mu) {}
-
-  Status status;
-  WriteBatch* batch;
-  bool sync;
-  bool done;
-  port::CondVar cv;
-};
-
-struct DBImpl::CompactionState {
-  // Files produced by compaction
-  struct Output {
-    uint64_t number;
-    uint64_t file_size;
-    InternalKey smallest, largest;
-  };
-
-  Output* current_output() { return &outputs[outputs.size() - 1]; }
-
-  explicit CompactionState(Compaction* c)
-      : compaction(c),
-        smallest_snapshot(0),
-        outfile(nullptr),
-        builder(nullptr),
-        total_bytes(0) {}
-
-  Compaction* const compaction;
-
-  // Sequence numbers < smallest_snapshot are not significant since we
-  // will never have to service a snapshot below smallest_snapshot.
-  // Therefore if we have seen a sequence number S <= smallest_snapshot,
-  // we can drop all entries for the same key with sequence numbers < S.
-  SequenceNumber smallest_snapshot;
-
-  std::vector<Output> outputs;
-
-  // State kept for output being generated
-  WritableFile* outfile;
-  TableBuilder* builder;
-
-  uint64_t total_bytes;
-};
-
-// Fix user-supplied options to be reasonable
-template <class T, class V>
-static void ClipToRange(T* ptr, V minvalue, V maxvalue) {
-  if (static_cast<V>(*ptr) > maxvalue) *ptr = maxvalue;
-  if (static_cast<V>(*ptr) < minvalue) *ptr = minvalue;
-}
-Options SanitizeOptions(const std::string& dbname,
-                        const InternalKeyComparator* icmp,
-                        const InternalFilterPolicy* ipolicy,
-                        const Options& src) {
-  Options result = src;
-  result.comparator = icmp;
-  result.filter_policy = (src.filter_policy != nullptr) ? ipolicy : nullptr;
-  ClipToRange(&result.max_open_files, 64 + kNumNonTableCacheFiles, 50000);
-  ClipToRange(&result.write_buffer_size, 64 << 10, 1 << 30);
-  ClipToRange(&result.max_file_size, 1 << 20, 1 << 30);
-  ClipToRange(&result.block_size, 1 << 10, 4 << 20);
-  if (result.info_log == nullptr) {
-    // Open a log file in the same directory as the db
-    src.env->CreateDir(dbname);  // In case it does not exist
-    src.env->RenameFile(InfoLogFileName(dbname), OldInfoLogFileName(dbname));
-    Status s = src.env->NewLogger(InfoLogFileName(dbname), &result.info_log);
-    if (!s.ok()) {
-      // No place suitable for logging
-      result.info_log = nullptr;
-    }
-  }
-  if (result.block_cache == nullptr) {
-    result.block_cache = NewLRUCache(8 << 20);
-  }
-  return result;
-}
-
-static int TableCacheSize(const Options& sanitized_options) {
-  // Reserve ten files or so for other uses and give the rest to TableCache.
-  return sanitized_options.max_open_files - kNumNonTableCacheFiles;
-}
-
-DBImpl::DBImpl(const Options& raw_options, const std::string& dbname)
-    : env_(raw_options.env),
-      internal_comparator_(raw_options.comparator),
-      internal_filter_policy_(raw_options.filter_policy),
-      options_(SanitizeOptions(dbname, &internal_comparator_,
-                               &internal_filter_policy_, raw_options)),
-      owns_info_log_(options_.info_log != raw_options.info_log),
-      owns_cache_(options_.block_cache != raw_options.block_cache),
-      dbname_(dbname),
-      table_cache_(new TableCache(dbname_, options_, TableCacheSize(options_))),
-      db_lock_(nullptr),
-      shutting_down_(false),
-      background_work_finished_signal_(&mutex_),
-      mem_(nullptr),
-      imm_(nullptr),
-      has_imm_(false),
-      logfile_(nullptr),
-      logfile_number_(0),
-      log_(nullptr),
-      seed_(0),
-      tmp_batch_(new WriteBatch),
-      background_compaction_scheduled_(false),
-      manual_compaction_(nullptr),
-      versions_(new VersionSet(dbname_, &options_, table_cache_,
-                               &internal_comparator_)) {}
-
-DBImpl::~DBImpl() {
-  // Wait for background work to finish.
-  mutex_.Lock();
-  shutting_down_.store(true, std::memory_order_release);
-  while (background_compaction_scheduled_) {
-    background_work_finished_signal_.Wait();
-  }
-  mutex_.Unlock();
-
-  if (db_lock_ != nullptr) {
-    env_->UnlockFile(db_lock_);
-  }
-
-  delete versions_;
-  if (mem_ != nullptr) mem_->Unref();
-  if (imm_ != nullptr) imm_->Unref();
-  delete tmp_batch_;
-  delete log_;
-  delete logfile_;
-  delete table_cache_;
-
-  if (owns_info_log_) {
-    delete options_.info_log;
-  }
-  if (owns_cache_) {
-    delete options_.block_cache;
-  }
-}
-
-Status DBImpl::NewDB() {
-  VersionEdit new_db;
-  new_db.SetComparatorName(user_comparator()->Name());
-  new_db.SetLogNumber(0);
-  new_db.SetNextFile(2);
-  new_db.SetLastSequence(0);
-
-  const std::string manifest = DescriptorFileName(dbname_, 1);
-  WritableFile* file;
-  Status s = env_->NewWritableFile(manifest, &file);
-  if (!s.ok()) {
-    return s;
-  }
-  {
-    log::Writer log(file);
-    std::string record;
-    new_db.EncodeTo(&record);
-    s = log.AddRecord(record);
-    if (s.ok()) {
-      s = file->Close();
-    }
-  }
-  delete file;
-  if (s.ok()) {
-    // Make "CURRENT" file that points to the new manifest file.
-    s = SetCurrentFile(env_, dbname_, 1);
-  } else {
-    env_->DeleteFile(manifest);
-  }
-  return s;
-}
-
-void DBImpl::MaybeIgnoreError(Status* s) const {
-  if (s->ok() || options_.paranoid_checks) {
-    // No change needed
-  } else {
-    Log(options_.info_log, "Ignoring error %s", s->ToString().c_str());
-    *s = Status::OK();
-  }
-}
-
-void DBImpl::DeleteObsoleteFiles() {
-  mutex_.AssertHeld();
-
-  if (!bg_error_.ok()) {
-    // After a background error, we don't know whether a new version may
-    // or may not have been committed, so we cannot safely garbage collect.
-    return;
-  }
-
-  // Make a set of all of the live files
-  std::set<uint64_t> live = pending_outputs_;
-  versions_->AddLiveFiles(&live);
-
-  std::vector<std::string> filenames;
-  env_->GetChildren(dbname_, &filenames);  // Ignoring errors on purpose
-  uint64_t number;
-  FileType type;
-  for (size_t i = 0; i < filenames.size(); i++) {
-    if (ParseFileName(filenames[i], &number, &type)) {
-      bool keep = true;
-      switch (type) {
-        case kLogFile:
-          keep = ((number >= versions_->LogNumber()) ||
-                  (number == versions_->PrevLogNumber()));
-          break;
-        case kDescriptorFile:
-          // Keep my manifest file, and any newer incarnations'
-          // (in case there is a race that allows other incarnations)
-          keep = (number >= versions_->ManifestFileNumber());
-          break;
-        case kTableFile:
-          keep = (live.find(number) != live.end());
-          break;
-        case kTempFile:
-          // Any temp files that are currently being written to must
-          // be recorded in pending_outputs_, which is inserted into "live"
-          keep = (live.find(number) != live.end());
-          break;
-        case kCurrentFile:
-        case kDBLockFile:
-        case kInfoLogFile:
-          keep = true;
-          break;
-      }
-
-      if (!keep) {
-        if (type == kTableFile) {
-          table_cache_->Evict(number);
-        }
-        Log(options_.info_log, "Delete type=%d #%lld\n", static_cast<int>(type),
-            static_cast<unsigned long long>(number));
-        env_->DeleteFile(dbname_ + "/" + filenames[i]);
-      }
-    }
-  }
-}
-
-Status DBImpl::Recover(VersionEdit* edit, bool* save_manifest) {
-  mutex_.AssertHeld();
-
-  // Ignore error from CreateDir since the creation of the DB is
-  // committed only when the descriptor is created, and this directory
-  // may already exist from a previous failed creation attempt.
-  env_->CreateDir(dbname_);
-  assert(db_lock_ == nullptr);
-  Status s = env_->LockFile(LockFileName(dbname_), &db_lock_);
-  if (!s.ok()) {
-    return s;
-  }
-
-  if (!env_->FileExists(CurrentFileName(dbname_))) {
-    if (options_.create_if_missing) {
-      s = NewDB();
-      if (!s.ok()) {
-        return s;
-      }
-    } else {
-      return Status::InvalidArgument(
-          dbname_, "does not exist (create_if_missing is false)");
-    }
-  } else {
-    if (options_.error_if_exists) {
-      return Status::InvalidArgument(dbname_,
-                                     "exists (error_if_exists is true)");
-    }
-  }
-
-  s = versions_->Recover(save_manifest);
-  if (!s.ok()) {
-    return s;
-  }
-  SequenceNumber max_sequence(0);
-
-  // Recover from all newer log files than the ones named in the
-  // descriptor (new log files may have been added by the previous
-  // incarnation without registering them in the descriptor).
-  //
-  // Note that PrevLogNumber() is no longer used, but we pay
-  // attention to it in case we are recovering a database
-  // produced by an older version of leveldb.
-  const uint64_t min_log = versions_->LogNumber();
-  const uint64_t prev_log = versions_->PrevLogNumber();
-  std::vector<std::string> filenames;
-  s = env_->GetChildren(dbname_, &filenames);
-  if (!s.ok()) {
-    return s;
-  }
-  std::set<uint64_t> expected;
-  versions_->AddLiveFiles(&expected);
-  uint64_t number;
-  FileType type;
-  std::vector<uint64_t> logs;
-  for (size_t i = 0; i < filenames.size(); i++) {
-    if (ParseFileName(filenames[i], &number, &type)) {
-      expected.erase(number);
-      if (type == kLogFile && ((number >= min_log) || (number == prev_log)))
-        logs.push_back(number);
-    }
-  }
-  if (!expected.empty()) {
-    char buf[50];
-    snprintf(buf, sizeof(buf), "%d missing files; e.g.",
-             static_cast<int>(expected.size()));
-    return Status::Corruption(buf, TableFileName(dbname_, *(expected.begin())));
-  }
-
-  // Recover in the order in which the logs were generated
-  std::sort(logs.begin(), logs.end());
-  for (size_t i = 0; i < logs.size(); i++) {
-    s = RecoverLogFile(logs[i], (i == logs.size() - 1), save_manifest, edit,
-                       &max_sequence);
-    if (!s.ok()) {
-      return s;
-    }
-
-    // The previous incarnation may not have written any MANIFEST
-    // records after allocating this log number.  So we manually
-    // update the file number allocation counter in VersionSet.
-    versions_->MarkFileNumberUsed(logs[i]);
-  }
-
-  if (versions_->LastSequence() < max_sequence) {
-    versions_->SetLastSequence(max_sequence);
-  }
-
-  return Status::OK();
-}
-
-Status DBImpl::RecoverLogFile(uint64_t log_number, bool last_log,
-                              bool* save_manifest, VersionEdit* edit,
-                              SequenceNumber* max_sequence) {
-  struct LogReporter : public log::Reader::Reporter {
-    Env* env;
-    Logger* info_log;
-    const char* fname;
-    Status* status;  // null if options_.paranoid_checks==false
-    virtual void Corruption(size_t bytes, const Status& s) {
-      Log(info_log, "%s%s: dropping %d bytes; %s",
-          (this->status == nullptr ? "(ignoring error) " : ""), fname,
-          static_cast<int>(bytes), s.ToString().c_str());
-      if (this->status != nullptr && this->status->ok()) *this->status = s;
-    }
-  };
-
-  mutex_.AssertHeld();
-
-  // Open the log file
-  std::string fname = LogFileName(dbname_, log_number);
-  SequentialFile* file;
-  Status status = env_->NewSequentialFile(fname, &file);
-  if (!status.ok()) {
-    MaybeIgnoreError(&status);
-    return status;
-  }
-
-  // Create the log reader.
-  LogReporter reporter;
-  reporter.env = env_;
-  reporter.info_log = options_.info_log;
-  reporter.fname = fname.c_str();
-  reporter.status = (options_.paranoid_checks ? &status : nullptr);
-  // We intentionally make log::Reader do checksumming even if
-  // paranoid_checks==false so that corruptions cause entire commits
-  // to be skipped instead of propagating bad information (like overly
-  // large sequence numbers).
-  log::Reader reader(file, &reporter, true /*checksum*/, 0 /*initial_offset*/);
-  Log(options_.info_log, "Recovering log #%llu",
-      (unsigned long long)log_number);
-
-  // Read all the records and add to a memtable
-  std::string scratch;
-  Slice record;
-  WriteBatch batch;
-  int compactions = 0;
-  MemTable* mem = nullptr;
-  while (reader.ReadRecord(&record, &scratch) && status.ok()) {
-    if (record.size() < 12) {
-      reporter.Corruption(record.size(),
-                          Status::Corruption("log record too small"));
-      continue;
-    }
-    WriteBatchInternal::SetContents(&batch, record);
-
-    if (mem == nullptr) {
-      mem = new MemTable(internal_comparator_);
-      mem->Ref();
-    }
-    status = WriteBatchInternal::InsertInto(&batch, mem);
-    MaybeIgnoreError(&status);
-    if (!status.ok()) {
-      break;
-    }
-    const SequenceNumber last_seq = WriteBatchInternal::Sequence(&batch) +
-                                    WriteBatchInternal::Count(&batch) - 1;
-    if (last_seq > *max_sequence) {
-      *max_sequence = last_seq;
-    }
-
-    if (mem->ApproximateMemoryUsage() > options_.write_buffer_size) {
-      compactions++;
-      *save_manifest = true;
-      status = WriteLevel0Table(mem, edit, nullptr);
-      mem->Unref();
-      mem = nullptr;
-      if (!status.ok()) {
-        // Reflect errors immediately so that conditions like full
-        // file-systems cause the DB::Open() to fail.
-        break;
-      }
-    }
-  }
-
-  delete file;
-
-  // See if we should keep reusing the last log file.
-  if (status.ok() && options_.reuse_logs && last_log && compactions == 0) {
-    assert(logfile_ == nullptr);
-    assert(log_ == nullptr);
-    assert(mem_ == nullptr);
-    uint64_t lfile_size;
-    if (env_->GetFileSize(fname, &lfile_size).ok() &&
-        env_->NewAppendableFile(fname, &logfile_).ok()) {
-      Log(options_.info_log, "Reusing old log %s \n", fname.c_str());
-      log_ = new log::Writer(logfile_, lfile_size);
-      logfile_number_ = log_number;
-      if (mem != nullptr) {
-        mem_ = mem;
-        mem = nullptr;
-      } else {
-        // mem can be nullptr if lognum exists but was empty.
-        mem_ = new MemTable(internal_comparator_);
-        mem_->Ref();
-      }
-    }
-  }
-
-  if (mem != nullptr) {
-    // mem did not get reused; compact it.
-    if (status.ok()) {
-      *save_manifest = true;
-      status = WriteLevel0Table(mem, edit, nullptr);
-    }
-    mem->Unref();
-  }
-
-  return status;
-}
-
-Status DBImpl::WriteLevel0Table(MemTable* mem, VersionEdit* edit,
-                                Version* base) {
-  mutex_.AssertHeld();
-  const uint64_t start_micros = env_->NowMicros();
-  FileMetaData meta;
-  meta.number = versions_->NewFileNumber();
-  pending_outputs_.insert(meta.number);
-  Iterator* iter = mem->NewIterator();
-  Log(options_.info_log, "Level-0 table #%llu: started",
-      (unsigned long long)meta.number);
-
-  Status s;
-  {
-    mutex_.Unlock();
-    s = BuildTable(dbname_, env_, options_, table_cache_, iter, &meta);
-    mutex_.Lock();
-  }
-
-  Log(options_.info_log, "Level-0 table #%llu: %lld bytes %s",
-      (unsigned long long)meta.number, (unsigned long long)meta.file_size,
-      s.ToString().c_str());
-  delete iter;
-  pending_outputs_.erase(meta.number);
-
-  // Note that if file_size is zero, the file has been deleted and
-  // should not be added to the manifest.
-  int level = 0;
-  if (s.ok() && meta.file_size > 0) {
-    const Slice min_user_key = meta.smallest.user_key();
-    const Slice max_user_key = meta.largest.user_key();
-    if (base != nullptr) {
-      level = base->PickLevelForMemTableOutput(min_user_key, max_user_key);
-    }
-    edit->AddFile(level, meta.number, meta.file_size, meta.smallest,
-                  meta.largest);
-  }
-
-  CompactionStats stats;
-  stats.micros = env_->NowMicros() - start_micros;
-  stats.bytes_written = meta.file_size;
-  stats_[level].Add(stats);
-  return s;
-}
-
-void DBImpl::CompactMemTable() {
-  mutex_.AssertHeld();
-  assert(imm_ != nullptr);
-
-  // Save the contents of the memtable as a new Table
-  VersionEdit edit;
-  Version* base = versions_->current();
-  base->Ref();
-  Status s = WriteLevel0Table(imm_, &edit, base);
-  base->Unref();
-
-  if (s.ok() && shutting_down_.load(std::memory_order_acquire)) {
-    s = Status::IOError("Deleting DB during memtable compaction");
-  }
-
-  // Replace immutable memtable with the generated Table
-  if (s.ok()) {
-    edit.SetPrevLogNumber(0);
-    edit.SetLogNumber(logfile_number_);  // Earlier logs no longer needed
-    s = versions_->LogAndApply(&edit, &mutex_);
-  }
-
-  if (s.ok()) {
-    // Commit to the new state
-    imm_->Unref();
-    imm_ = nullptr;
-    has_imm_.store(false, std::memory_order_release);
-    DeleteObsoleteFiles();
-  } else {
-    RecordBackgroundError(s);
-  }
-}
-
-void DBImpl::CompactRange(const Slice* begin, const Slice* end) {
-  int max_level_with_files = 1;
-  {
-    MutexLock l(&mutex_);
-    Version* base = versions_->current();
-    for (int level = 1; level < config::kNumLevels; level++) {
-      if (base->OverlapInLevel(level, begin, end)) {
-        max_level_with_files = level;
-      }
-    }
-  }
-  TEST_CompactMemTable();  // TODO(sanjay): Skip if memtable does not overlap
-  for (int level = 0; level < max_level_with_files; level++) {
-    TEST_CompactRange(level, begin, end);
-  }
-}
-
-void DBImpl::TEST_CompactRange(int level, const Slice* begin,
-                               const Slice* end) {
-  assert(level >= 0);
-  assert(level + 1 < config::kNumLevels);
-
-  InternalKey begin_storage, end_storage;
-
-  ManualCompaction manual;
-  manual.level = level;
-  manual.done = false;
-  if (begin == nullptr) {
-    manual.begin = nullptr;
-  } else {
-    begin_storage = InternalKey(*begin, kMaxSequenceNumber, kValueTypeForSeek);
-    manual.begin = &begin_storage;
-  }
-  if (end == nullptr) {
-    manual.end = nullptr;
-  } else {
-    end_storage = InternalKey(*end, 0, static_cast<ValueType>(0));
-    manual.end = &end_storage;
-  }
-
-  MutexLock l(&mutex_);
-  while (!manual.done && !shutting_down_.load(std::memory_order_acquire) &&
-         bg_error_.ok()) {
-    if (manual_compaction_ == nullptr) {  // Idle
-      manual_compaction_ = &manual;
-      MaybeScheduleCompaction();
-    } else {  // Running either my compaction or another compaction.
-      background_work_finished_signal_.Wait();
-    }
-  }
-  if (manual_compaction_ == &manual) {
-    // Cancel my manual compaction since we aborted early for some reason.
-    manual_compaction_ = nullptr;
-  }
-}
-
-Status DBImpl::TEST_CompactMemTable() {
-  // nullptr batch means just wait for earlier writes to be done
-  Status s = Write(WriteOptions(), nullptr);
-  if (s.ok()) {
-    // Wait until the compaction completes
-    MutexLock l(&mutex_);
-    while (imm_ != nullptr && bg_error_.ok()) {
-      background_work_finished_signal_.Wait();
-    }
-    if (imm_ != nullptr) {
-      s = bg_error_;
-    }
-  }
-  return s;
-}
-
-void DBImpl::RecordBackgroundError(const Status& s) {
-  mutex_.AssertHeld();
-  if (bg_error_.ok()) {
-    bg_error_ = s;
-    background_work_finished_signal_.SignalAll();
-  }
-}
-
-void DBImpl::MaybeScheduleCompaction() {
-  mutex_.AssertHeld();
-  if (background_compaction_scheduled_) {
-    // Already scheduled
-  } else if (shutting_down_.load(std::memory_order_acquire)) {
-    // DB is being deleted; no more background compactions
-  } else if (!bg_error_.ok()) {
-    // Already got an error; no more changes
-  } else if (imm_ == nullptr && manual_compaction_ == nullptr &&
-             !versions_->NeedsCompaction()) {
-    // No work to be done
-  } else {
-    background_compaction_scheduled_ = true;
-    env_->Schedule(&DBImpl::BGWork, this);
-  }
-}
-
-void DBImpl::BGWork(void* db) {
-  reinterpret_cast<DBImpl*>(db)->BackgroundCall();
-}
-
-void DBImpl::BackgroundCall() {
-  MutexLock l(&mutex_);
-  assert(background_compaction_scheduled_);
-  if (shutting_down_.load(std::memory_order_acquire)) {
-    // No more background work when shutting down.
-  } else if (!bg_error_.ok()) {
-    // No more background work after a background error.
-  } else {
-    BackgroundCompaction();
-  }
-
-  background_compaction_scheduled_ = false;
-
-  // Previous compaction may have produced too many files in a level,
-  // so reschedule another compaction if needed.
-  MaybeScheduleCompaction();
-  background_work_finished_signal_.SignalAll();
-}
-
-void DBImpl::BackgroundCompaction() {
-  mutex_.AssertHeld();
-
-  if (imm_ != nullptr) {
-    CompactMemTable();
-    return;
-  }
-
-  Compaction* c;
-  bool is_manual = (manual_compaction_ != nullptr);
-  InternalKey manual_end;
-  if (is_manual) {
-    ManualCompaction* m = manual_compaction_;
-    c = versions_->CompactRange(m->level, m->begin, m->end);
-    m->done = (c == nullptr);
-    if (c != nullptr) {
-      manual_end = c->input(0, c->num_input_files(0) - 1)->largest;
-    }
-    Log(options_.info_log,
-        "Manual compaction at level-%d from %s .. %s; will stop at %s\n",
-        m->level, (m->begin ? m->begin->DebugString().c_str() : "(begin)"),
-        (m->end ? m->end->DebugString().c_str() : "(end)"),
-        (m->done ? "(end)" : manual_end.DebugString().c_str()));
-  } else {
-    c = versions_->PickCompaction();
-  }
-
-  Status status;
-  if (c == nullptr) {
-    // Nothing to do
-  } else if (!is_manual && c->IsTrivialMove()) {
-    // Move file to next level
-    assert(c->num_input_files(0) == 1);
-    FileMetaData* f = c->input(0, 0);
-    c->edit()->DeleteFile(c->level(), f->number);
-    c->edit()->AddFile(c->level() + 1, f->number, f->file_size, f->smallest,
-                       f->largest);
-    status = versions_->LogAndApply(c->edit(), &mutex_);
-    if (!status.ok()) {
-      RecordBackgroundError(status);
-    }
-    VersionSet::LevelSummaryStorage tmp;
-    Log(options_.info_log, "Moved #%lld to level-%d %lld bytes %s: %s\n",
-        static_cast<unsigned long long>(f->number), c->level() + 1,
-        static_cast<unsigned long long>(f->file_size),
-        status.ToString().c_str(), versions_->LevelSummary(&tmp));
-  } else {
-    CompactionState* compact = new CompactionState(c);
-    status = DoCompactionWork(compact);
-    if (!status.ok()) {
-      RecordBackgroundError(status);
-    }
-    CleanupCompaction(compact);
-    c->ReleaseInputs();
-    DeleteObsoleteFiles();
-  }
-  delete c;
-
-  if (status.ok()) {
-    // Done
-  } else if (shutting_down_.load(std::memory_order_acquire)) {
-    // Ignore compaction errors found during shutting down
-  } else {
-    Log(options_.info_log, "Compaction error: %s", status.ToString().c_str());
-  }
-
-  if (is_manual) {
-    ManualCompaction* m = manual_compaction_;
-    if (!status.ok()) {
-      m->done = true;
-    }
-    if (!m->done) {
-      // We only compacted part of the requested range.  Update *m
-      // to the range that is left to be compacted.
-      m->tmp_storage = manual_end;
-      m->begin = &m->tmp_storage;
-    }
-    manual_compaction_ = nullptr;
-  }
-}
-
-void DBImpl::CleanupCompaction(CompactionState* compact) {
-  mutex_.AssertHeld();
-  if (compact->builder != nullptr) {
-    // May happen if we get a shutdown call in the middle of compaction
-    compact->builder->Abandon();
-    delete compact->builder;
-  } else {
-    assert(compact->outfile == nullptr);
-  }
-  delete compact->outfile;
-  for (size_t i = 0; i < compact->outputs.size(); i++) {
-    const CompactionState::Output& out = compact->outputs[i];
-    pending_outputs_.erase(out.number);
-  }
-  delete compact;
-}
-
-Status DBImpl::OpenCompactionOutputFile(CompactionState* compact) {
-  assert(compact != nullptr);
-  assert(compact->builder == nullptr);
-  uint64_t file_number;
-  {
-    mutex_.Lock();
-    file_number = versions_->NewFileNumber();
-    pending_outputs_.insert(file_number);
-    CompactionState::Output out;
-    out.number = file_number;
-    out.smallest.Clear();
-    out.largest.Clear();
-    compact->outputs.push_back(out);
-    mutex_.Unlock();
-  }
-
-  // Make the output file
-  std::string fname = TableFileName(dbname_, file_number);
-  Status s = env_->NewWritableFile(fname, &compact->outfile);
-  if (s.ok()) {
-    compact->builder = new TableBuilder(options_, compact->outfile);
-  }
-  return s;
-}
-
-Status DBImpl::FinishCompactionOutputFile(CompactionState* compact,
-                                          Iterator* input) {
-  assert(compact != nullptr);
-  assert(compact->outfile != nullptr);
-  assert(compact->builder != nullptr);
-
-  const uint64_t output_number = compact->current_output()->number;
-  assert(output_number != 0);
-
-  // Check for iterator errors
-  Status s = input->status();
-  const uint64_t current_entries = compact->builder->NumEntries();
-  if (s.ok()) {
-    s = compact->builder->Finish();
-  } else {
-    compact->builder->Abandon();
-  }
-  const uint64_t current_bytes = compact->builder->FileSize();
-  compact->current_output()->file_size = current_bytes;
-  compact->total_bytes += current_bytes;
-  delete compact->builder;
-  compact->builder = nullptr;
-
-  // Finish and check for file errors
-  if (s.ok()) {
-    s = compact->outfile->Sync();
-  }
-  if (s.ok()) {
-    s = compact->outfile->Close();
-  }
-  delete compact->outfile;
-  compact->outfile = nullptr;
-
-  if (s.ok() && current_entries > 0) {
-    // Verify that the table is usable
-    Iterator* iter =
-        table_cache_->NewIterator(ReadOptions(), output_number, current_bytes);
-    s = iter->status();
-    delete iter;
-    if (s.ok()) {
-      Log(options_.info_log, "Generated table #%llu@%d: %lld keys, %lld bytes",
-          (unsigned long long)output_number, compact->compaction->level(),
-          (unsigned long long)current_entries,
-          (unsigned long long)current_bytes);
-    }
-  }
-  return s;
-}
-
-Status DBImpl::InstallCompactionResults(CompactionState* compact) {
-  mutex_.AssertHeld();
-  Log(options_.info_log, "Compacted %d@%d + %d@%d files => %lld bytes",
-      compact->compaction->num_input_files(0), compact->compaction->level(),
-      compact->compaction->num_input_files(1), compact->compaction->level() + 1,
-      static_cast<long long>(compact->total_bytes));
-
-  // Add compaction outputs
-  compact->compaction->AddInputDeletions(compact->compaction->edit());
-  const int level = compact->compaction->level();
-  for (size_t i = 0; i < compact->outputs.size(); i++) {
-    const CompactionState::Output& out = compact->outputs[i];
-    compact->compaction->edit()->AddFile(level + 1, out.number, out.file_size,
-                                         out.smallest, out.largest);
-  }
-  return versions_->LogAndApply(compact->compaction->edit(), &mutex_);
-}
-
-Status DBImpl::DoCompactionWork(CompactionState* compact) {
-  const uint64_t start_micros = env_->NowMicros();
-  int64_t imm_micros = 0;  // Micros spent doing imm_ compactions
-
-  Log(options_.info_log, "Compacting %d@%d + %d@%d files",
-      compact->compaction->num_input_files(0), compact->compaction->level(),
-      compact->compaction->num_input_files(1),
-      compact->compaction->level() + 1);
-
-  assert(versions_->NumLevelFiles(compact->compaction->level()) > 0);
-  assert(compact->builder == nullptr);
-  assert(compact->outfile == nullptr);
-  if (snapshots_.empty()) {
-    compact->smallest_snapshot = versions_->LastSequence();
-  } else {
-    compact->smallest_snapshot = snapshots_.oldest()->sequence_number();
-  }
-
-  // Release mutex while we're actually doing the compaction work
-  mutex_.Unlock();
-
-  Iterator* input = versions_->MakeInputIterator(compact->compaction);
-  input->SeekToFirst();
-  Status status;
-  ParsedInternalKey ikey;
-  std::string current_user_key;
-  bool has_current_user_key = false;
-  SequenceNumber last_sequence_for_key = kMaxSequenceNumber;
-  for (; input->Valid() && !shutting_down_.load(std::memory_order_acquire);) {
-    // Prioritize immutable compaction work
-    if (has_imm_.load(std::memory_order_relaxed)) {
-      const uint64_t imm_start = env_->NowMicros();
-      mutex_.Lock();
-      if (imm_ != nullptr) {
-        CompactMemTable();
-        // Wake up MakeRoomForWrite() if necessary.
-        background_work_finished_signal_.SignalAll();
-      }
-      mutex_.Unlock();
-      imm_micros += (env_->NowMicros() - imm_start);
-    }
-
-    Slice key = input->key();
-    if (compact->compaction->ShouldStopBefore(key) &&
-        compact->builder != nullptr) {
-      status = FinishCompactionOutputFile(compact, input);
-      if (!status.ok()) {
-        break;
-      }
-    }
-
-    // Handle key/value, add to state, etc.
-    bool drop = false;
-    if (!ParseInternalKey(key, &ikey)) {
-      // Do not hide error keys
-      current_user_key.clear();
-      has_current_user_key = false;
-      last_sequence_for_key = kMaxSequenceNumber;
-    } else {
-      if (!has_current_user_key ||
-          user_comparator()->Compare(ikey.user_key, Slice(current_user_key)) !=
-              0) {
-        // First occurrence of this user key
-        current_user_key.assign(ikey.user_key.data(), ikey.user_key.size());
-        has_current_user_key = true;
-        last_sequence_for_key = kMaxSequenceNumber;
-      }
-
-      if (last_sequence_for_key <= compact->smallest_snapshot) {
-        // Hidden by an newer entry for same user key
-        drop = true;  // (A)
-      } else if (ikey.type == kTypeDeletion &&
-                 ikey.sequence <= compact->smallest_snapshot &&
-                 compact->compaction->IsBaseLevelForKey(ikey.user_key)) {
-        // For this user key:
-        // (1) there is no data in higher levels
-        // (2) data in lower levels will have larger sequence numbers
-        // (3) data in layers that are being compacted here and have
-        //     smaller sequence numbers will be dropped in the next
-        //     few iterations of this loop (by rule (A) above).
-        // Therefore this deletion marker is obsolete and can be dropped.
-        drop = true;
-      }
-
-      last_sequence_for_key = ikey.sequence;
-    }
-#if 0
-    Log(options_.info_log,
-        "  Compact: %s, seq %d, type: %d %d, drop: %d, is_base: %d, "
-        "%d smallest_snapshot: %d",
-        ikey.user_key.ToString().c_str(),
-        (int)ikey.sequence, ikey.type, kTypeValue, drop,
-        compact->compaction->IsBaseLevelForKey(ikey.user_key),
-        (int)last_sequence_for_key, (int)compact->smallest_snapshot);
-#endif
-
-    if (!drop) {
-      // Open output file if necessary
-      if (compact->builder == nullptr) {
-        status = OpenCompactionOutputFile(compact);
-        if (!status.ok()) {
-          break;
-        }
-      }
-      if (compact->builder->NumEntries() == 0) {
-        compact->current_output()->smallest.DecodeFrom(key);
-      }
-      compact->current_output()->largest.DecodeFrom(key);
-      compact->builder->Add(key, input->value());
-
-      // Close output file if it is big enough
-      if (compact->builder->FileSize() >=
-          compact->compaction->MaxOutputFileSize()) {
-        status = FinishCompactionOutputFile(compact, input);
-        if (!status.ok()) {
-          break;
-        }
-      }
-    }
-
-    input->Next();
-  }
-
-  if (status.ok() && shutting_down_.load(std::memory_order_acquire)) {
-    status = Status::IOError("Deleting DB during compaction");
-  }
-  if (status.ok() && compact->builder != nullptr) {
-    status = FinishCompactionOutputFile(compact, input);
-  }
-  if (status.ok()) {
-    status = input->status();
-  }
-  delete input;
-  input = nullptr;
-
-  CompactionStats stats;
-  stats.micros = env_->NowMicros() - start_micros - imm_micros;
-  for (int which = 0; which < 2; which++) {
-    for (int i = 0; i < compact->compaction->num_input_files(which); i++) {
-      stats.bytes_read += compact->compaction->input(which, i)->file_size;
-    }
-  }
-  for (size_t i = 0; i < compact->outputs.size(); i++) {
-    stats.bytes_written += compact->outputs[i].file_size;
-  }
-
-  mutex_.Lock();
-  stats_[compact->compaction->level() + 1].Add(stats);
-
-  if (status.ok()) {
-    status = InstallCompactionResults(compact);
-  }
-  if (!status.ok()) {
-    RecordBackgroundError(status);
-  }
-  VersionSet::LevelSummaryStorage tmp;
-  Log(options_.info_log, "compacted to: %s", versions_->LevelSummary(&tmp));
-  return status;
-}
-
-namespace {
-
-struct IterState {
-  port::Mutex* const mu;
-  Version* const version GUARDED_BY(mu);
-  MemTable* const mem GUARDED_BY(mu);
-  MemTable* const imm GUARDED_BY(mu);
-
-  IterState(port::Mutex* mutex, MemTable* mem, MemTable* imm, Version* version)
-      : mu(mutex), version(version), mem(mem), imm(imm) {}
-};
-
-static void CleanupIteratorState(void* arg1, void* arg2) {
-  IterState* state = reinterpret_cast<IterState*>(arg1);
-  state->mu->Lock();
-  state->mem->Unref();
-  if (state->imm != nullptr) state->imm->Unref();
-  state->version->Unref();
-  state->mu->Unlock();
-  delete state;
-}
-
-}  // anonymous namespace
-
-Iterator* DBImpl::NewInternalIterator(const ReadOptions& options,
-                                      SequenceNumber* latest_snapshot,
-                                      uint32_t* seed) {
-  mutex_.Lock();
-  *latest_snapshot = versions_->LastSequence();
-
-  // Collect together all needed child iterators
-  std::vector<Iterator*> list;
-  list.push_back(mem_->NewIterator());
-  mem_->Ref();
-  if (imm_ != nullptr) {
-    list.push_back(imm_->NewIterator());
-    imm_->Ref();
-  }
-  versions_->current()->AddIterators(options, &list);
-  Iterator* internal_iter =
-      NewMergingIterator(&internal_comparator_, &list[0], list.size());
-  versions_->current()->Ref();
-
-  IterState* cleanup = new IterState(&mutex_, mem_, imm_, versions_->current());
-  internal_iter->RegisterCleanup(CleanupIteratorState, cleanup, nullptr);
-
-  *seed = ++seed_;
-  mutex_.Unlock();
-  return internal_iter;
-}
-
-Iterator* DBImpl::TEST_NewInternalIterator() {
-  SequenceNumber ignored;
-  uint32_t ignored_seed;
-  return NewInternalIterator(ReadOptions(), &ignored, &ignored_seed);
-}
-
-int64_t DBImpl::TEST_MaxNextLevelOverlappingBytes() {
-  MutexLock l(&mutex_);
-  return versions_->MaxNextLevelOverlappingBytes();
-}
-
-Status DBImpl::Get(const ReadOptions& options, const Slice& key,
-                   std::string* value) {
-  Status s;
-  MutexLock l(&mutex_);
-  SequenceNumber snapshot;
-  if (options.snapshot != nullptr) {
-    snapshot =
-        static_cast<const SnapshotImpl*>(options.snapshot)->sequence_number();
-  } else {
-    snapshot = versions_->LastSequence();
-  }
-
-  MemTable* mem = mem_;
-  MemTable* imm = imm_;
-  Version* current = versions_->current();
-  mem->Ref();
-  if (imm != nullptr) imm->Ref();
-  current->Ref();
-
-  bool have_stat_update = false;
-  Version::GetStats stats;
-
-  // Unlock while reading from files and memtables
-  {
-    mutex_.Unlock();
-    // First look in the memtable, then in the immutable memtable (if any).
-    LookupKey lkey(key, snapshot);
-    if (mem->Get(lkey, value, &s)) {
-      // Done
-    } else if (imm != nullptr && imm->Get(lkey, value, &s)) {
-      // Done
-    } else {
-      s = current->Get(options, lkey, value, &stats);
-      have_stat_update = true;
-    }
-    mutex_.Lock();
-  }
-
-  if (have_stat_update && current->UpdateStats(stats)) {
-    MaybeScheduleCompaction();
-  }
-  mem->Unref();
-  if (imm != nullptr) imm->Unref();
-  current->Unref();
-  return s;
-}
-
-Iterator* DBImpl::NewIterator(const ReadOptions& options) {
-  SequenceNumber latest_snapshot;
-  uint32_t seed;
-  Iterator* iter = NewInternalIterator(options, &latest_snapshot, &seed);
-  return NewDBIterator(this, user_comparator(), iter,
-                       (options.snapshot != nullptr
-                            ? static_cast<const SnapshotImpl*>(options.snapshot)
-                                  ->sequence_number()
-                            : latest_snapshot),
-                       seed);
-}
-
-void DBImpl::RecordReadSample(Slice key) {
-  MutexLock l(&mutex_);
-  if (versions_->current()->RecordReadSample(key)) {
-    MaybeScheduleCompaction();
-  }
-}
-
-const Snapshot* DBImpl::GetSnapshot() {
-  MutexLock l(&mutex_);
-  return snapshots_.New(versions_->LastSequence());
-}
-
-void DBImpl::ReleaseSnapshot(const Snapshot* snapshot) {
-  MutexLock l(&mutex_);
-  snapshots_.Delete(static_cast<const SnapshotImpl*>(snapshot));
-}
-
-// Convenience methods
-Status DBImpl::Put(const WriteOptions& o, const Slice& key, const Slice& val) {
-  return DB::Put(o, key, val);
-}
-
-Status DBImpl::Delete(const WriteOptions& options, const Slice& key) {
-  return DB::Delete(options, key);
-}
-
-Status DBImpl::Write(const WriteOptions& options, WriteBatch* updates) {
-  Writer w(&mutex_);
-  w.batch = updates;
-  w.sync = options.sync;
-  w.done = false;
-
-  MutexLock l(&mutex_);
-  writers_.push_back(&w);
-  while (!w.done && &w != writers_.front()) {
-    w.cv.Wait();
-  }
-  if (w.done) {
-    return w.status;
-  }
-
-  // May temporarily unlock and wait.
-  Status status = MakeRoomForWrite(updates == nullptr);
-  uint64_t last_sequence = versions_->LastSequence();
-  Writer* last_writer = &w;
-  if (status.ok() && updates != nullptr) {  // nullptr batch is for compactions
-    WriteBatch* updates = BuildBatchGroup(&last_writer);
-    WriteBatchInternal::SetSequence(updates, last_sequence + 1);
-    last_sequence += WriteBatchInternal::Count(updates);
-
-    // Add to log and apply to memtable.  We can release the lock
-    // during this phase since &w is currently responsible for logging
-    // and protects against concurrent loggers and concurrent writes
-    // into mem_.
-    {
-      mutex_.Unlock();
-      status = log_->AddRecord(WriteBatchInternal::Contents(updates));
-      bool sync_error = false;
-      if (status.ok() && options.sync) {
-        status = logfile_->Sync();
-        if (!status.ok()) {
-          sync_error = true;
-        }
-      }
-      if (status.ok()) {
-        status = WriteBatchInternal::InsertInto(updates, mem_);
-      }
-      mutex_.Lock();
-      if (sync_error) {
-        // The state of the log file is indeterminate: the log record we
-        // just added may or may not show up when the DB is re-opened.
-        // So we force the DB into a mode where all future writes fail.
-        RecordBackgroundError(status);
-      }
-    }
-    if (updates == tmp_batch_) tmp_batch_->Clear();
-
-    versions_->SetLastSequence(last_sequence);
-  }
-
-  while (true) {
-    Writer* ready = writers_.front();
-    writers_.pop_front();
-    if (ready != &w) {
-      ready->status = status;
-      ready->done = true;
-      ready->cv.Signal();
-    }
-    if (ready == last_writer) break;
-  }
-
-  // Notify new head of write queue
-  if (!writers_.empty()) {
-    writers_.front()->cv.Signal();
-  }
-
-  return status;
-}
-
-// REQUIRES: Writer list must be non-empty
-// REQUIRES: First writer must have a non-null batch
-WriteBatch* DBImpl::BuildBatchGroup(Writer** last_writer) {
-  mutex_.AssertHeld();
-  assert(!writers_.empty());
-  Writer* first = writers_.front();
-  WriteBatch* result = first->batch;
-  assert(result != nullptr);
-
-  size_t size = WriteBatchInternal::ByteSize(first->batch);
-
-  // Allow the group to grow up to a maximum size, but if the
-  // original write is small, limit the growth so we do not slow
-  // down the small write too much.
-  size_t max_size = 1 << 20;
-  if (size <= (128 << 10)) {
-    max_size = size + (128 << 10);
-  }
-
-  *last_writer = first;
-  std::deque<Writer*>::iterator iter = writers_.begin();
-  ++iter;  // Advance past "first"
-  for (; iter != writers_.end(); ++iter) {
-    Writer* w = *iter;
-    if (w->sync && !first->sync) {
-      // Do not include a sync write into a batch handled by a non-sync write.
-      break;
-    }
-
-    if (w->batch != nullptr) {
-      size += WriteBatchInternal::ByteSize(w->batch);
-      if (size > max_size) {
-        // Do not make batch too big
-        break;
-      }
-
-      // Append to *result
-      if (result == first->batch) {
-        // Switch to temporary batch instead of disturbing caller's batch
-        result = tmp_batch_;
-        assert(WriteBatchInternal::Count(result) == 0);
-        WriteBatchInternal::Append(result, first->batch);
-      }
-      WriteBatchInternal::Append(result, w->batch);
-    }
-    *last_writer = w;
-  }
-  return result;
-}
-
-// REQUIRES: mutex_ is held
-// REQUIRES: this thread is currently at the front of the writer queue
-Status DBImpl::MakeRoomForWrite(bool force) {
-  mutex_.AssertHeld();
-  assert(!writers_.empty());
-  bool allow_delay = !force;
-  Status s;
-  while (true) {
-    if (!bg_error_.ok()) {
-      // Yield previous error
-      s = bg_error_;
-      break;
-    } else if (allow_delay && versions_->NumLevelFiles(0) >=
-                                  config::kL0_SlowdownWritesTrigger) {
-      // We are getting close to hitting a hard limit on the number of
-      // L0 files.  Rather than delaying a single write by several
-      // seconds when we hit the hard limit, start delaying each
-      // individual write by 1ms to reduce latency variance.  Also,
-      // this delay hands over some CPU to the compaction thread in
-      // case it is sharing the same core as the writer.
-      mutex_.Unlock();
-      env_->SleepForMicroseconds(1000);
-      allow_delay = false;  // Do not delay a single write more than once
-      mutex_.Lock();
-    } else if (!force &&
-               (mem_->ApproximateMemoryUsage() <= options_.write_buffer_size)) {
-      // There is room in current memtable
-      break;
-    } else if (imm_ != nullptr) {
-      // We have filled up the current memtable, but the previous
-      // one is still being compacted, so we wait.
-      Log(options_.info_log, "Current memtable full; waiting...\n");
-      background_work_finished_signal_.Wait();
-    } else if (versions_->NumLevelFiles(0) >= config::kL0_StopWritesTrigger) {
-      // There are too many level-0 files.
-      Log(options_.info_log, "Too many L0 files; waiting...\n");
-      background_work_finished_signal_.Wait();
-    } else {
-      // Attempt to switch to a new memtable and trigger compaction of old
-      assert(versions_->PrevLogNumber() == 0);
-      uint64_t new_log_number = versions_->NewFileNumber();
-      WritableFile* lfile = nullptr;
-      s = env_->NewWritableFile(LogFileName(dbname_, new_log_number), &lfile);
-      if (!s.ok()) {
-        // Avoid chewing through file number space in a tight loop.
-        versions_->ReuseFileNumber(new_log_number);
-        break;
-      }
-      delete log_;
-      delete logfile_;
-      logfile_ = lfile;
-      logfile_number_ = new_log_number;
-      log_ = new log::Writer(lfile);
-      imm_ = mem_;
-      has_imm_.store(true, std::memory_order_release);
-      mem_ = new MemTable(internal_comparator_);
-      mem_->Ref();
-      force = false;  // Do not force another compaction if have room
-      MaybeScheduleCompaction();
-    }
-  }
-  return s;
-}
-
-bool DBImpl::GetProperty(const Slice& property, std::string* value) {
-  value->clear();
-
-  MutexLock l(&mutex_);
-  Slice in = property;
-  Slice prefix("leveldb.");
-  if (!in.starts_with(prefix)) return false;
-  in.remove_prefix(prefix.size());
-
-  if (in.starts_with("num-files-at-level")) {
-    in.remove_prefix(strlen("num-files-at-level"));
-    uint64_t level;
-    bool ok = ConsumeDecimalNumber(&in, &level) && in.empty();
-    if (!ok || level >= config::kNumLevels) {
-      return false;
-    } else {
-      char buf[100];
-      snprintf(buf, sizeof(buf), "%d",
-               versions_->NumLevelFiles(static_cast<int>(level)));
-      *value = buf;
-      return true;
-    }
-  } else if (in == "stats") {
-    char buf[200];
-    snprintf(buf, sizeof(buf),
-             "                               Compactions\n"
-             "Level  Files Size(MB) Time(sec) Read(MB) Write(MB)\n"
-             "--------------------------------------------------\n");
-    value->append(buf);
-    for (int level = 0; level < config::kNumLevels; level++) {
-      int files = versions_->NumLevelFiles(level);
-      if (stats_[level].micros > 0 || files > 0) {
-        snprintf(buf, sizeof(buf), "%3d %8d %8.0f %9.0f %8.0f %9.0f\n", level,
-                 files, versions_->NumLevelBytes(level) / 1048576.0,
-                 stats_[level].micros / 1e6,
-                 stats_[level].bytes_read / 1048576.0,
-                 stats_[level].bytes_written / 1048576.0);
-        value->append(buf);
-      }
-    }
-    return true;
-  } else if (in == "sstables") {
-    *value = versions_->current()->DebugString();
-    return true;
-  } else if (in == "approximate-memory-usage") {
-    size_t total_usage = options_.block_cache->TotalCharge();
-    if (mem_) {
-      total_usage += mem_->ApproximateMemoryUsage();
-    }
-    if (imm_) {
-      total_usage += imm_->ApproximateMemoryUsage();
-    }
-    char buf[50];
-    snprintf(buf, sizeof(buf), "%llu",
-             static_cast<unsigned long long>(total_usage));
-    value->append(buf);
-    return true;
-  }
-
-  return false;
-}
-
-void DBImpl::GetApproximateSizes(const Range* range, int n, uint64_t* sizes) {
-  // TODO(opt): better implementation
-  Version* v;
-  {
-    MutexLock l(&mutex_);
-    versions_->current()->Ref();
-    v = versions_->current();
-  }
-
-  for (int i = 0; i < n; i++) {
-    // Convert user_key into a corresponding internal key.
-    InternalKey k1(range[i].start, kMaxSequenceNumber, kValueTypeForSeek);
-    InternalKey k2(range[i].limit, kMaxSequenceNumber, kValueTypeForSeek);
-    uint64_t start = versions_->ApproximateOffsetOf(v, k1);
-    uint64_t limit = versions_->ApproximateOffsetOf(v, k2);
-    sizes[i] = (limit >= start ? limit - start : 0);
-  }
-
-  {
-    MutexLock l(&mutex_);
-    v->Unref();
-  }
-}
-
-// Default implementations of convenience methods that subclasses of DB
-// can call if they wish
-Status DB::Put(const WriteOptions& opt, const Slice& key, const Slice& value) {
-  WriteBatch batch;
-  batch.Put(key, value);
-  return Write(opt, &batch);
-}
-
-Status DB::Delete(const WriteOptions& opt, const Slice& key) {
-  WriteBatch batch;
-  batch.Delete(key);
-  return Write(opt, &batch);
-}
-
-DB::~DB() {}
-
-Status DB::Open(const Options& options, const std::string& dbname, DB** dbptr) {
-  *dbptr = nullptr;
-
-  DBImpl* impl = new DBImpl(options, dbname);
-  impl->mutex_.Lock();
-  VersionEdit edit;
-  // Recover handles create_if_missing, error_if_exists
-  bool save_manifest = false;
-  Status s = impl->Recover(&edit, &save_manifest);
-  if (s.ok() && impl->mem_ == nullptr) {
-    // Create new log and a corresponding memtable.
-    uint64_t new_log_number = impl->versions_->NewFileNumber();
-    WritableFile* lfile;
-    s = options.env->NewWritableFile(LogFileName(dbname, new_log_number),
-                                     &lfile);
-    if (s.ok()) {
-      edit.SetLogNumber(new_log_number);
-      impl->logfile_ = lfile;
-      impl->logfile_number_ = new_log_number;
-      impl->log_ = new log::Writer(lfile);
-      impl->mem_ = new MemTable(impl->internal_comparator_);
-      impl->mem_->Ref();
-    }
-  }
-  if (s.ok() && save_manifest) {
-    edit.SetPrevLogNumber(0);  // No older logs needed after recovery.
-    edit.SetLogNumber(impl->logfile_number_);
-    s = impl->versions_->LogAndApply(&edit, &impl->mutex_);
-  }
-  if (s.ok()) {
-    impl->DeleteObsoleteFiles();
-    impl->MaybeScheduleCompaction();
-  }
-  impl->mutex_.Unlock();
-  if (s.ok()) {
-    assert(impl->mem_ != nullptr);
-    *dbptr = impl;
-  } else {
-    delete impl;
-  }
-  return s;
-}
-
-Snapshot::~Snapshot() {}
-
-Status DestroyDB(const std::string& dbname, const Options& options) {
-  Env* env = options.env;
-  std::vector<std::string> filenames;
-  Status result = env->GetChildren(dbname, &filenames);
-  if (!result.ok()) {
-    // Ignore error in case directory does not exist
-    return Status::OK();
-  }
-
-  FileLock* lock;
-  const std::string lockname = LockFileName(dbname);
-  result = env->LockFile(lockname, &lock);
-  if (result.ok()) {
-    uint64_t number;
-    FileType type;
-    for (size_t i = 0; i < filenames.size(); i++) {
-      if (ParseFileName(filenames[i], &number, &type) &&
-          type != kDBLockFile) {  // Lock file will be deleted at end
-        Status del = env->DeleteFile(dbname + "/" + filenames[i]);
-        if (result.ok() && !del.ok()) {
-          result = del;
-        }
-      }
-    }
-    env->UnlockFile(lock);  // Ignore error since state is already gone
-    env->DeleteFile(lockname);
-    env->DeleteDir(dbname);  // Ignore error in case dir contains other files
-  }
-  return result;
-}
-
-}  // namespace leveldb
diff --git a/assign5/openTok/Pods/leveldb-library/db/db_impl.h b/assign5/openTok/Pods/leveldb-library/db/db_impl.h
deleted file mode 100644
index ae87d6e..0000000
--- a/assign5/openTok/Pods/leveldb-library/db/db_impl.h
+++ /dev/null
@@ -1,216 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#ifndef STORAGE_LEVELDB_DB_DB_IMPL_H_
-#define STORAGE_LEVELDB_DB_DB_IMPL_H_
-
-#include <atomic>
-#include <deque>
-#include <set>
-#include <string>
-
-#include "db/dbformat.h"
-#include "db/log_writer.h"
-#include "db/snapshot.h"
-#include "leveldb/db.h"
-#include "leveldb/env.h"
-#include "port/port.h"
-#include "port/thread_annotations.h"
-
-namespace leveldb {
-
-class MemTable;
-class TableCache;
-class Version;
-class VersionEdit;
-class VersionSet;
-
-class DBImpl : public DB {
- public:
-  DBImpl(const Options& options, const std::string& dbname);
-
-  DBImpl(const DBImpl&) = delete;
-  DBImpl& operator=(const DBImpl&) = delete;
-
-  virtual ~DBImpl();
-
-  // Implementations of the DB interface
-  virtual Status Put(const WriteOptions&, const Slice& key, const Slice& value);
-  virtual Status Delete(const WriteOptions&, const Slice& key);
-  virtual Status Write(const WriteOptions& options, WriteBatch* updates);
-  virtual Status Get(const ReadOptions& options, const Slice& key,
-                     std::string* value);
-  virtual Iterator* NewIterator(const ReadOptions&);
-  virtual const Snapshot* GetSnapshot();
-  virtual void ReleaseSnapshot(const Snapshot* snapshot);
-  virtual bool GetProperty(const Slice& property, std::string* value);
-  virtual void GetApproximateSizes(const Range* range, int n, uint64_t* sizes);
-  virtual void CompactRange(const Slice* begin, const Slice* end);
-
-  // Extra methods (for testing) that are not in the public DB interface
-
-  // Compact any files in the named level that overlap [*begin,*end]
-  void TEST_CompactRange(int level, const Slice* begin, const Slice* end);
-
-  // Force current memtable contents to be compacted.
-  Status TEST_CompactMemTable();
-
-  // Return an internal iterator over the current state of the database.
-  // The keys of this iterator are internal keys (see format.h).
-  // The returned iterator should be deleted when no longer needed.
-  Iterator* TEST_NewInternalIterator();
-
-  // Return the maximum overlapping data (in bytes) at next level for any
-  // file at a level >= 1.
-  int64_t TEST_MaxNextLevelOverlappingBytes();
-
-  // Record a sample of bytes read at the specified internal key.
-  // Samples are taken approximately once every config::kReadBytesPeriod
-  // bytes.
-  void RecordReadSample(Slice key);
-
- private:
-  friend class DB;
-  struct CompactionState;
-  struct Writer;
-
-  // Information for a manual compaction
-  struct ManualCompaction {
-    int level;
-    bool done;
-    const InternalKey* begin;  // null means beginning of key range
-    const InternalKey* end;    // null means end of key range
-    InternalKey tmp_storage;   // Used to keep track of compaction progress
-  };
-
-  // Per level compaction stats.  stats_[level] stores the stats for
-  // compactions that produced data for the specified "level".
-  struct CompactionStats {
-    CompactionStats() : micros(0), bytes_read(0), bytes_written(0) {}
-
-    void Add(const CompactionStats& c) {
-      this->micros += c.micros;
-      this->bytes_read += c.bytes_read;
-      this->bytes_written += c.bytes_written;
-    }
-
-    int64_t micros;
-    int64_t bytes_read;
-    int64_t bytes_written;
-  };
-
-  Iterator* NewInternalIterator(const ReadOptions&,
-                                SequenceNumber* latest_snapshot,
-                                uint32_t* seed);
-
-  Status NewDB();
-
-  // Recover the descriptor from persistent storage.  May do a significant
-  // amount of work to recover recently logged updates.  Any changes to
-  // be made to the descriptor are added to *edit.
-  Status Recover(VersionEdit* edit, bool* save_manifest)
-      EXCLUSIVE_LOCKS_REQUIRED(mutex_);
-
-  void MaybeIgnoreError(Status* s) const;
-
-  // Delete any unneeded files and stale in-memory entries.
-  void DeleteObsoleteFiles() EXCLUSIVE_LOCKS_REQUIRED(mutex_);
-
-  // Compact the in-memory write buffer to disk.  Switches to a new
-  // log-file/memtable and writes a new descriptor iff successful.
-  // Errors are recorded in bg_error_.
-  void CompactMemTable() EXCLUSIVE_LOCKS_REQUIRED(mutex_);
-
-  Status RecoverLogFile(uint64_t log_number, bool last_log, bool* save_manifest,
-                        VersionEdit* edit, SequenceNumber* max_sequence)
-      EXCLUSIVE_LOCKS_REQUIRED(mutex_);
-
-  Status WriteLevel0Table(MemTable* mem, VersionEdit* edit, Version* base)
-      EXCLUSIVE_LOCKS_REQUIRED(mutex_);
-
-  Status MakeRoomForWrite(bool force /* compact even if there is room? */)
-      EXCLUSIVE_LOCKS_REQUIRED(mutex_);
-  WriteBatch* BuildBatchGroup(Writer** last_writer)
-      EXCLUSIVE_LOCKS_REQUIRED(mutex_);
-
-  void RecordBackgroundError(const Status& s);
-
-  void MaybeScheduleCompaction() EXCLUSIVE_LOCKS_REQUIRED(mutex_);
-  static void BGWork(void* db);
-  void BackgroundCall();
-  void BackgroundCompaction() EXCLUSIVE_LOCKS_REQUIRED(mutex_);
-  void CleanupCompaction(CompactionState* compact)
-      EXCLUSIVE_LOCKS_REQUIRED(mutex_);
-  Status DoCompactionWork(CompactionState* compact)
-      EXCLUSIVE_LOCKS_REQUIRED(mutex_);
-
-  Status OpenCompactionOutputFile(CompactionState* compact);
-  Status FinishCompactionOutputFile(CompactionState* compact, Iterator* input);
-  Status InstallCompactionResults(CompactionState* compact)
-      EXCLUSIVE_LOCKS_REQUIRED(mutex_);
-
-  const Comparator* user_comparator() const {
-    return internal_comparator_.user_comparator();
-  }
-
-  // Constant after construction
-  Env* const env_;
-  const InternalKeyComparator internal_comparator_;
-  const InternalFilterPolicy internal_filter_policy_;
-  const Options options_;  // options_.comparator == &internal_comparator_
-  const bool owns_info_log_;
-  const bool owns_cache_;
-  const std::string dbname_;
-
-  // table_cache_ provides its own synchronization
-  TableCache* const table_cache_;
-
-  // Lock over the persistent DB state.  Non-null iff successfully acquired.
-  FileLock* db_lock_;
-
-  // State below is protected by mutex_
-  port::Mutex mutex_;
-  std::atomic<bool> shutting_down_;
-  port::CondVar background_work_finished_signal_ GUARDED_BY(mutex_);
-  MemTable* mem_;
-  MemTable* imm_ GUARDED_BY(mutex_);  // Memtable being compacted
-  std::atomic<bool> has_imm_;         // So bg thread can detect non-null imm_
-  WritableFile* logfile_;
-  uint64_t logfile_number_ GUARDED_BY(mutex_);
-  log::Writer* log_;
-  uint32_t seed_ GUARDED_BY(mutex_);  // For sampling.
-
-  // Queue of writers.
-  std::deque<Writer*> writers_ GUARDED_BY(mutex_);
-  WriteBatch* tmp_batch_ GUARDED_BY(mutex_);
-
-  SnapshotList snapshots_ GUARDED_BY(mutex_);
-
-  // Set of table files to protect from deletion because they are
-  // part of ongoing compactions.
-  std::set<uint64_t> pending_outputs_ GUARDED_BY(mutex_);
-
-  // Has a background compaction been scheduled or is running?
-  bool background_compaction_scheduled_ GUARDED_BY(mutex_);
-
-  ManualCompaction* manual_compaction_ GUARDED_BY(mutex_);
-
-  VersionSet* const versions_;
-
-  // Have we encountered a background error in paranoid mode?
-  Status bg_error_ GUARDED_BY(mutex_);
-
-  CompactionStats stats_[config::kNumLevels] GUARDED_BY(mutex_);
-};
-
-// Sanitize db options.  The caller should delete result.info_log if
-// it is not equal to src.info_log.
-Options SanitizeOptions(const std::string& db,
-                        const InternalKeyComparator* icmp,
-                        const InternalFilterPolicy* ipolicy,
-                        const Options& src);
-
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_DB_DB_IMPL_H_
diff --git a/assign5/openTok/Pods/leveldb-library/db/db_iter.cc b/assign5/openTok/Pods/leveldb-library/db/db_iter.cc
deleted file mode 100644
index 8ff288e..0000000
--- a/assign5/openTok/Pods/leveldb-library/db/db_iter.cc
+++ /dev/null
@@ -1,309 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#include "db/db_iter.h"
-
-#include "db/db_impl.h"
-#include "db/dbformat.h"
-#include "db/filename.h"
-#include "leveldb/env.h"
-#include "leveldb/iterator.h"
-#include "port/port.h"
-#include "util/logging.h"
-#include "util/mutexlock.h"
-#include "util/random.h"
-
-namespace leveldb {
-
-#if 0
-static void DumpInternalIter(Iterator* iter) {
-  for (iter->SeekToFirst(); iter->Valid(); iter->Next()) {
-    ParsedInternalKey k;
-    if (!ParseInternalKey(iter->key(), &k)) {
-      fprintf(stderr, "Corrupt '%s'\n", EscapeString(iter->key()).c_str());
-    } else {
-      fprintf(stderr, "@ '%s'\n", k.DebugString().c_str());
-    }
-  }
-}
-#endif
-
-namespace {
-
-// Memtables and sstables that make the DB representation contain
-// (userkey,seq,type) => uservalue entries.  DBIter
-// combines multiple entries for the same userkey found in the DB
-// representation into a single entry while accounting for sequence
-// numbers, deletion markers, overwrites, etc.
-class DBIter : public Iterator {
- public:
-  // Which direction is the iterator currently moving?
-  // (1) When moving forward, the internal iterator is positioned at
-  //     the exact entry that yields this->key(), this->value()
-  // (2) When moving backwards, the internal iterator is positioned
-  //     just before all entries whose user key == this->key().
-  enum Direction { kForward, kReverse };
-
-  DBIter(DBImpl* db, const Comparator* cmp, Iterator* iter, SequenceNumber s,
-         uint32_t seed)
-      : db_(db),
-        user_comparator_(cmp),
-        iter_(iter),
-        sequence_(s),
-        direction_(kForward),
-        valid_(false),
-        rnd_(seed),
-        bytes_until_read_sampling_(RandomCompactionPeriod()) {}
-
-  DBIter(const DBIter&) = delete;
-  DBIter& operator=(const DBIter&) = delete;
-
-  virtual ~DBIter() { delete iter_; }
-  virtual bool Valid() const { return valid_; }
-  virtual Slice key() const {
-    assert(valid_);
-    return (direction_ == kForward) ? ExtractUserKey(iter_->key()) : saved_key_;
-  }
-  virtual Slice value() const {
-    assert(valid_);
-    return (direction_ == kForward) ? iter_->value() : saved_value_;
-  }
-  virtual Status status() const {
-    if (status_.ok()) {
-      return iter_->status();
-    } else {
-      return status_;
-    }
-  }
-
-  virtual void Next();
-  virtual void Prev();
-  virtual void Seek(const Slice& target);
-  virtual void SeekToFirst();
-  virtual void SeekToLast();
-
- private:
-  void FindNextUserEntry(bool skipping, std::string* skip);
-  void FindPrevUserEntry();
-  bool ParseKey(ParsedInternalKey* key);
-
-  inline void SaveKey(const Slice& k, std::string* dst) {
-    dst->assign(k.data(), k.size());
-  }
-
-  inline void ClearSavedValue() {
-    if (saved_value_.capacity() > 1048576) {
-      std::string empty;
-      swap(empty, saved_value_);
-    } else {
-      saved_value_.clear();
-    }
-  }
-
-  // Picks the number of bytes that can be read until a compaction is scheduled.
-  size_t RandomCompactionPeriod() {
-    return rnd_.Uniform(2 * config::kReadBytesPeriod);
-  }
-
-  DBImpl* db_;
-  const Comparator* const user_comparator_;
-  Iterator* const iter_;
-  SequenceNumber const sequence_;
-  Status status_;
-  std::string saved_key_;    // == current key when direction_==kReverse
-  std::string saved_value_;  // == current raw value when direction_==kReverse
-  Direction direction_;
-  bool valid_;
-  Random rnd_;
-  size_t bytes_until_read_sampling_;
-};
-
-inline bool DBIter::ParseKey(ParsedInternalKey* ikey) {
-  Slice k = iter_->key();
-
-  size_t bytes_read = k.size() + iter_->value().size();
-  while (bytes_until_read_sampling_ < bytes_read) {
-    bytes_until_read_sampling_ += RandomCompactionPeriod();
-    db_->RecordReadSample(k);
-  }
-  assert(bytes_until_read_sampling_ >= bytes_read);
-  bytes_until_read_sampling_ -= bytes_read;
-
-  if (!ParseInternalKey(k, ikey)) {
-    status_ = Status::Corruption("corrupted internal key in DBIter");
-    return false;
-  } else {
-    return true;
-  }
-}
-
-void DBIter::Next() {
-  assert(valid_);
-
-  if (direction_ == kReverse) {  // Switch directions?
-    direction_ = kForward;
-    // iter_ is pointing just before the entries for this->key(),
-    // so advance into the range of entries for this->key() and then
-    // use the normal skipping code below.
-    if (!iter_->Valid()) {
-      iter_->SeekToFirst();
-    } else {
-      iter_->Next();
-    }
-    if (!iter_->Valid()) {
-      valid_ = false;
-      saved_key_.clear();
-      return;
-    }
-    // saved_key_ already contains the key to skip past.
-  } else {
-    // Store in saved_key_ the current key so we skip it below.
-    SaveKey(ExtractUserKey(iter_->key()), &saved_key_);
-  }
-
-  FindNextUserEntry(true, &saved_key_);
-}
-
-void DBIter::FindNextUserEntry(bool skipping, std::string* skip) {
-  // Loop until we hit an acceptable entry to yield
-  assert(iter_->Valid());
-  assert(direction_ == kForward);
-  do {
-    ParsedInternalKey ikey;
-    if (ParseKey(&ikey) && ikey.sequence <= sequence_) {
-      switch (ikey.type) {
-        case kTypeDeletion:
-          // Arrange to skip all upcoming entries for this key since
-          // they are hidden by this deletion.
-          SaveKey(ikey.user_key, skip);
-          skipping = true;
-          break;
-        case kTypeValue:
-          if (skipping &&
-              user_comparator_->Compare(ikey.user_key, *skip) <= 0) {
-            // Entry hidden
-          } else {
-            valid_ = true;
-            saved_key_.clear();
-            return;
-          }
-          break;
-      }
-    }
-    iter_->Next();
-  } while (iter_->Valid());
-  saved_key_.clear();
-  valid_ = false;
-}
-
-void DBIter::Prev() {
-  assert(valid_);
-
-  if (direction_ == kForward) {  // Switch directions?
-    // iter_ is pointing at the current entry.  Scan backwards until
-    // the key changes so we can use the normal reverse scanning code.
-    assert(iter_->Valid());  // Otherwise valid_ would have been false
-    SaveKey(ExtractUserKey(iter_->key()), &saved_key_);
-    while (true) {
-      iter_->Prev();
-      if (!iter_->Valid()) {
-        valid_ = false;
-        saved_key_.clear();
-        ClearSavedValue();
-        return;
-      }
-      if (user_comparator_->Compare(ExtractUserKey(iter_->key()), saved_key_) <
-          0) {
-        break;
-      }
-    }
-    direction_ = kReverse;
-  }
-
-  FindPrevUserEntry();
-}
-
-void DBIter::FindPrevUserEntry() {
-  assert(direction_ == kReverse);
-
-  ValueType value_type = kTypeDeletion;
-  if (iter_->Valid()) {
-    do {
-      ParsedInternalKey ikey;
-      if (ParseKey(&ikey) && ikey.sequence <= sequence_) {
-        if ((value_type != kTypeDeletion) &&
-            user_comparator_->Compare(ikey.user_key, saved_key_) < 0) {
-          // We encountered a non-deleted value in entries for previous keys,
-          break;
-        }
-        value_type = ikey.type;
-        if (value_type == kTypeDeletion) {
-          saved_key_.clear();
-          ClearSavedValue();
-        } else {
-          Slice raw_value = iter_->value();
-          if (saved_value_.capacity() > raw_value.size() + 1048576) {
-            std::string empty;
-            swap(empty, saved_value_);
-          }
-          SaveKey(ExtractUserKey(iter_->key()), &saved_key_);
-          saved_value_.assign(raw_value.data(), raw_value.size());
-        }
-      }
-      iter_->Prev();
-    } while (iter_->Valid());
-  }
-
-  if (value_type == kTypeDeletion) {
-    // End
-    valid_ = false;
-    saved_key_.clear();
-    ClearSavedValue();
-    direction_ = kForward;
-  } else {
-    valid_ = true;
-  }
-}
-
-void DBIter::Seek(const Slice& target) {
-  direction_ = kForward;
-  ClearSavedValue();
-  saved_key_.clear();
-  AppendInternalKey(&saved_key_,
-                    ParsedInternalKey(target, sequence_, kValueTypeForSeek));
-  iter_->Seek(saved_key_);
-  if (iter_->Valid()) {
-    FindNextUserEntry(false, &saved_key_ /* temporary storage */);
-  } else {
-    valid_ = false;
-  }
-}
-
-void DBIter::SeekToFirst() {
-  direction_ = kForward;
-  ClearSavedValue();
-  iter_->SeekToFirst();
-  if (iter_->Valid()) {
-    FindNextUserEntry(false, &saved_key_ /* temporary storage */);
-  } else {
-    valid_ = false;
-  }
-}
-
-void DBIter::SeekToLast() {
-  direction_ = kReverse;
-  ClearSavedValue();
-  iter_->SeekToLast();
-  FindPrevUserEntry();
-}
-
-}  // anonymous namespace
-
-Iterator* NewDBIterator(DBImpl* db, const Comparator* user_key_comparator,
-                        Iterator* internal_iter, SequenceNumber sequence,
-                        uint32_t seed) {
-  return new DBIter(db, user_key_comparator, internal_iter, sequence, seed);
-}
-
-}  // namespace leveldb
diff --git a/assign5/openTok/Pods/leveldb-library/db/db_iter.h b/assign5/openTok/Pods/leveldb-library/db/db_iter.h
deleted file mode 100644
index fd93e91..0000000
--- a/assign5/openTok/Pods/leveldb-library/db/db_iter.h
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#ifndef STORAGE_LEVELDB_DB_DB_ITER_H_
-#define STORAGE_LEVELDB_DB_DB_ITER_H_
-
-#include <stdint.h>
-
-#include "db/dbformat.h"
-#include "leveldb/db.h"
-
-namespace leveldb {
-
-class DBImpl;
-
-// Return a new iterator that converts internal keys (yielded by
-// "*internal_iter") that were live at the specified "sequence" number
-// into appropriate user keys.
-Iterator* NewDBIterator(DBImpl* db, const Comparator* user_key_comparator,
-                        Iterator* internal_iter, SequenceNumber sequence,
-                        uint32_t seed);
-
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_DB_DB_ITER_H_
diff --git a/assign5/openTok/Pods/leveldb-library/db/dbformat.cc b/assign5/openTok/Pods/leveldb-library/db/dbformat.cc
deleted file mode 100644
index 69e8dc6..0000000
--- a/assign5/openTok/Pods/leveldb-library/db/dbformat.cc
+++ /dev/null
@@ -1,140 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#include "db/dbformat.h"
-
-#include <stdio.h>
-
-#include "port/port.h"
-#include "util/coding.h"
-
-namespace leveldb {
-
-static uint64_t PackSequenceAndType(uint64_t seq, ValueType t) {
-  assert(seq <= kMaxSequenceNumber);
-  assert(t <= kValueTypeForSeek);
-  return (seq << 8) | t;
-}
-
-void AppendInternalKey(std::string* result, const ParsedInternalKey& key) {
-  result->append(key.user_key.data(), key.user_key.size());
-  PutFixed64(result, PackSequenceAndType(key.sequence, key.type));
-}
-
-std::string ParsedInternalKey::DebugString() const {
-  char buf[50];
-  snprintf(buf, sizeof(buf), "' @ %llu : %d", (unsigned long long)sequence,
-           int(type));
-  std::string result = "'";
-  result += EscapeString(user_key.ToString());
-  result += buf;
-  return result;
-}
-
-std::string InternalKey::DebugString() const {
-  std::string result;
-  ParsedInternalKey parsed;
-  if (ParseInternalKey(rep_, &parsed)) {
-    result = parsed.DebugString();
-  } else {
-    result = "(bad)";
-    result.append(EscapeString(rep_));
-  }
-  return result;
-}
-
-const char* InternalKeyComparator::Name() const {
-  return "leveldb.InternalKeyComparator";
-}
-
-int InternalKeyComparator::Compare(const Slice& akey, const Slice& bkey) const {
-  // Order by:
-  //    increasing user key (according to user-supplied comparator)
-  //    decreasing sequence number
-  //    decreasing type (though sequence# should be enough to disambiguate)
-  int r = user_comparator_->Compare(ExtractUserKey(akey), ExtractUserKey(bkey));
-  if (r == 0) {
-    const uint64_t anum = DecodeFixed64(akey.data() + akey.size() - 8);
-    const uint64_t bnum = DecodeFixed64(bkey.data() + bkey.size() - 8);
-    if (anum > bnum) {
-      r = -1;
-    } else if (anum < bnum) {
-      r = +1;
-    }
-  }
-  return r;
-}
-
-void InternalKeyComparator::FindShortestSeparator(std::string* start,
-                                                  const Slice& limit) const {
-  // Attempt to shorten the user portion of the key
-  Slice user_start = ExtractUserKey(*start);
-  Slice user_limit = ExtractUserKey(limit);
-  std::string tmp(user_start.data(), user_start.size());
-  user_comparator_->FindShortestSeparator(&tmp, user_limit);
-  if (tmp.size() < user_start.size() &&
-      user_comparator_->Compare(user_start, tmp) < 0) {
-    // User key has become shorter physically, but larger logically.
-    // Tack on the earliest possible number to the shortened user key.
-    PutFixed64(&tmp,
-               PackSequenceAndType(kMaxSequenceNumber, kValueTypeForSeek));
-    assert(this->Compare(*start, tmp) < 0);
-    assert(this->Compare(tmp, limit) < 0);
-    start->swap(tmp);
-  }
-}
-
-void InternalKeyComparator::FindShortSuccessor(std::string* key) const {
-  Slice user_key = ExtractUserKey(*key);
-  std::string tmp(user_key.data(), user_key.size());
-  user_comparator_->FindShortSuccessor(&tmp);
-  if (tmp.size() < user_key.size() &&
-      user_comparator_->Compare(user_key, tmp) < 0) {
-    // User key has become shorter physically, but larger logically.
-    // Tack on the earliest possible number to the shortened user key.
-    PutFixed64(&tmp,
-               PackSequenceAndType(kMaxSequenceNumber, kValueTypeForSeek));
-    assert(this->Compare(*key, tmp) < 0);
-    key->swap(tmp);
-  }
-}
-
-const char* InternalFilterPolicy::Name() const { return user_policy_->Name(); }
-
-void InternalFilterPolicy::CreateFilter(const Slice* keys, int n,
-                                        std::string* dst) const {
-  // We rely on the fact that the code in table.cc does not mind us
-  // adjusting keys[].
-  Slice* mkey = const_cast<Slice*>(keys);
-  for (int i = 0; i < n; i++) {
-    mkey[i] = ExtractUserKey(keys[i]);
-    // TODO(sanjay): Suppress dups?
-  }
-  user_policy_->CreateFilter(keys, n, dst);
-}
-
-bool InternalFilterPolicy::KeyMayMatch(const Slice& key, const Slice& f) const {
-  return user_policy_->KeyMayMatch(ExtractUserKey(key), f);
-}
-
-LookupKey::LookupKey(const Slice& user_key, SequenceNumber s) {
-  size_t usize = user_key.size();
-  size_t needed = usize + 13;  // A conservative estimate
-  char* dst;
-  if (needed <= sizeof(space_)) {
-    dst = space_;
-  } else {
-    dst = new char[needed];
-  }
-  start_ = dst;
-  dst = EncodeVarint32(dst, usize + 8);
-  kstart_ = dst;
-  memcpy(dst, user_key.data(), usize);
-  dst += usize;
-  EncodeFixed64(dst, PackSequenceAndType(s, kValueTypeForSeek));
-  dst += 8;
-  end_ = dst;
-}
-
-}  // namespace leveldb
diff --git a/assign5/openTok/Pods/leveldb-library/db/dbformat.h b/assign5/openTok/Pods/leveldb-library/db/dbformat.h
deleted file mode 100644
index 013028a..0000000
--- a/assign5/openTok/Pods/leveldb-library/db/dbformat.h
+++ /dev/null
@@ -1,218 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#ifndef STORAGE_LEVELDB_DB_DBFORMAT_H_
-#define STORAGE_LEVELDB_DB_DBFORMAT_H_
-
-#include <stdio.h>
-
-#include "leveldb/comparator.h"
-#include "leveldb/db.h"
-#include "leveldb/filter_policy.h"
-#include "leveldb/slice.h"
-#include "leveldb/table_builder.h"
-#include "util/coding.h"
-#include "util/logging.h"
-
-namespace leveldb {
-
-// Grouping of constants.  We may want to make some of these
-// parameters set via options.
-namespace config {
-static const int kNumLevels = 7;
-
-// Level-0 compaction is started when we hit this many files.
-static const int kL0_CompactionTrigger = 4;
-
-// Soft limit on number of level-0 files.  We slow down writes at this point.
-static const int kL0_SlowdownWritesTrigger = 8;
-
-// Maximum number of level-0 files.  We stop writes at this point.
-static const int kL0_StopWritesTrigger = 12;
-
-// Maximum level to which a new compacted memtable is pushed if it
-// does not create overlap.  We try to push to level 2 to avoid the
-// relatively expensive level 0=>1 compactions and to avoid some
-// expensive manifest file operations.  We do not push all the way to
-// the largest level since that can generate a lot of wasted disk
-// space if the same key space is being repeatedly overwritten.
-static const int kMaxMemCompactLevel = 2;
-
-// Approximate gap in bytes between samples of data read during iteration.
-static const int kReadBytesPeriod = 1048576;
-
-}  // namespace config
-
-class InternalKey;
-
-// Value types encoded as the last component of internal keys.
-// DO NOT CHANGE THESE ENUM VALUES: they are embedded in the on-disk
-// data structures.
-enum ValueType { kTypeDeletion = 0x0, kTypeValue = 0x1 };
-// kValueTypeForSeek defines the ValueType that should be passed when
-// constructing a ParsedInternalKey object for seeking to a particular
-// sequence number (since we sort sequence numbers in decreasing order
-// and the value type is embedded as the low 8 bits in the sequence
-// number in internal keys, we need to use the highest-numbered
-// ValueType, not the lowest).
-static const ValueType kValueTypeForSeek = kTypeValue;
-
-typedef uint64_t SequenceNumber;
-
-// We leave eight bits empty at the bottom so a type and sequence#
-// can be packed together into 64-bits.
-static const SequenceNumber kMaxSequenceNumber = ((0x1ull << 56) - 1);
-
-struct ParsedInternalKey {
-  Slice user_key;
-  SequenceNumber sequence;
-  ValueType type;
-
-  ParsedInternalKey() {}  // Intentionally left uninitialized (for speed)
-  ParsedInternalKey(const Slice& u, const SequenceNumber& seq, ValueType t)
-      : user_key(u), sequence(seq), type(t) {}
-  std::string DebugString() const;
-};
-
-// Return the length of the encoding of "key".
-inline size_t InternalKeyEncodingLength(const ParsedInternalKey& key) {
-  return key.user_key.size() + 8;
-}
-
-// Append the serialization of "key" to *result.
-void AppendInternalKey(std::string* result, const ParsedInternalKey& key);
-
-// Attempt to parse an internal key from "internal_key".  On success,
-// stores the parsed data in "*result", and returns true.
-//
-// On error, returns false, leaves "*result" in an undefined state.
-bool ParseInternalKey(const Slice& internal_key, ParsedInternalKey* result);
-
-// Returns the user key portion of an internal key.
-inline Slice ExtractUserKey(const Slice& internal_key) {
-  assert(internal_key.size() >= 8);
-  return Slice(internal_key.data(), internal_key.size() - 8);
-}
-
-// A comparator for internal keys that uses a specified comparator for
-// the user key portion and breaks ties by decreasing sequence number.
-class InternalKeyComparator : public Comparator {
- private:
-  const Comparator* user_comparator_;
-
- public:
-  explicit InternalKeyComparator(const Comparator* c) : user_comparator_(c) {}
-  virtual const char* Name() const;
-  virtual int Compare(const Slice& a, const Slice& b) const;
-  virtual void FindShortestSeparator(std::string* start,
-                                     const Slice& limit) const;
-  virtual void FindShortSuccessor(std::string* key) const;
-
-  const Comparator* user_comparator() const { return user_comparator_; }
-
-  int Compare(const InternalKey& a, const InternalKey& b) const;
-};
-
-// Filter policy wrapper that converts from internal keys to user keys
-class InternalFilterPolicy : public FilterPolicy {
- private:
-  const FilterPolicy* const user_policy_;
-
- public:
-  explicit InternalFilterPolicy(const FilterPolicy* p) : user_policy_(p) {}
-  virtual const char* Name() const;
-  virtual void CreateFilter(const Slice* keys, int n, std::string* dst) const;
-  virtual bool KeyMayMatch(const Slice& key, const Slice& filter) const;
-};
-
-// Modules in this directory should keep internal keys wrapped inside
-// the following class instead of plain strings so that we do not
-// incorrectly use string comparisons instead of an InternalKeyComparator.
-class InternalKey {
- private:
-  std::string rep_;
-
- public:
-  InternalKey() {}  // Leave rep_ as empty to indicate it is invalid
-  InternalKey(const Slice& user_key, SequenceNumber s, ValueType t) {
-    AppendInternalKey(&rep_, ParsedInternalKey(user_key, s, t));
-  }
-
-  void DecodeFrom(const Slice& s) { rep_.assign(s.data(), s.size()); }
-  Slice Encode() const {
-    assert(!rep_.empty());
-    return rep_;
-  }
-
-  Slice user_key() const { return ExtractUserKey(rep_); }
-
-  void SetFrom(const ParsedInternalKey& p) {
-    rep_.clear();
-    AppendInternalKey(&rep_, p);
-  }
-
-  void Clear() { rep_.clear(); }
-
-  std::string DebugString() const;
-};
-
-inline int InternalKeyComparator::Compare(const InternalKey& a,
-                                          const InternalKey& b) const {
-  return Compare(a.Encode(), b.Encode());
-}
-
-inline bool ParseInternalKey(const Slice& internal_key,
-                             ParsedInternalKey* result) {
-  const size_t n = internal_key.size();
-  if (n < 8) return false;
-  uint64_t num = DecodeFixed64(internal_key.data() + n - 8);
-  unsigned char c = num & 0xff;
-  result->sequence = num >> 8;
-  result->type = static_cast<ValueType>(c);
-  result->user_key = Slice(internal_key.data(), n - 8);
-  return (c <= static_cast<unsigned char>(kTypeValue));
-}
-
-// A helper class useful for DBImpl::Get()
-class LookupKey {
- public:
-  // Initialize *this for looking up user_key at a snapshot with
-  // the specified sequence number.
-  LookupKey(const Slice& user_key, SequenceNumber sequence);
-
-  LookupKey(const LookupKey&) = delete;
-  LookupKey& operator=(const LookupKey&) = delete;
-
-  ~LookupKey();
-
-  // Return a key suitable for lookup in a MemTable.
-  Slice memtable_key() const { return Slice(start_, end_ - start_); }
-
-  // Return an internal key (suitable for passing to an internal iterator)
-  Slice internal_key() const { return Slice(kstart_, end_ - kstart_); }
-
-  // Return the user key
-  Slice user_key() const { return Slice(kstart_, end_ - kstart_ - 8); }
-
- private:
-  // We construct a char array of the form:
-  //    klength  varint32               <-- start_
-  //    userkey  char[klength]          <-- kstart_
-  //    tag      uint64
-  //                                    <-- end_
-  // The array is a suitable MemTable key.
-  // The suffix starting with "userkey" can be used as an InternalKey.
-  const char* start_;
-  const char* kstart_;
-  const char* end_;
-  char space_[200];  // Avoid allocation for short keys
-};
-
-inline LookupKey::~LookupKey() {
-  if (start_ != space_) delete[] start_;
-}
-
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_DB_DBFORMAT_H_
diff --git a/assign5/openTok/Pods/leveldb-library/db/dumpfile.cc b/assign5/openTok/Pods/leveldb-library/db/dumpfile.cc
deleted file mode 100644
index 9d22d58..0000000
--- a/assign5/openTok/Pods/leveldb-library/db/dumpfile.cc
+++ /dev/null
@@ -1,232 +0,0 @@
-// Copyright (c) 2012 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#include "leveldb/dumpfile.h"
-
-#include <stdio.h>
-
-#include "db/dbformat.h"
-#include "db/filename.h"
-#include "db/log_reader.h"
-#include "db/version_edit.h"
-#include "db/write_batch_internal.h"
-#include "leveldb/env.h"
-#include "leveldb/iterator.h"
-#include "leveldb/options.h"
-#include "leveldb/status.h"
-#include "leveldb/table.h"
-#include "leveldb/write_batch.h"
-#include "util/logging.h"
-
-namespace leveldb {
-
-namespace {
-
-bool GuessType(const std::string& fname, FileType* type) {
-  size_t pos = fname.rfind('/');
-  std::string basename;
-  if (pos == std::string::npos) {
-    basename = fname;
-  } else {
-    basename = std::string(fname.data() + pos + 1, fname.size() - pos - 1);
-  }
-  uint64_t ignored;
-  return ParseFileName(basename, &ignored, type);
-}
-
-// Notified when log reader encounters corruption.
-class CorruptionReporter : public log::Reader::Reporter {
- public:
-  virtual void Corruption(size_t bytes, const Status& status) {
-    std::string r = "corruption: ";
-    AppendNumberTo(&r, bytes);
-    r += " bytes; ";
-    r += status.ToString();
-    r.push_back('\n');
-    dst_->Append(r);
-  }
-
-  WritableFile* dst_;
-};
-
-// Print contents of a log file. (*func)() is called on every record.
-Status PrintLogContents(Env* env, const std::string& fname,
-                        void (*func)(uint64_t, Slice, WritableFile*),
-                        WritableFile* dst) {
-  SequentialFile* file;
-  Status s = env->NewSequentialFile(fname, &file);
-  if (!s.ok()) {
-    return s;
-  }
-  CorruptionReporter reporter;
-  reporter.dst_ = dst;
-  log::Reader reader(file, &reporter, true, 0);
-  Slice record;
-  std::string scratch;
-  while (reader.ReadRecord(&record, &scratch)) {
-    (*func)(reader.LastRecordOffset(), record, dst);
-  }
-  delete file;
-  return Status::OK();
-}
-
-// Called on every item found in a WriteBatch.
-class WriteBatchItemPrinter : public WriteBatch::Handler {
- public:
-  virtual void Put(const Slice& key, const Slice& value) {
-    std::string r = "  put '";
-    AppendEscapedStringTo(&r, key);
-    r += "' '";
-    AppendEscapedStringTo(&r, value);
-    r += "'\n";
-    dst_->Append(r);
-  }
-  virtual void Delete(const Slice& key) {
-    std::string r = "  del '";
-    AppendEscapedStringTo(&r, key);
-    r += "'\n";
-    dst_->Append(r);
-  }
-
-  WritableFile* dst_;
-};
-
-// Called on every log record (each one of which is a WriteBatch)
-// found in a kLogFile.
-static void WriteBatchPrinter(uint64_t pos, Slice record, WritableFile* dst) {
-  std::string r = "--- offset ";
-  AppendNumberTo(&r, pos);
-  r += "; ";
-  if (record.size() < 12) {
-    r += "log record length ";
-    AppendNumberTo(&r, record.size());
-    r += " is too small\n";
-    dst->Append(r);
-    return;
-  }
-  WriteBatch batch;
-  WriteBatchInternal::SetContents(&batch, record);
-  r += "sequence ";
-  AppendNumberTo(&r, WriteBatchInternal::Sequence(&batch));
-  r.push_back('\n');
-  dst->Append(r);
-  WriteBatchItemPrinter batch_item_printer;
-  batch_item_printer.dst_ = dst;
-  Status s = batch.Iterate(&batch_item_printer);
-  if (!s.ok()) {
-    dst->Append("  error: " + s.ToString() + "\n");
-  }
-}
-
-Status DumpLog(Env* env, const std::string& fname, WritableFile* dst) {
-  return PrintLogContents(env, fname, WriteBatchPrinter, dst);
-}
-
-// Called on every log record (each one of which is a WriteBatch)
-// found in a kDescriptorFile.
-static void VersionEditPrinter(uint64_t pos, Slice record, WritableFile* dst) {
-  std::string r = "--- offset ";
-  AppendNumberTo(&r, pos);
-  r += "; ";
-  VersionEdit edit;
-  Status s = edit.DecodeFrom(record);
-  if (!s.ok()) {
-    r += s.ToString();
-    r.push_back('\n');
-  } else {
-    r += edit.DebugString();
-  }
-  dst->Append(r);
-}
-
-Status DumpDescriptor(Env* env, const std::string& fname, WritableFile* dst) {
-  return PrintLogContents(env, fname, VersionEditPrinter, dst);
-}
-
-Status DumpTable(Env* env, const std::string& fname, WritableFile* dst) {
-  uint64_t file_size;
-  RandomAccessFile* file = nullptr;
-  Table* table = nullptr;
-  Status s = env->GetFileSize(fname, &file_size);
-  if (s.ok()) {
-    s = env->NewRandomAccessFile(fname, &file);
-  }
-  if (s.ok()) {
-    // We use the default comparator, which may or may not match the
-    // comparator used in this database. However this should not cause
-    // problems since we only use Table operations that do not require
-    // any comparisons.  In particular, we do not call Seek or Prev.
-    s = Table::Open(Options(), file, file_size, &table);
-  }
-  if (!s.ok()) {
-    delete table;
-    delete file;
-    return s;
-  }
-
-  ReadOptions ro;
-  ro.fill_cache = false;
-  Iterator* iter = table->NewIterator(ro);
-  std::string r;
-  for (iter->SeekToFirst(); iter->Valid(); iter->Next()) {
-    r.clear();
-    ParsedInternalKey key;
-    if (!ParseInternalKey(iter->key(), &key)) {
-      r = "badkey '";
-      AppendEscapedStringTo(&r, iter->key());
-      r += "' => '";
-      AppendEscapedStringTo(&r, iter->value());
-      r += "'\n";
-      dst->Append(r);
-    } else {
-      r = "'";
-      AppendEscapedStringTo(&r, key.user_key);
-      r += "' @ ";
-      AppendNumberTo(&r, key.sequence);
-      r += " : ";
-      if (key.type == kTypeDeletion) {
-        r += "del";
-      } else if (key.type == kTypeValue) {
-        r += "val";
-      } else {
-        AppendNumberTo(&r, key.type);
-      }
-      r += " => '";
-      AppendEscapedStringTo(&r, iter->value());
-      r += "'\n";
-      dst->Append(r);
-    }
-  }
-  s = iter->status();
-  if (!s.ok()) {
-    dst->Append("iterator error: " + s.ToString() + "\n");
-  }
-
-  delete iter;
-  delete table;
-  delete file;
-  return Status::OK();
-}
-
-}  // namespace
-
-Status DumpFile(Env* env, const std::string& fname, WritableFile* dst) {
-  FileType ftype;
-  if (!GuessType(fname, &ftype)) {
-    return Status::InvalidArgument(fname + ": unknown file type");
-  }
-  switch (ftype) {
-    case kLogFile:
-      return DumpLog(env, fname, dst);
-    case kDescriptorFile:
-      return DumpDescriptor(env, fname, dst);
-    case kTableFile:
-      return DumpTable(env, fname, dst);
-    default:
-      break;
-  }
-  return Status::InvalidArgument(fname + ": not a dump-able file type");
-}
-
-}  // namespace leveldb
diff --git a/assign5/openTok/Pods/leveldb-library/db/filename.cc b/assign5/openTok/Pods/leveldb-library/db/filename.cc
deleted file mode 100644
index 85de45c..0000000
--- a/assign5/openTok/Pods/leveldb-library/db/filename.cc
+++ /dev/null
@@ -1,141 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#include "db/filename.h"
-
-#include <ctype.h>
-#include <stdio.h>
-
-#include "db/dbformat.h"
-#include "leveldb/env.h"
-#include "util/logging.h"
-
-namespace leveldb {
-
-// A utility routine: write "data" to the named file and Sync() it.
-Status WriteStringToFileSync(Env* env, const Slice& data,
-                             const std::string& fname);
-
-static std::string MakeFileName(const std::string& dbname, uint64_t number,
-                                const char* suffix) {
-  char buf[100];
-  snprintf(buf, sizeof(buf), "/%06llu.%s",
-           static_cast<unsigned long long>(number), suffix);
-  return dbname + buf;
-}
-
-std::string LogFileName(const std::string& dbname, uint64_t number) {
-  assert(number > 0);
-  return MakeFileName(dbname, number, "log");
-}
-
-std::string TableFileName(const std::string& dbname, uint64_t number) {
-  assert(number > 0);
-  return MakeFileName(dbname, number, "ldb");
-}
-
-std::string SSTTableFileName(const std::string& dbname, uint64_t number) {
-  assert(number > 0);
-  return MakeFileName(dbname, number, "sst");
-}
-
-std::string DescriptorFileName(const std::string& dbname, uint64_t number) {
-  assert(number > 0);
-  char buf[100];
-  snprintf(buf, sizeof(buf), "/MANIFEST-%06llu",
-           static_cast<unsigned long long>(number));
-  return dbname + buf;
-}
-
-std::string CurrentFileName(const std::string& dbname) {
-  return dbname + "/CURRENT";
-}
-
-std::string LockFileName(const std::string& dbname) { return dbname + "/LOCK"; }
-
-std::string TempFileName(const std::string& dbname, uint64_t number) {
-  assert(number > 0);
-  return MakeFileName(dbname, number, "dbtmp");
-}
-
-std::string InfoLogFileName(const std::string& dbname) {
-  return dbname + "/LOG";
-}
-
-// Return the name of the old info log file for "dbname".
-std::string OldInfoLogFileName(const std::string& dbname) {
-  return dbname + "/LOG.old";
-}
-
-// Owned filenames have the form:
-//    dbname/CURRENT
-//    dbname/LOCK
-//    dbname/LOG
-//    dbname/LOG.old
-//    dbname/MANIFEST-[0-9]+
-//    dbname/[0-9]+.(log|sst|ldb)
-bool ParseFileName(const std::string& filename, uint64_t* number,
-                   FileType* type) {
-  Slice rest(filename);
-  if (rest == "CURRENT") {
-    *number = 0;
-    *type = kCurrentFile;
-  } else if (rest == "LOCK") {
-    *number = 0;
-    *type = kDBLockFile;
-  } else if (rest == "LOG" || rest == "LOG.old") {
-    *number = 0;
-    *type = kInfoLogFile;
-  } else if (rest.starts_with("MANIFEST-")) {
-    rest.remove_prefix(strlen("MANIFEST-"));
-    uint64_t num;
-    if (!ConsumeDecimalNumber(&rest, &num)) {
-      return false;
-    }
-    if (!rest.empty()) {
-      return false;
-    }
-    *type = kDescriptorFile;
-    *number = num;
-  } else {
-    // Avoid strtoull() to keep filename format independent of the
-    // current locale
-    uint64_t num;
-    if (!ConsumeDecimalNumber(&rest, &num)) {
-      return false;
-    }
-    Slice suffix = rest;
-    if (suffix == Slice(".log")) {
-      *type = kLogFile;
-    } else if (suffix == Slice(".sst") || suffix == Slice(".ldb")) {
-      *type = kTableFile;
-    } else if (suffix == Slice(".dbtmp")) {
-      *type = kTempFile;
-    } else {
-      return false;
-    }
-    *number = num;
-  }
-  return true;
-}
-
-Status SetCurrentFile(Env* env, const std::string& dbname,
-                      uint64_t descriptor_number) {
-  // Remove leading "dbname/" and add newline to manifest file name
-  std::string manifest = DescriptorFileName(dbname, descriptor_number);
-  Slice contents = manifest;
-  assert(contents.starts_with(dbname + "/"));
-  contents.remove_prefix(dbname.size() + 1);
-  std::string tmp = TempFileName(dbname, descriptor_number);
-  Status s = WriteStringToFileSync(env, contents.ToString() + "\n", tmp);
-  if (s.ok()) {
-    s = env->RenameFile(tmp, CurrentFileName(dbname));
-  }
-  if (!s.ok()) {
-    env->DeleteFile(tmp);
-  }
-  return s;
-}
-
-}  // namespace leveldb
diff --git a/assign5/openTok/Pods/leveldb-library/db/filename.h b/assign5/openTok/Pods/leveldb-library/db/filename.h
deleted file mode 100644
index 524e813..0000000
--- a/assign5/openTok/Pods/leveldb-library/db/filename.h
+++ /dev/null
@@ -1,84 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-//
-// File names used by DB code
-
-#ifndef STORAGE_LEVELDB_DB_FILENAME_H_
-#define STORAGE_LEVELDB_DB_FILENAME_H_
-
-#include <stdint.h>
-
-#include <string>
-
-#include "leveldb/slice.h"
-#include "leveldb/status.h"
-#include "port/port.h"
-
-namespace leveldb {
-
-class Env;
-
-enum FileType {
-  kLogFile,
-  kDBLockFile,
-  kTableFile,
-  kDescriptorFile,
-  kCurrentFile,
-  kTempFile,
-  kInfoLogFile  // Either the current one, or an old one
-};
-
-// Return the name of the log file with the specified number
-// in the db named by "dbname".  The result will be prefixed with
-// "dbname".
-std::string LogFileName(const std::string& dbname, uint64_t number);
-
-// Return the name of the sstable with the specified number
-// in the db named by "dbname".  The result will be prefixed with
-// "dbname".
-std::string TableFileName(const std::string& dbname, uint64_t number);
-
-// Return the legacy file name for an sstable with the specified number
-// in the db named by "dbname". The result will be prefixed with
-// "dbname".
-std::string SSTTableFileName(const std::string& dbname, uint64_t number);
-
-// Return the name of the descriptor file for the db named by
-// "dbname" and the specified incarnation number.  The result will be
-// prefixed with "dbname".
-std::string DescriptorFileName(const std::string& dbname, uint64_t number);
-
-// Return the name of the current file.  This file contains the name
-// of the current manifest file.  The result will be prefixed with
-// "dbname".
-std::string CurrentFileName(const std::string& dbname);
-
-// Return the name of the lock file for the db named by
-// "dbname".  The result will be prefixed with "dbname".
-std::string LockFileName(const std::string& dbname);
-
-// Return the name of a temporary file owned by the db named "dbname".
-// The result will be prefixed with "dbname".
-std::string TempFileName(const std::string& dbname, uint64_t number);
-
-// Return the name of the info log file for "dbname".
-std::string InfoLogFileName(const std::string& dbname);
-
-// Return the name of the old info log file for "dbname".
-std::string OldInfoLogFileName(const std::string& dbname);
-
-// If filename is a leveldb file, store the type of the file in *type.
-// The number encoded in the filename is stored in *number.  If the
-// filename was successfully parsed, returns true.  Else return false.
-bool ParseFileName(const std::string& filename, uint64_t* number,
-                   FileType* type);
-
-// Make the CURRENT file point to the descriptor file with the
-// specified number.
-Status SetCurrentFile(Env* env, const std::string& dbname,
-                      uint64_t descriptor_number);
-
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_DB_FILENAME_H_
diff --git a/assign5/openTok/Pods/leveldb-library/db/log_format.h b/assign5/openTok/Pods/leveldb-library/db/log_format.h
deleted file mode 100644
index 356e69f..0000000
--- a/assign5/openTok/Pods/leveldb-library/db/log_format.h
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-//
-// Log format information shared by reader and writer.
-// See ../doc/log_format.md for more detail.
-
-#ifndef STORAGE_LEVELDB_DB_LOG_FORMAT_H_
-#define STORAGE_LEVELDB_DB_LOG_FORMAT_H_
-
-namespace leveldb {
-namespace log {
-
-enum RecordType {
-  // Zero is reserved for preallocated files
-  kZeroType = 0,
-
-  kFullType = 1,
-
-  // For fragments
-  kFirstType = 2,
-  kMiddleType = 3,
-  kLastType = 4
-};
-static const int kMaxRecordType = kLastType;
-
-static const int kBlockSize = 32768;
-
-// Header is checksum (4 bytes), length (2 bytes), type (1 byte).
-static const int kHeaderSize = 4 + 2 + 1;
-
-}  // namespace log
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_DB_LOG_FORMAT_H_
diff --git a/assign5/openTok/Pods/leveldb-library/db/log_reader.cc b/assign5/openTok/Pods/leveldb-library/db/log_reader.cc
deleted file mode 100644
index f472723..0000000
--- a/assign5/openTok/Pods/leveldb-library/db/log_reader.cc
+++ /dev/null
@@ -1,274 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#include "db/log_reader.h"
-
-#include <stdio.h>
-
-#include "leveldb/env.h"
-#include "util/coding.h"
-#include "util/crc32c.h"
-
-namespace leveldb {
-namespace log {
-
-Reader::Reporter::~Reporter() {}
-
-Reader::Reader(SequentialFile* file, Reporter* reporter, bool checksum,
-               uint64_t initial_offset)
-    : file_(file),
-      reporter_(reporter),
-      checksum_(checksum),
-      backing_store_(new char[kBlockSize]),
-      buffer_(),
-      eof_(false),
-      last_record_offset_(0),
-      end_of_buffer_offset_(0),
-      initial_offset_(initial_offset),
-      resyncing_(initial_offset > 0) {}
-
-Reader::~Reader() { delete[] backing_store_; }
-
-bool Reader::SkipToInitialBlock() {
-  const size_t offset_in_block = initial_offset_ % kBlockSize;
-  uint64_t block_start_location = initial_offset_ - offset_in_block;
-
-  // Don't search a block if we'd be in the trailer
-  if (offset_in_block > kBlockSize - 6) {
-    block_start_location += kBlockSize;
-  }
-
-  end_of_buffer_offset_ = block_start_location;
-
-  // Skip to start of first block that can contain the initial record
-  if (block_start_location > 0) {
-    Status skip_status = file_->Skip(block_start_location);
-    if (!skip_status.ok()) {
-      ReportDrop(block_start_location, skip_status);
-      return false;
-    }
-  }
-
-  return true;
-}
-
-bool Reader::ReadRecord(Slice* record, std::string* scratch) {
-  if (last_record_offset_ < initial_offset_) {
-    if (!SkipToInitialBlock()) {
-      return false;
-    }
-  }
-
-  scratch->clear();
-  record->clear();
-  bool in_fragmented_record = false;
-  // Record offset of the logical record that we're reading
-  // 0 is a dummy value to make compilers happy
-  uint64_t prospective_record_offset = 0;
-
-  Slice fragment;
-  while (true) {
-    const unsigned int record_type = ReadPhysicalRecord(&fragment);
-
-    // ReadPhysicalRecord may have only had an empty trailer remaining in its
-    // internal buffer. Calculate the offset of the next physical record now
-    // that it has returned, properly accounting for its header size.
-    uint64_t physical_record_offset =
-        end_of_buffer_offset_ - buffer_.size() - kHeaderSize - fragment.size();
-
-    if (resyncing_) {
-      if (record_type == kMiddleType) {
-        continue;
-      } else if (record_type == kLastType) {
-        resyncing_ = false;
-        continue;
-      } else {
-        resyncing_ = false;
-      }
-    }
-
-    switch (record_type) {
-      case kFullType:
-        if (in_fragmented_record) {
-          // Handle bug in earlier versions of log::Writer where
-          // it could emit an empty kFirstType record at the tail end
-          // of a block followed by a kFullType or kFirstType record
-          // at the beginning of the next block.
-          if (!scratch->empty()) {
-            ReportCorruption(scratch->size(), "partial record without end(1)");
-          }
-        }
-        prospective_record_offset = physical_record_offset;
-        scratch->clear();
-        *record = fragment;
-        last_record_offset_ = prospective_record_offset;
-        return true;
-
-      case kFirstType:
-        if (in_fragmented_record) {
-          // Handle bug in earlier versions of log::Writer where
-          // it could emit an empty kFirstType record at the tail end
-          // of a block followed by a kFullType or kFirstType record
-          // at the beginning of the next block.
-          if (!scratch->empty()) {
-            ReportCorruption(scratch->size(), "partial record without end(2)");
-          }
-        }
-        prospective_record_offset = physical_record_offset;
-        scratch->assign(fragment.data(), fragment.size());
-        in_fragmented_record = true;
-        break;
-
-      case kMiddleType:
-        if (!in_fragmented_record) {
-          ReportCorruption(fragment.size(),
-                           "missing start of fragmented record(1)");
-        } else {
-          scratch->append(fragment.data(), fragment.size());
-        }
-        break;
-
-      case kLastType:
-        if (!in_fragmented_record) {
-          ReportCorruption(fragment.size(),
-                           "missing start of fragmented record(2)");
-        } else {
-          scratch->append(fragment.data(), fragment.size());
-          *record = Slice(*scratch);
-          last_record_offset_ = prospective_record_offset;
-          return true;
-        }
-        break;
-
-      case kEof:
-        if (in_fragmented_record) {
-          // This can be caused by the writer dying immediately after
-          // writing a physical record but before completing the next; don't
-          // treat it as a corruption, just ignore the entire logical record.
-          scratch->clear();
-        }
-        return false;
-
-      case kBadRecord:
-        if (in_fragmented_record) {
-          ReportCorruption(scratch->size(), "error in middle of record");
-          in_fragmented_record = false;
-          scratch->clear();
-        }
-        break;
-
-      default: {
-        char buf[40];
-        snprintf(buf, sizeof(buf), "unknown record type %u", record_type);
-        ReportCorruption(
-            (fragment.size() + (in_fragmented_record ? scratch->size() : 0)),
-            buf);
-        in_fragmented_record = false;
-        scratch->clear();
-        break;
-      }
-    }
-  }
-  return false;
-}
-
-uint64_t Reader::LastRecordOffset() { return last_record_offset_; }
-
-void Reader::ReportCorruption(uint64_t bytes, const char* reason) {
-  ReportDrop(bytes, Status::Corruption(reason));
-}
-
-void Reader::ReportDrop(uint64_t bytes, const Status& reason) {
-  if (reporter_ != nullptr &&
-      end_of_buffer_offset_ - buffer_.size() - bytes >= initial_offset_) {
-    reporter_->Corruption(static_cast<size_t>(bytes), reason);
-  }
-}
-
-unsigned int Reader::ReadPhysicalRecord(Slice* result) {
-  while (true) {
-    if (buffer_.size() < kHeaderSize) {
-      if (!eof_) {
-        // Last read was a full read, so this is a trailer to skip
-        buffer_.clear();
-        Status status = file_->Read(kBlockSize, &buffer_, backing_store_);
-        end_of_buffer_offset_ += buffer_.size();
-        if (!status.ok()) {
-          buffer_.clear();
-          ReportDrop(kBlockSize, status);
-          eof_ = true;
-          return kEof;
-        } else if (buffer_.size() < kBlockSize) {
-          eof_ = true;
-        }
-        continue;
-      } else {
-        // Note that if buffer_ is non-empty, we have a truncated header at the
-        // end of the file, which can be caused by the writer crashing in the
-        // middle of writing the header. Instead of considering this an error,
-        // just report EOF.
-        buffer_.clear();
-        return kEof;
-      }
-    }
-
-    // Parse the header
-    const char* header = buffer_.data();
-    const uint32_t a = static_cast<uint32_t>(header[4]) & 0xff;
-    const uint32_t b = static_cast<uint32_t>(header[5]) & 0xff;
-    const unsigned int type = header[6];
-    const uint32_t length = a | (b << 8);
-    if (kHeaderSize + length > buffer_.size()) {
-      size_t drop_size = buffer_.size();
-      buffer_.clear();
-      if (!eof_) {
-        ReportCorruption(drop_size, "bad record length");
-        return kBadRecord;
-      }
-      // If the end of the file has been reached without reading |length| bytes
-      // of payload, assume the writer died in the middle of writing the record.
-      // Don't report a corruption.
-      return kEof;
-    }
-
-    if (type == kZeroType && length == 0) {
-      // Skip zero length record without reporting any drops since
-      // such records are produced by the mmap based writing code in
-      // env_posix.cc that preallocates file regions.
-      buffer_.clear();
-      return kBadRecord;
-    }
-
-    // Check crc
-    if (checksum_) {
-      uint32_t expected_crc = crc32c::Unmask(DecodeFixed32(header));
-      uint32_t actual_crc = crc32c::Value(header + 6, 1 + length);
-      if (actual_crc != expected_crc) {
-        // Drop the rest of the buffer since "length" itself may have
-        // been corrupted and if we trust it, we could find some
-        // fragment of a real log record that just happens to look
-        // like a valid log record.
-        size_t drop_size = buffer_.size();
-        buffer_.clear();
-        ReportCorruption(drop_size, "checksum mismatch");
-        return kBadRecord;
-      }
-    }
-
-    buffer_.remove_prefix(kHeaderSize + length);
-
-    // Skip physical record that started before initial_offset_
-    if (end_of_buffer_offset_ - buffer_.size() - kHeaderSize - length <
-        initial_offset_) {
-      result->clear();
-      return kBadRecord;
-    }
-
-    *result = Slice(header + kHeaderSize, length);
-    return type;
-  }
-}
-
-}  // namespace log
-}  // namespace leveldb
diff --git a/assign5/openTok/Pods/leveldb-library/db/log_reader.h b/assign5/openTok/Pods/leveldb-library/db/log_reader.h
deleted file mode 100644
index 001da89..0000000
--- a/assign5/openTok/Pods/leveldb-library/db/log_reader.h
+++ /dev/null
@@ -1,112 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#ifndef STORAGE_LEVELDB_DB_LOG_READER_H_
-#define STORAGE_LEVELDB_DB_LOG_READER_H_
-
-#include <stdint.h>
-
-#include "db/log_format.h"
-#include "leveldb/slice.h"
-#include "leveldb/status.h"
-
-namespace leveldb {
-
-class SequentialFile;
-
-namespace log {
-
-class Reader {
- public:
-  // Interface for reporting errors.
-  class Reporter {
-   public:
-    virtual ~Reporter();
-
-    // Some corruption was detected.  "size" is the approximate number
-    // of bytes dropped due to the corruption.
-    virtual void Corruption(size_t bytes, const Status& status) = 0;
-  };
-
-  // Create a reader that will return log records from "*file".
-  // "*file" must remain live while this Reader is in use.
-  //
-  // If "reporter" is non-null, it is notified whenever some data is
-  // dropped due to a detected corruption.  "*reporter" must remain
-  // live while this Reader is in use.
-  //
-  // If "checksum" is true, verify checksums if available.
-  //
-  // The Reader will start reading at the first record located at physical
-  // position >= initial_offset within the file.
-  Reader(SequentialFile* file, Reporter* reporter, bool checksum,
-         uint64_t initial_offset);
-
-  Reader(const Reader&) = delete;
-  Reader& operator=(const Reader&) = delete;
-
-  ~Reader();
-
-  // Read the next record into *record.  Returns true if read
-  // successfully, false if we hit end of the input.  May use
-  // "*scratch" as temporary storage.  The contents filled in *record
-  // will only be valid until the next mutating operation on this
-  // reader or the next mutation to *scratch.
-  bool ReadRecord(Slice* record, std::string* scratch);
-
-  // Returns the physical offset of the last record returned by ReadRecord.
-  //
-  // Undefined before the first call to ReadRecord.
-  uint64_t LastRecordOffset();
-
- private:
-  // Extend record types with the following special values
-  enum {
-    kEof = kMaxRecordType + 1,
-    // Returned whenever we find an invalid physical record.
-    // Currently there are three situations in which this happens:
-    // * The record has an invalid CRC (ReadPhysicalRecord reports a drop)
-    // * The record is a 0-length record (No drop is reported)
-    // * The record is below constructor's initial_offset (No drop is reported)
-    kBadRecord = kMaxRecordType + 2
-  };
-
-  // Skips all blocks that are completely before "initial_offset_".
-  //
-  // Returns true on success. Handles reporting.
-  bool SkipToInitialBlock();
-
-  // Return type, or one of the preceding special values
-  unsigned int ReadPhysicalRecord(Slice* result);
-
-  // Reports dropped bytes to the reporter.
-  // buffer_ must be updated to remove the dropped bytes prior to invocation.
-  void ReportCorruption(uint64_t bytes, const char* reason);
-  void ReportDrop(uint64_t bytes, const Status& reason);
-
-  SequentialFile* const file_;
-  Reporter* const reporter_;
-  bool const checksum_;
-  char* const backing_store_;
-  Slice buffer_;
-  bool eof_;  // Last Read() indicated EOF by returning < kBlockSize
-
-  // Offset of the last record returned by ReadRecord.
-  uint64_t last_record_offset_;
-  // Offset of the first location past the end of buffer_.
-  uint64_t end_of_buffer_offset_;
-
-  // Offset at which to start looking for the first record to return
-  uint64_t const initial_offset_;
-
-  // True if we are resynchronizing after a seek (initial_offset_ > 0). In
-  // particular, a run of kMiddleType and kLastType records can be silently
-  // skipped in this mode
-  bool resyncing_;
-};
-
-}  // namespace log
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_DB_LOG_READER_H_
diff --git a/assign5/openTok/Pods/leveldb-library/db/log_writer.cc b/assign5/openTok/Pods/leveldb-library/db/log_writer.cc
deleted file mode 100644
index 5e83f6a..0000000
--- a/assign5/openTok/Pods/leveldb-library/db/log_writer.cc
+++ /dev/null
@@ -1,111 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#include "db/log_writer.h"
-
-#include <stdint.h>
-
-#include "leveldb/env.h"
-#include "util/coding.h"
-#include "util/crc32c.h"
-
-namespace leveldb {
-namespace log {
-
-static void InitTypeCrc(uint32_t* type_crc) {
-  for (int i = 0; i <= kMaxRecordType; i++) {
-    char t = static_cast<char>(i);
-    type_crc[i] = crc32c::Value(&t, 1);
-  }
-}
-
-Writer::Writer(WritableFile* dest) : dest_(dest), block_offset_(0) {
-  InitTypeCrc(type_crc_);
-}
-
-Writer::Writer(WritableFile* dest, uint64_t dest_length)
-    : dest_(dest), block_offset_(dest_length % kBlockSize) {
-  InitTypeCrc(type_crc_);
-}
-
-Writer::~Writer() {}
-
-Status Writer::AddRecord(const Slice& slice) {
-  const char* ptr = slice.data();
-  size_t left = slice.size();
-
-  // Fragment the record if necessary and emit it.  Note that if slice
-  // is empty, we still want to iterate once to emit a single
-  // zero-length record
-  Status s;
-  bool begin = true;
-  do {
-    const int leftover = kBlockSize - block_offset_;
-    assert(leftover >= 0);
-    if (leftover < kHeaderSize) {
-      // Switch to a new block
-      if (leftover > 0) {
-        // Fill the trailer (literal below relies on kHeaderSize being 7)
-        static_assert(kHeaderSize == 7, "");
-        dest_->Append(Slice("\x00\x00\x00\x00\x00\x00", leftover));
-      }
-      block_offset_ = 0;
-    }
-
-    // Invariant: we never leave < kHeaderSize bytes in a block.
-    assert(kBlockSize - block_offset_ - kHeaderSize >= 0);
-
-    const size_t avail = kBlockSize - block_offset_ - kHeaderSize;
-    const size_t fragment_length = (left < avail) ? left : avail;
-
-    RecordType type;
-    const bool end = (left == fragment_length);
-    if (begin && end) {
-      type = kFullType;
-    } else if (begin) {
-      type = kFirstType;
-    } else if (end) {
-      type = kLastType;
-    } else {
-      type = kMiddleType;
-    }
-
-    s = EmitPhysicalRecord(type, ptr, fragment_length);
-    ptr += fragment_length;
-    left -= fragment_length;
-    begin = false;
-  } while (s.ok() && left > 0);
-  return s;
-}
-
-Status Writer::EmitPhysicalRecord(RecordType t, const char* ptr,
-                                  size_t length) {
-  assert(length <= 0xffff);  // Must fit in two bytes
-  assert(block_offset_ + kHeaderSize + length <= kBlockSize);
-
-  // Format the header
-  char buf[kHeaderSize];
-  buf[4] = static_cast<char>(length & 0xff);
-  buf[5] = static_cast<char>(length >> 8);
-  buf[6] = static_cast<char>(t);
-
-  // Compute the crc of the record type and the payload.
-  uint32_t crc = crc32c::Extend(type_crc_[t], ptr, length);
-  crc = crc32c::Mask(crc);  // Adjust for storage
-  EncodeFixed32(buf, crc);
-
-  // Write the header and the payload
-  Status s = dest_->Append(Slice(buf, kHeaderSize));
-  if (s.ok()) {
-    s = dest_->Append(Slice(ptr, length));
-    if (s.ok()) {
-      s = dest_->Flush();
-    }
-  }
-  block_offset_ += kHeaderSize + length;
-  return s;
-}
-
-}  // namespace log
-}  // namespace leveldb
diff --git a/assign5/openTok/Pods/leveldb-library/db/log_writer.h b/assign5/openTok/Pods/leveldb-library/db/log_writer.h
deleted file mode 100644
index c0a2114..0000000
--- a/assign5/openTok/Pods/leveldb-library/db/log_writer.h
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#ifndef STORAGE_LEVELDB_DB_LOG_WRITER_H_
-#define STORAGE_LEVELDB_DB_LOG_WRITER_H_
-
-#include <stdint.h>
-
-#include "db/log_format.h"
-#include "leveldb/slice.h"
-#include "leveldb/status.h"
-
-namespace leveldb {
-
-class WritableFile;
-
-namespace log {
-
-class Writer {
- public:
-  // Create a writer that will append data to "*dest".
-  // "*dest" must be initially empty.
-  // "*dest" must remain live while this Writer is in use.
-  explicit Writer(WritableFile* dest);
-
-  // Create a writer that will append data to "*dest".
-  // "*dest" must have initial length "dest_length".
-  // "*dest" must remain live while this Writer is in use.
-  Writer(WritableFile* dest, uint64_t dest_length);
-
-  Writer(const Writer&) = delete;
-  Writer& operator=(const Writer&) = delete;
-
-  ~Writer();
-
-  Status AddRecord(const Slice& slice);
-
- private:
-  Status EmitPhysicalRecord(RecordType type, const char* ptr, size_t length);
-
-  WritableFile* dest_;
-  int block_offset_;  // Current offset in block
-
-  // crc32c values for all supported record types.  These are
-  // pre-computed to reduce the overhead of computing the crc of the
-  // record type stored in the header.
-  uint32_t type_crc_[kMaxRecordType + 1];
-};
-
-}  // namespace log
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_DB_LOG_WRITER_H_
diff --git a/assign5/openTok/Pods/leveldb-library/db/memtable.cc b/assign5/openTok/Pods/leveldb-library/db/memtable.cc
deleted file mode 100644
index c91405c..0000000
--- a/assign5/openTok/Pods/leveldb-library/db/memtable.cc
+++ /dev/null
@@ -1,136 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#include "db/memtable.h"
-#include "db/dbformat.h"
-#include "leveldb/comparator.h"
-#include "leveldb/env.h"
-#include "leveldb/iterator.h"
-#include "util/coding.h"
-
-namespace leveldb {
-
-static Slice GetLengthPrefixedSlice(const char* data) {
-  uint32_t len;
-  const char* p = data;
-  p = GetVarint32Ptr(p, p + 5, &len);  // +5: we assume "p" is not corrupted
-  return Slice(p, len);
-}
-
-MemTable::MemTable(const InternalKeyComparator& comparator)
-    : comparator_(comparator), refs_(0), table_(comparator_, &arena_) {}
-
-MemTable::~MemTable() { assert(refs_ == 0); }
-
-size_t MemTable::ApproximateMemoryUsage() { return arena_.MemoryUsage(); }
-
-int MemTable::KeyComparator::operator()(const char* aptr,
-                                        const char* bptr) const {
-  // Internal keys are encoded as length-prefixed strings.
-  Slice a = GetLengthPrefixedSlice(aptr);
-  Slice b = GetLengthPrefixedSlice(bptr);
-  return comparator.Compare(a, b);
-}
-
-// Encode a suitable internal key target for "target" and return it.
-// Uses *scratch as scratch space, and the returned pointer will point
-// into this scratch space.
-static const char* EncodeKey(std::string* scratch, const Slice& target) {
-  scratch->clear();
-  PutVarint32(scratch, target.size());
-  scratch->append(target.data(), target.size());
-  return scratch->data();
-}
-
-class MemTableIterator : public Iterator {
- public:
-  explicit MemTableIterator(MemTable::Table* table) : iter_(table) {}
-
-  virtual bool Valid() const { return iter_.Valid(); }
-  virtual void Seek(const Slice& k) { iter_.Seek(EncodeKey(&tmp_, k)); }
-  virtual void SeekToFirst() { iter_.SeekToFirst(); }
-  virtual void SeekToLast() { iter_.SeekToLast(); }
-  virtual void Next() { iter_.Next(); }
-  virtual void Prev() { iter_.Prev(); }
-  virtual Slice key() const { return GetLengthPrefixedSlice(iter_.key()); }
-  virtual Slice value() const {
-    Slice key_slice = GetLengthPrefixedSlice(iter_.key());
-    return GetLengthPrefixedSlice(key_slice.data() + key_slice.size());
-  }
-
-  virtual Status status() const { return Status::OK(); }
-
- private:
-  MemTable::Table::Iterator iter_;
-  std::string tmp_;  // For passing to EncodeKey
-
-  // No copying allowed
-  MemTableIterator(const MemTableIterator&);
-  void operator=(const MemTableIterator&);
-};
-
-Iterator* MemTable::NewIterator() { return new MemTableIterator(&table_); }
-
-void MemTable::Add(SequenceNumber s, ValueType type, const Slice& key,
-                   const Slice& value) {
-  // Format of an entry is concatenation of:
-  //  key_size     : varint32 of internal_key.size()
-  //  key bytes    : char[internal_key.size()]
-  //  value_size   : varint32 of value.size()
-  //  value bytes  : char[value.size()]
-  size_t key_size = key.size();
-  size_t val_size = value.size();
-  size_t internal_key_size = key_size + 8;
-  const size_t encoded_len = VarintLength(internal_key_size) +
-                             internal_key_size + VarintLength(val_size) +
-                             val_size;
-  char* buf = arena_.Allocate(encoded_len);
-  char* p = EncodeVarint32(buf, internal_key_size);
-  memcpy(p, key.data(), key_size);
-  p += key_size;
-  EncodeFixed64(p, (s << 8) | type);
-  p += 8;
-  p = EncodeVarint32(p, val_size);
-  memcpy(p, value.data(), val_size);
-  assert(p + val_size == buf + encoded_len);
-  table_.Insert(buf);
-}
-
-bool MemTable::Get(const LookupKey& key, std::string* value, Status* s) {
-  Slice memkey = key.memtable_key();
-  Table::Iterator iter(&table_);
-  iter.Seek(memkey.data());
-  if (iter.Valid()) {
-    // entry format is:
-    //    klength  varint32
-    //    userkey  char[klength]
-    //    tag      uint64
-    //    vlength  varint32
-    //    value    char[vlength]
-    // Check that it belongs to same user key.  We do not check the
-    // sequence number since the Seek() call above should have skipped
-    // all entries with overly large sequence numbers.
-    const char* entry = iter.key();
-    uint32_t key_length;
-    const char* key_ptr = GetVarint32Ptr(entry, entry + 5, &key_length);
-    if (comparator_.comparator.user_comparator()->Compare(
-            Slice(key_ptr, key_length - 8), key.user_key()) == 0) {
-      // Correct user key
-      const uint64_t tag = DecodeFixed64(key_ptr + key_length - 8);
-      switch (static_cast<ValueType>(tag & 0xff)) {
-        case kTypeValue: {
-          Slice v = GetLengthPrefixedSlice(key_ptr + key_length);
-          value->assign(v.data(), v.size());
-          return true;
-        }
-        case kTypeDeletion:
-          *s = Status::NotFound(Slice());
-          return true;
-      }
-    }
-  }
-  return false;
-}
-
-}  // namespace leveldb
diff --git a/assign5/openTok/Pods/leveldb-library/db/memtable.h b/assign5/openTok/Pods/leveldb-library/db/memtable.h
deleted file mode 100644
index 9d986b1..0000000
--- a/assign5/openTok/Pods/leveldb-library/db/memtable.h
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#ifndef STORAGE_LEVELDB_DB_MEMTABLE_H_
-#define STORAGE_LEVELDB_DB_MEMTABLE_H_
-
-#include <string>
-
-#include "db/dbformat.h"
-#include "db/skiplist.h"
-#include "leveldb/db.h"
-#include "util/arena.h"
-
-namespace leveldb {
-
-class InternalKeyComparator;
-class MemTableIterator;
-
-class MemTable {
- public:
-  // MemTables are reference counted.  The initial reference count
-  // is zero and the caller must call Ref() at least once.
-  explicit MemTable(const InternalKeyComparator& comparator);
-
-  MemTable(const MemTable&) = delete;
-  MemTable& operator=(const MemTable&) = delete;
-
-  // Increase reference count.
-  void Ref() { ++refs_; }
-
-  // Drop reference count.  Delete if no more references exist.
-  void Unref() {
-    --refs_;
-    assert(refs_ >= 0);
-    if (refs_ <= 0) {
-      delete this;
-    }
-  }
-
-  // Returns an estimate of the number of bytes of data in use by this
-  // data structure. It is safe to call when MemTable is being modified.
-  size_t ApproximateMemoryUsage();
-
-  // Return an iterator that yields the contents of the memtable.
-  //
-  // The caller must ensure that the underlying MemTable remains live
-  // while the returned iterator is live.  The keys returned by this
-  // iterator are internal keys encoded by AppendInternalKey in the
-  // db/format.{h,cc} module.
-  Iterator* NewIterator();
-
-  // Add an entry into memtable that maps key to value at the
-  // specified sequence number and with the specified type.
-  // Typically value will be empty if type==kTypeDeletion.
-  void Add(SequenceNumber seq, ValueType type, const Slice& key,
-           const Slice& value);
-
-  // If memtable contains a value for key, store it in *value and return true.
-  // If memtable contains a deletion for key, store a NotFound() error
-  // in *status and return true.
-  // Else, return false.
-  bool Get(const LookupKey& key, std::string* value, Status* s);
-
- private:
-  friend class MemTableIterator;
-  friend class MemTableBackwardIterator;
-
-  struct KeyComparator {
-    const InternalKeyComparator comparator;
-    explicit KeyComparator(const InternalKeyComparator& c) : comparator(c) {}
-    int operator()(const char* a, const char* b) const;
-  };
-
-  typedef SkipList<const char*, KeyComparator> Table;
-
-  ~MemTable();  // Private since only Unref() should be used to delete it
-
-  KeyComparator comparator_;
-  int refs_;
-  Arena arena_;
-  Table table_;
-};
-
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_DB_MEMTABLE_H_
diff --git a/assign5/openTok/Pods/leveldb-library/db/repair.cc b/assign5/openTok/Pods/leveldb-library/db/repair.cc
deleted file mode 100644
index 3c676ca..0000000
--- a/assign5/openTok/Pods/leveldb-library/db/repair.cc
+++ /dev/null
@@ -1,450 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-//
-// We recover the contents of the descriptor from the other files we find.
-// (1) Any log files are first converted to tables
-// (2) We scan every table to compute
-//     (a) smallest/largest for the table
-//     (b) largest sequence number in the table
-// (3) We generate descriptor contents:
-//      - log number is set to zero
-//      - next-file-number is set to 1 + largest file number we found
-//      - last-sequence-number is set to largest sequence# found across
-//        all tables (see 2c)
-//      - compaction pointers are cleared
-//      - every table file is added at level 0
-//
-// Possible optimization 1:
-//   (a) Compute total size and use to pick appropriate max-level M
-//   (b) Sort tables by largest sequence# in the table
-//   (c) For each table: if it overlaps earlier table, place in level-0,
-//       else place in level-M.
-// Possible optimization 2:
-//   Store per-table metadata (smallest, largest, largest-seq#, ...)
-//   in the table's meta section to speed up ScanTable.
-
-#include "db/builder.h"
-#include "db/db_impl.h"
-#include "db/dbformat.h"
-#include "db/filename.h"
-#include "db/log_reader.h"
-#include "db/log_writer.h"
-#include "db/memtable.h"
-#include "db/table_cache.h"
-#include "db/version_edit.h"
-#include "db/write_batch_internal.h"
-#include "leveldb/comparator.h"
-#include "leveldb/db.h"
-#include "leveldb/env.h"
-
-namespace leveldb {
-
-namespace {
-
-class Repairer {
- public:
-  Repairer(const std::string& dbname, const Options& options)
-      : dbname_(dbname),
-        env_(options.env),
-        icmp_(options.comparator),
-        ipolicy_(options.filter_policy),
-        options_(SanitizeOptions(dbname, &icmp_, &ipolicy_, options)),
-        owns_info_log_(options_.info_log != options.info_log),
-        owns_cache_(options_.block_cache != options.block_cache),
-        next_file_number_(1) {
-    // TableCache can be small since we expect each table to be opened once.
-    table_cache_ = new TableCache(dbname_, options_, 10);
-  }
-
-  ~Repairer() {
-    delete table_cache_;
-    if (owns_info_log_) {
-      delete options_.info_log;
-    }
-    if (owns_cache_) {
-      delete options_.block_cache;
-    }
-  }
-
-  Status Run() {
-    Status status = FindFiles();
-    if (status.ok()) {
-      ConvertLogFilesToTables();
-      ExtractMetaData();
-      status = WriteDescriptor();
-    }
-    if (status.ok()) {
-      unsigned long long bytes = 0;
-      for (size_t i = 0; i < tables_.size(); i++) {
-        bytes += tables_[i].meta.file_size;
-      }
-      Log(options_.info_log,
-          "**** Repaired leveldb %s; "
-          "recovered %d files; %llu bytes. "
-          "Some data may have been lost. "
-          "****",
-          dbname_.c_str(), static_cast<int>(tables_.size()), bytes);
-    }
-    return status;
-  }
-
- private:
-  struct TableInfo {
-    FileMetaData meta;
-    SequenceNumber max_sequence;
-  };
-
-  Status FindFiles() {
-    std::vector<std::string> filenames;
-    Status status = env_->GetChildren(dbname_, &filenames);
-    if (!status.ok()) {
-      return status;
-    }
-    if (filenames.empty()) {
-      return Status::IOError(dbname_, "repair found no files");
-    }
-
-    uint64_t number;
-    FileType type;
-    for (size_t i = 0; i < filenames.size(); i++) {
-      if (ParseFileName(filenames[i], &number, &type)) {
-        if (type == kDescriptorFile) {
-          manifests_.push_back(filenames[i]);
-        } else {
-          if (number + 1 > next_file_number_) {
-            next_file_number_ = number + 1;
-          }
-          if (type == kLogFile) {
-            logs_.push_back(number);
-          } else if (type == kTableFile) {
-            table_numbers_.push_back(number);
-          } else {
-            // Ignore other files
-          }
-        }
-      }
-    }
-    return status;
-  }
-
-  void ConvertLogFilesToTables() {
-    for (size_t i = 0; i < logs_.size(); i++) {
-      std::string logname = LogFileName(dbname_, logs_[i]);
-      Status status = ConvertLogToTable(logs_[i]);
-      if (!status.ok()) {
-        Log(options_.info_log, "Log #%llu: ignoring conversion error: %s",
-            (unsigned long long)logs_[i], status.ToString().c_str());
-      }
-      ArchiveFile(logname);
-    }
-  }
-
-  Status ConvertLogToTable(uint64_t log) {
-    struct LogReporter : public log::Reader::Reporter {
-      Env* env;
-      Logger* info_log;
-      uint64_t lognum;
-      virtual void Corruption(size_t bytes, const Status& s) {
-        // We print error messages for corruption, but continue repairing.
-        Log(info_log, "Log #%llu: dropping %d bytes; %s",
-            (unsigned long long)lognum, static_cast<int>(bytes),
-            s.ToString().c_str());
-      }
-    };
-
-    // Open the log file
-    std::string logname = LogFileName(dbname_, log);
-    SequentialFile* lfile;
-    Status status = env_->NewSequentialFile(logname, &lfile);
-    if (!status.ok()) {
-      return status;
-    }
-
-    // Create the log reader.
-    LogReporter reporter;
-    reporter.env = env_;
-    reporter.info_log = options_.info_log;
-    reporter.lognum = log;
-    // We intentionally make log::Reader do checksumming so that
-    // corruptions cause entire commits to be skipped instead of
-    // propagating bad information (like overly large sequence
-    // numbers).
-    log::Reader reader(lfile, &reporter, false /*do not checksum*/,
-                       0 /*initial_offset*/);
-
-    // Read all the records and add to a memtable
-    std::string scratch;
-    Slice record;
-    WriteBatch batch;
-    MemTable* mem = new MemTable(icmp_);
-    mem->Ref();
-    int counter = 0;
-    while (reader.ReadRecord(&record, &scratch)) {
-      if (record.size() < 12) {
-        reporter.Corruption(record.size(),
-                            Status::Corruption("log record too small"));
-        continue;
-      }
-      WriteBatchInternal::SetContents(&batch, record);
-      status = WriteBatchInternal::InsertInto(&batch, mem);
-      if (status.ok()) {
-        counter += WriteBatchInternal::Count(&batch);
-      } else {
-        Log(options_.info_log, "Log #%llu: ignoring %s",
-            (unsigned long long)log, status.ToString().c_str());
-        status = Status::OK();  // Keep going with rest of file
-      }
-    }
-    delete lfile;
-
-    // Do not record a version edit for this conversion to a Table
-    // since ExtractMetaData() will also generate edits.
-    FileMetaData meta;
-    meta.number = next_file_number_++;
-    Iterator* iter = mem->NewIterator();
-    status = BuildTable(dbname_, env_, options_, table_cache_, iter, &meta);
-    delete iter;
-    mem->Unref();
-    mem = nullptr;
-    if (status.ok()) {
-      if (meta.file_size > 0) {
-        table_numbers_.push_back(meta.number);
-      }
-    }
-    Log(options_.info_log, "Log #%llu: %d ops saved to Table #%llu %s",
-        (unsigned long long)log, counter, (unsigned long long)meta.number,
-        status.ToString().c_str());
-    return status;
-  }
-
-  void ExtractMetaData() {
-    for (size_t i = 0; i < table_numbers_.size(); i++) {
-      ScanTable(table_numbers_[i]);
-    }
-  }
-
-  Iterator* NewTableIterator(const FileMetaData& meta) {
-    // Same as compaction iterators: if paranoid_checks are on, turn
-    // on checksum verification.
-    ReadOptions r;
-    r.verify_checksums = options_.paranoid_checks;
-    return table_cache_->NewIterator(r, meta.number, meta.file_size);
-  }
-
-  void ScanTable(uint64_t number) {
-    TableInfo t;
-    t.meta.number = number;
-    std::string fname = TableFileName(dbname_, number);
-    Status status = env_->GetFileSize(fname, &t.meta.file_size);
-    if (!status.ok()) {
-      // Try alternate file name.
-      fname = SSTTableFileName(dbname_, number);
-      Status s2 = env_->GetFileSize(fname, &t.meta.file_size);
-      if (s2.ok()) {
-        status = Status::OK();
-      }
-    }
-    if (!status.ok()) {
-      ArchiveFile(TableFileName(dbname_, number));
-      ArchiveFile(SSTTableFileName(dbname_, number));
-      Log(options_.info_log, "Table #%llu: dropped: %s",
-          (unsigned long long)t.meta.number, status.ToString().c_str());
-      return;
-    }
-
-    // Extract metadata by scanning through table.
-    int counter = 0;
-    Iterator* iter = NewTableIterator(t.meta);
-    bool empty = true;
-    ParsedInternalKey parsed;
-    t.max_sequence = 0;
-    for (iter->SeekToFirst(); iter->Valid(); iter->Next()) {
-      Slice key = iter->key();
-      if (!ParseInternalKey(key, &parsed)) {
-        Log(options_.info_log, "Table #%llu: unparsable key %s",
-            (unsigned long long)t.meta.number, EscapeString(key).c_str());
-        continue;
-      }
-
-      counter++;
-      if (empty) {
-        empty = false;
-        t.meta.smallest.DecodeFrom(key);
-      }
-      t.meta.largest.DecodeFrom(key);
-      if (parsed.sequence > t.max_sequence) {
-        t.max_sequence = parsed.sequence;
-      }
-    }
-    if (!iter->status().ok()) {
-      status = iter->status();
-    }
-    delete iter;
-    Log(options_.info_log, "Table #%llu: %d entries %s",
-        (unsigned long long)t.meta.number, counter, status.ToString().c_str());
-
-    if (status.ok()) {
-      tables_.push_back(t);
-    } else {
-      RepairTable(fname, t);  // RepairTable archives input file.
-    }
-  }
-
-  void RepairTable(const std::string& src, TableInfo t) {
-    // We will copy src contents to a new table and then rename the
-    // new table over the source.
-
-    // Create builder.
-    std::string copy = TableFileName(dbname_, next_file_number_++);
-    WritableFile* file;
-    Status s = env_->NewWritableFile(copy, &file);
-    if (!s.ok()) {
-      return;
-    }
-    TableBuilder* builder = new TableBuilder(options_, file);
-
-    // Copy data.
-    Iterator* iter = NewTableIterator(t.meta);
-    int counter = 0;
-    for (iter->SeekToFirst(); iter->Valid(); iter->Next()) {
-      builder->Add(iter->key(), iter->value());
-      counter++;
-    }
-    delete iter;
-
-    ArchiveFile(src);
-    if (counter == 0) {
-      builder->Abandon();  // Nothing to save
-    } else {
-      s = builder->Finish();
-      if (s.ok()) {
-        t.meta.file_size = builder->FileSize();
-      }
-    }
-    delete builder;
-    builder = nullptr;
-
-    if (s.ok()) {
-      s = file->Close();
-    }
-    delete file;
-    file = nullptr;
-
-    if (counter > 0 && s.ok()) {
-      std::string orig = TableFileName(dbname_, t.meta.number);
-      s = env_->RenameFile(copy, orig);
-      if (s.ok()) {
-        Log(options_.info_log, "Table #%llu: %d entries repaired",
-            (unsigned long long)t.meta.number, counter);
-        tables_.push_back(t);
-      }
-    }
-    if (!s.ok()) {
-      env_->DeleteFile(copy);
-    }
-  }
-
-  Status WriteDescriptor() {
-    std::string tmp = TempFileName(dbname_, 1);
-    WritableFile* file;
-    Status status = env_->NewWritableFile(tmp, &file);
-    if (!status.ok()) {
-      return status;
-    }
-
-    SequenceNumber max_sequence = 0;
-    for (size_t i = 0; i < tables_.size(); i++) {
-      if (max_sequence < tables_[i].max_sequence) {
-        max_sequence = tables_[i].max_sequence;
-      }
-    }
-
-    edit_.SetComparatorName(icmp_.user_comparator()->Name());
-    edit_.SetLogNumber(0);
-    edit_.SetNextFile(next_file_number_);
-    edit_.SetLastSequence(max_sequence);
-
-    for (size_t i = 0; i < tables_.size(); i++) {
-      // TODO(opt): separate out into multiple levels
-      const TableInfo& t = tables_[i];
-      edit_.AddFile(0, t.meta.number, t.meta.file_size, t.meta.smallest,
-                    t.meta.largest);
-    }
-
-    // fprintf(stderr, "NewDescriptor:\n%s\n", edit_.DebugString().c_str());
-    {
-      log::Writer log(file);
-      std::string record;
-      edit_.EncodeTo(&record);
-      status = log.AddRecord(record);
-    }
-    if (status.ok()) {
-      status = file->Close();
-    }
-    delete file;
-    file = nullptr;
-
-    if (!status.ok()) {
-      env_->DeleteFile(tmp);
-    } else {
-      // Discard older manifests
-      for (size_t i = 0; i < manifests_.size(); i++) {
-        ArchiveFile(dbname_ + "/" + manifests_[i]);
-      }
-
-      // Install new manifest
-      status = env_->RenameFile(tmp, DescriptorFileName(dbname_, 1));
-      if (status.ok()) {
-        status = SetCurrentFile(env_, dbname_, 1);
-      } else {
-        env_->DeleteFile(tmp);
-      }
-    }
-    return status;
-  }
-
-  void ArchiveFile(const std::string& fname) {
-    // Move into another directory.  E.g., for
-    //    dir/foo
-    // rename to
-    //    dir/lost/foo
-    const char* slash = strrchr(fname.c_str(), '/');
-    std::string new_dir;
-    if (slash != nullptr) {
-      new_dir.assign(fname.data(), slash - fname.data());
-    }
-    new_dir.append("/lost");
-    env_->CreateDir(new_dir);  // Ignore error
-    std::string new_file = new_dir;
-    new_file.append("/");
-    new_file.append((slash == nullptr) ? fname.c_str() : slash + 1);
-    Status s = env_->RenameFile(fname, new_file);
-    Log(options_.info_log, "Archiving %s: %s\n", fname.c_str(),
-        s.ToString().c_str());
-  }
-
-  const std::string dbname_;
-  Env* const env_;
-  InternalKeyComparator const icmp_;
-  InternalFilterPolicy const ipolicy_;
-  const Options options_;
-  bool owns_info_log_;
-  bool owns_cache_;
-  TableCache* table_cache_;
-  VersionEdit edit_;
-
-  std::vector<std::string> manifests_;
-  std::vector<uint64_t> table_numbers_;
-  std::vector<uint64_t> logs_;
-  std::vector<TableInfo> tables_;
-  uint64_t next_file_number_;
-};
-}  // namespace
-
-Status RepairDB(const std::string& dbname, const Options& options) {
-  Repairer repairer(dbname, options);
-  return repairer.Run();
-}
-
-}  // namespace leveldb
diff --git a/assign5/openTok/Pods/leveldb-library/db/skiplist.h b/assign5/openTok/Pods/leveldb-library/db/skiplist.h
deleted file mode 100644
index a59b45b..0000000
--- a/assign5/openTok/Pods/leveldb-library/db/skiplist.h
+++ /dev/null
@@ -1,382 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#ifndef STORAGE_LEVELDB_DB_SKIPLIST_H_
-#define STORAGE_LEVELDB_DB_SKIPLIST_H_
-
-// Thread safety
-// -------------
-//
-// Writes require external synchronization, most likely a mutex.
-// Reads require a guarantee that the SkipList will not be destroyed
-// while the read is in progress.  Apart from that, reads progress
-// without any internal locking or synchronization.
-//
-// Invariants:
-//
-// (1) Allocated nodes are never deleted until the SkipList is
-// destroyed.  This is trivially guaranteed by the code since we
-// never delete any skip list nodes.
-//
-// (2) The contents of a Node except for the next/prev pointers are
-// immutable after the Node has been linked into the SkipList.
-// Only Insert() modifies the list, and it is careful to initialize
-// a node and use release-stores to publish the nodes in one or
-// more lists.
-//
-// ... prev vs. next pointer ordering ...
-
-#include <atomic>
-#include <cassert>
-#include <cstdlib>
-
-#include "util/arena.h"
-#include "util/random.h"
-
-namespace leveldb {
-
-class Arena;
-
-template <typename Key, class Comparator>
-class SkipList {
- private:
-  struct Node;
-
- public:
-  // Create a new SkipList object that will use "cmp" for comparing keys,
-  // and will allocate memory using "*arena".  Objects allocated in the arena
-  // must remain allocated for the lifetime of the skiplist object.
-  explicit SkipList(Comparator cmp, Arena* arena);
-
-  SkipList(const SkipList&) = delete;
-  SkipList& operator=(const SkipList&) = delete;
-
-  // Insert key into the list.
-  // REQUIRES: nothing that compares equal to key is currently in the list.
-  void Insert(const Key& key);
-
-  // Returns true iff an entry that compares equal to key is in the list.
-  bool Contains(const Key& key) const;
-
-  // Iteration over the contents of a skip list
-  class Iterator {
-   public:
-    // Initialize an iterator over the specified list.
-    // The returned iterator is not valid.
-    explicit Iterator(const SkipList* list);
-
-    // Returns true iff the iterator is positioned at a valid node.
-    bool Valid() const;
-
-    // Returns the key at the current position.
-    // REQUIRES: Valid()
-    const Key& key() const;
-
-    // Advances to the next position.
-    // REQUIRES: Valid()
-    void Next();
-
-    // Advances to the previous position.
-    // REQUIRES: Valid()
-    void Prev();
-
-    // Advance to the first entry with a key >= target
-    void Seek(const Key& target);
-
-    // Position at the first entry in list.
-    // Final state of iterator is Valid() iff list is not empty.
-    void SeekToFirst();
-
-    // Position at the last entry in list.
-    // Final state of iterator is Valid() iff list is not empty.
-    void SeekToLast();
-
-   private:
-    const SkipList* list_;
-    Node* node_;
-    // Intentionally copyable
-  };
-
- private:
-  enum { kMaxHeight = 12 };
-
-  inline int GetMaxHeight() const {
-    return max_height_.load(std::memory_order_relaxed);
-  }
-
-  Node* NewNode(const Key& key, int height);
-  int RandomHeight();
-  bool Equal(const Key& a, const Key& b) const { return (compare_(a, b) == 0); }
-
-  // Return true if key is greater than the data stored in "n"
-  bool KeyIsAfterNode(const Key& key, Node* n) const;
-
-  // Return the earliest node that comes at or after key.
-  // Return nullptr if there is no such node.
-  //
-  // If prev is non-null, fills prev[level] with pointer to previous
-  // node at "level" for every level in [0..max_height_-1].
-  Node* FindGreaterOrEqual(const Key& key, Node** prev) const;
-
-  // Return the latest node with a key < key.
-  // Return head_ if there is no such node.
-  Node* FindLessThan(const Key& key) const;
-
-  // Return the last node in the list.
-  // Return head_ if list is empty.
-  Node* FindLast() const;
-
-  // Immutable after construction
-  Comparator const compare_;
-  Arena* const arena_;  // Arena used for allocations of nodes
-
-  Node* const head_;
-
-  // Modified only by Insert().  Read racily by readers, but stale
-  // values are ok.
-  std::atomic<int> max_height_;  // Height of the entire list
-
-  // Read/written only by Insert().
-  Random rnd_;
-};
-
-// Implementation details follow
-template <typename Key, class Comparator>
-struct SkipList<Key, Comparator>::Node {
-  explicit Node(const Key& k) : key(k) {}
-
-  Key const key;
-
-  // Accessors/mutators for links.  Wrapped in methods so we can
-  // add the appropriate barriers as necessary.
-  Node* Next(int n) {
-    assert(n >= 0);
-    // Use an 'acquire load' so that we observe a fully initialized
-    // version of the returned Node.
-    return next_[n].load(std::memory_order_acquire);
-  }
-  void SetNext(int n, Node* x) {
-    assert(n >= 0);
-    // Use a 'release store' so that anybody who reads through this
-    // pointer observes a fully initialized version of the inserted node.
-    next_[n].store(x, std::memory_order_release);
-  }
-
-  // No-barrier variants that can be safely used in a few locations.
-  Node* NoBarrier_Next(int n) {
-    assert(n >= 0);
-    return next_[n].load(std::memory_order_relaxed);
-  }
-  void NoBarrier_SetNext(int n, Node* x) {
-    assert(n >= 0);
-    next_[n].store(x, std::memory_order_relaxed);
-  }
-
- private:
-  // Array of length equal to the node height.  next_[0] is lowest level link.
-  std::atomic<Node*> next_[1];
-};
-
-template <typename Key, class Comparator>
-typename SkipList<Key, Comparator>::Node* SkipList<Key, Comparator>::NewNode(
-    const Key& key, int height) {
-  char* const node_memory = arena_->AllocateAligned(
-      sizeof(Node) + sizeof(std::atomic<Node*>) * (height - 1));
-  return new (node_memory) Node(key);
-}
-
-template <typename Key, class Comparator>
-inline SkipList<Key, Comparator>::Iterator::Iterator(const SkipList* list) {
-  list_ = list;
-  node_ = nullptr;
-}
-
-template <typename Key, class Comparator>
-inline bool SkipList<Key, Comparator>::Iterator::Valid() const {
-  return node_ != nullptr;
-}
-
-template <typename Key, class Comparator>
-inline const Key& SkipList<Key, Comparator>::Iterator::key() const {
-  assert(Valid());
-  return node_->key;
-}
-
-template <typename Key, class Comparator>
-inline void SkipList<Key, Comparator>::Iterator::Next() {
-  assert(Valid());
-  node_ = node_->Next(0);
-}
-
-template <typename Key, class Comparator>
-inline void SkipList<Key, Comparator>::Iterator::Prev() {
-  // Instead of using explicit "prev" links, we just search for the
-  // last node that falls before key.
-  assert(Valid());
-  node_ = list_->FindLessThan(node_->key);
-  if (node_ == list_->head_) {
-    node_ = nullptr;
-  }
-}
-
-template <typename Key, class Comparator>
-inline void SkipList<Key, Comparator>::Iterator::Seek(const Key& target) {
-  node_ = list_->FindGreaterOrEqual(target, nullptr);
-}
-
-template <typename Key, class Comparator>
-inline void SkipList<Key, Comparator>::Iterator::SeekToFirst() {
-  node_ = list_->head_->Next(0);
-}
-
-template <typename Key, class Comparator>
-inline void SkipList<Key, Comparator>::Iterator::SeekToLast() {
-  node_ = list_->FindLast();
-  if (node_ == list_->head_) {
-    node_ = nullptr;
-  }
-}
-
-template <typename Key, class Comparator>
-int SkipList<Key, Comparator>::RandomHeight() {
-  // Increase height with probability 1 in kBranching
-  static const unsigned int kBranching = 4;
-  int height = 1;
-  while (height < kMaxHeight && ((rnd_.Next() % kBranching) == 0)) {
-    height++;
-  }
-  assert(height > 0);
-  assert(height <= kMaxHeight);
-  return height;
-}
-
-template <typename Key, class Comparator>
-bool SkipList<Key, Comparator>::KeyIsAfterNode(const Key& key, Node* n) const {
-  // null n is considered infinite
-  return (n != nullptr) && (compare_(n->key, key) < 0);
-}
-
-template <typename Key, class Comparator>
-typename SkipList<Key, Comparator>::Node*
-SkipList<Key, Comparator>::FindGreaterOrEqual(const Key& key,
-                                              Node** prev) const {
-  Node* x = head_;
-  int level = GetMaxHeight() - 1;
-  while (true) {
-    Node* next = x->Next(level);
-    if (KeyIsAfterNode(key, next)) {
-      // Keep searching in this list
-      x = next;
-    } else {
-      if (prev != nullptr) prev[level] = x;
-      if (level == 0) {
-        return next;
-      } else {
-        // Switch to next list
-        level--;
-      }
-    }
-  }
-}
-
-template <typename Key, class Comparator>
-typename SkipList<Key, Comparator>::Node*
-SkipList<Key, Comparator>::FindLessThan(const Key& key) const {
-  Node* x = head_;
-  int level = GetMaxHeight() - 1;
-  while (true) {
-    assert(x == head_ || compare_(x->key, key) < 0);
-    Node* next = x->Next(level);
-    if (next == nullptr || compare_(next->key, key) >= 0) {
-      if (level == 0) {
-        return x;
-      } else {
-        // Switch to next list
-        level--;
-      }
-    } else {
-      x = next;
-    }
-  }
-}
-
-template <typename Key, class Comparator>
-typename SkipList<Key, Comparator>::Node* SkipList<Key, Comparator>::FindLast()
-    const {
-  Node* x = head_;
-  int level = GetMaxHeight() - 1;
-  while (true) {
-    Node* next = x->Next(level);
-    if (next == nullptr) {
-      if (level == 0) {
-        return x;
-      } else {
-        // Switch to next list
-        level--;
-      }
-    } else {
-      x = next;
-    }
-  }
-}
-
-template <typename Key, class Comparator>
-SkipList<Key, Comparator>::SkipList(Comparator cmp, Arena* arena)
-    : compare_(cmp),
-      arena_(arena),
-      head_(NewNode(0 /* any key will do */, kMaxHeight)),
-      max_height_(1),
-      rnd_(0xdeadbeef) {
-  for (int i = 0; i < kMaxHeight; i++) {
-    head_->SetNext(i, nullptr);
-  }
-}
-
-template <typename Key, class Comparator>
-void SkipList<Key, Comparator>::Insert(const Key& key) {
-  // TODO(opt): We can use a barrier-free variant of FindGreaterOrEqual()
-  // here since Insert() is externally synchronized.
-  Node* prev[kMaxHeight];
-  Node* x = FindGreaterOrEqual(key, prev);
-
-  // Our data structure does not allow duplicate insertion
-  assert(x == nullptr || !Equal(key, x->key));
-
-  int height = RandomHeight();
-  if (height > GetMaxHeight()) {
-    for (int i = GetMaxHeight(); i < height; i++) {
-      prev[i] = head_;
-    }
-    // It is ok to mutate max_height_ without any synchronization
-    // with concurrent readers.  A concurrent reader that observes
-    // the new value of max_height_ will see either the old value of
-    // new level pointers from head_ (nullptr), or a new value set in
-    // the loop below.  In the former case the reader will
-    // immediately drop to the next level since nullptr sorts after all
-    // keys.  In the latter case the reader will use the new node.
-    max_height_.store(height, std::memory_order_relaxed);
-  }
-
-  x = NewNode(key, height);
-  for (int i = 0; i < height; i++) {
-    // NoBarrier_SetNext() suffices since we will add a barrier when
-    // we publish a pointer to "x" in prev[i].
-    x->NoBarrier_SetNext(i, prev[i]->NoBarrier_Next(i));
-    prev[i]->SetNext(i, x);
-  }
-}
-
-template <typename Key, class Comparator>
-bool SkipList<Key, Comparator>::Contains(const Key& key) const {
-  Node* x = FindGreaterOrEqual(key, nullptr);
-  if (x != nullptr && Equal(key, x->key)) {
-    return true;
-  } else {
-    return false;
-  }
-}
-
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_DB_SKIPLIST_H_
diff --git a/assign5/openTok/Pods/leveldb-library/db/snapshot.h b/assign5/openTok/Pods/leveldb-library/db/snapshot.h
deleted file mode 100644
index 9f1d664..0000000
--- a/assign5/openTok/Pods/leveldb-library/db/snapshot.h
+++ /dev/null
@@ -1,95 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#ifndef STORAGE_LEVELDB_DB_SNAPSHOT_H_
-#define STORAGE_LEVELDB_DB_SNAPSHOT_H_
-
-#include "db/dbformat.h"
-#include "leveldb/db.h"
-
-namespace leveldb {
-
-class SnapshotList;
-
-// Snapshots are kept in a doubly-linked list in the DB.
-// Each SnapshotImpl corresponds to a particular sequence number.
-class SnapshotImpl : public Snapshot {
- public:
-  SnapshotImpl(SequenceNumber sequence_number)
-      : sequence_number_(sequence_number) {}
-
-  SequenceNumber sequence_number() const { return sequence_number_; }
-
- private:
-  friend class SnapshotList;
-
-  // SnapshotImpl is kept in a doubly-linked circular list. The SnapshotList
-  // implementation operates on the next/previous fields direcly.
-  SnapshotImpl* prev_;
-  SnapshotImpl* next_;
-
-  const SequenceNumber sequence_number_;
-
-#if !defined(NDEBUG)
-  SnapshotList* list_ = nullptr;
-#endif  // !defined(NDEBUG)
-};
-
-class SnapshotList {
- public:
-  SnapshotList() : head_(0) {
-    head_.prev_ = &head_;
-    head_.next_ = &head_;
-  }
-
-  bool empty() const { return head_.next_ == &head_; }
-  SnapshotImpl* oldest() const {
-    assert(!empty());
-    return head_.next_;
-  }
-  SnapshotImpl* newest() const {
-    assert(!empty());
-    return head_.prev_;
-  }
-
-  // Creates a SnapshotImpl and appends it to the end of the list.
-  SnapshotImpl* New(SequenceNumber sequence_number) {
-    assert(empty() || newest()->sequence_number_ <= sequence_number);
-
-    SnapshotImpl* snapshot = new SnapshotImpl(sequence_number);
-
-#if !defined(NDEBUG)
-    snapshot->list_ = this;
-#endif  // !defined(NDEBUG)
-    snapshot->next_ = &head_;
-    snapshot->prev_ = head_.prev_;
-    snapshot->prev_->next_ = snapshot;
-    snapshot->next_->prev_ = snapshot;
-    return snapshot;
-  }
-
-  // Removes a SnapshotImpl from this list.
-  //
-  // The snapshot must have been created by calling New() on this list.
-  //
-  // The snapshot pointer should not be const, because its memory is
-  // deallocated. However, that would force us to change DB::ReleaseSnapshot(),
-  // which is in the API, and currently takes a const Snapshot.
-  void Delete(const SnapshotImpl* snapshot) {
-#if !defined(NDEBUG)
-    assert(snapshot->list_ == this);
-#endif  // !defined(NDEBUG)
-    snapshot->prev_->next_ = snapshot->next_;
-    snapshot->next_->prev_ = snapshot->prev_;
-    delete snapshot;
-  }
-
- private:
-  // Dummy head of doubly-linked list of snapshots
-  SnapshotImpl head_;
-};
-
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_DB_SNAPSHOT_H_
diff --git a/assign5/openTok/Pods/leveldb-library/db/table_cache.cc b/assign5/openTok/Pods/leveldb-library/db/table_cache.cc
deleted file mode 100644
index 73f05fd..0000000
--- a/assign5/openTok/Pods/leveldb-library/db/table_cache.cc
+++ /dev/null
@@ -1,120 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#include "db/table_cache.h"
-
-#include "db/filename.h"
-#include "leveldb/env.h"
-#include "leveldb/table.h"
-#include "util/coding.h"
-
-namespace leveldb {
-
-struct TableAndFile {
-  RandomAccessFile* file;
-  Table* table;
-};
-
-static void DeleteEntry(const Slice& key, void* value) {
-  TableAndFile* tf = reinterpret_cast<TableAndFile*>(value);
-  delete tf->table;
-  delete tf->file;
-  delete tf;
-}
-
-static void UnrefEntry(void* arg1, void* arg2) {
-  Cache* cache = reinterpret_cast<Cache*>(arg1);
-  Cache::Handle* h = reinterpret_cast<Cache::Handle*>(arg2);
-  cache->Release(h);
-}
-
-TableCache::TableCache(const std::string& dbname, const Options& options,
-                       int entries)
-    : env_(options.env),
-      dbname_(dbname),
-      options_(options),
-      cache_(NewLRUCache(entries)) {}
-
-TableCache::~TableCache() { delete cache_; }
-
-Status TableCache::FindTable(uint64_t file_number, uint64_t file_size,
-                             Cache::Handle** handle) {
-  Status s;
-  char buf[sizeof(file_number)];
-  EncodeFixed64(buf, file_number);
-  Slice key(buf, sizeof(buf));
-  *handle = cache_->Lookup(key);
-  if (*handle == nullptr) {
-    std::string fname = TableFileName(dbname_, file_number);
-    RandomAccessFile* file = nullptr;
-    Table* table = nullptr;
-    s = env_->NewRandomAccessFile(fname, &file);
-    if (!s.ok()) {
-      std::string old_fname = SSTTableFileName(dbname_, file_number);
-      if (env_->NewRandomAccessFile(old_fname, &file).ok()) {
-        s = Status::OK();
-      }
-    }
-    if (s.ok()) {
-      s = Table::Open(options_, file, file_size, &table);
-    }
-
-    if (!s.ok()) {
-      assert(table == nullptr);
-      delete file;
-      // We do not cache error results so that if the error is transient,
-      // or somebody repairs the file, we recover automatically.
-    } else {
-      TableAndFile* tf = new TableAndFile;
-      tf->file = file;
-      tf->table = table;
-      *handle = cache_->Insert(key, tf, 1, &DeleteEntry);
-    }
-  }
-  return s;
-}
-
-Iterator* TableCache::NewIterator(const ReadOptions& options,
-                                  uint64_t file_number, uint64_t file_size,
-                                  Table** tableptr) {
-  if (tableptr != nullptr) {
-    *tableptr = nullptr;
-  }
-
-  Cache::Handle* handle = nullptr;
-  Status s = FindTable(file_number, file_size, &handle);
-  if (!s.ok()) {
-    return NewErrorIterator(s);
-  }
-
-  Table* table = reinterpret_cast<TableAndFile*>(cache_->Value(handle))->table;
-  Iterator* result = table->NewIterator(options);
-  result->RegisterCleanup(&UnrefEntry, cache_, handle);
-  if (tableptr != nullptr) {
-    *tableptr = table;
-  }
-  return result;
-}
-
-Status TableCache::Get(const ReadOptions& options, uint64_t file_number,
-                       uint64_t file_size, const Slice& k, void* arg,
-                       void (*handle_result)(void*, const Slice&,
-                                             const Slice&)) {
-  Cache::Handle* handle = nullptr;
-  Status s = FindTable(file_number, file_size, &handle);
-  if (s.ok()) {
-    Table* t = reinterpret_cast<TableAndFile*>(cache_->Value(handle))->table;
-    s = t->InternalGet(options, k, arg, handle_result);
-    cache_->Release(handle);
-  }
-  return s;
-}
-
-void TableCache::Evict(uint64_t file_number) {
-  char buf[sizeof(file_number)];
-  EncodeFixed64(buf, file_number);
-  cache_->Erase(Slice(buf, sizeof(buf)));
-}
-
-}  // namespace leveldb
diff --git a/assign5/openTok/Pods/leveldb-library/db/table_cache.h b/assign5/openTok/Pods/leveldb-library/db/table_cache.h
deleted file mode 100644
index 93069c8..0000000
--- a/assign5/openTok/Pods/leveldb-library/db/table_cache.h
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-//
-// Thread-safe (provides internal synchronization)
-
-#ifndef STORAGE_LEVELDB_DB_TABLE_CACHE_H_
-#define STORAGE_LEVELDB_DB_TABLE_CACHE_H_
-
-#include <stdint.h>
-
-#include <string>
-
-#include "db/dbformat.h"
-#include "leveldb/cache.h"
-#include "leveldb/table.h"
-#include "port/port.h"
-
-namespace leveldb {
-
-class Env;
-
-class TableCache {
- public:
-  TableCache(const std::string& dbname, const Options& options, int entries);
-  ~TableCache();
-
-  // Return an iterator for the specified file number (the corresponding
-  // file length must be exactly "file_size" bytes).  If "tableptr" is
-  // non-null, also sets "*tableptr" to point to the Table object
-  // underlying the returned iterator, or to nullptr if no Table object
-  // underlies the returned iterator.  The returned "*tableptr" object is owned
-  // by the cache and should not be deleted, and is valid for as long as the
-  // returned iterator is live.
-  Iterator* NewIterator(const ReadOptions& options, uint64_t file_number,
-                        uint64_t file_size, Table** tableptr = nullptr);
-
-  // If a seek to internal key "k" in specified file finds an entry,
-  // call (*handle_result)(arg, found_key, found_value).
-  Status Get(const ReadOptions& options, uint64_t file_number,
-             uint64_t file_size, const Slice& k, void* arg,
-             void (*handle_result)(void*, const Slice&, const Slice&));
-
-  // Evict any entry for the specified file number
-  void Evict(uint64_t file_number);
-
- private:
-  Status FindTable(uint64_t file_number, uint64_t file_size, Cache::Handle**);
-
-  Env* const env_;
-  const std::string dbname_;
-  const Options& options_;
-  Cache* cache_;
-};
-
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_DB_TABLE_CACHE_H_
diff --git a/assign5/openTok/Pods/leveldb-library/db/version_edit.cc b/assign5/openTok/Pods/leveldb-library/db/version_edit.cc
deleted file mode 100644
index 44a4d02..0000000
--- a/assign5/openTok/Pods/leveldb-library/db/version_edit.cc
+++ /dev/null
@@ -1,260 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#include "db/version_edit.h"
-
-#include "db/version_set.h"
-#include "util/coding.h"
-
-namespace leveldb {
-
-// Tag numbers for serialized VersionEdit.  These numbers are written to
-// disk and should not be changed.
-enum Tag {
-  kComparator = 1,
-  kLogNumber = 2,
-  kNextFileNumber = 3,
-  kLastSequence = 4,
-  kCompactPointer = 5,
-  kDeletedFile = 6,
-  kNewFile = 7,
-  // 8 was used for large value refs
-  kPrevLogNumber = 9
-};
-
-void VersionEdit::Clear() {
-  comparator_.clear();
-  log_number_ = 0;
-  prev_log_number_ = 0;
-  last_sequence_ = 0;
-  next_file_number_ = 0;
-  has_comparator_ = false;
-  has_log_number_ = false;
-  has_prev_log_number_ = false;
-  has_next_file_number_ = false;
-  has_last_sequence_ = false;
-  deleted_files_.clear();
-  new_files_.clear();
-}
-
-void VersionEdit::EncodeTo(std::string* dst) const {
-  if (has_comparator_) {
-    PutVarint32(dst, kComparator);
-    PutLengthPrefixedSlice(dst, comparator_);
-  }
-  if (has_log_number_) {
-    PutVarint32(dst, kLogNumber);
-    PutVarint64(dst, log_number_);
-  }
-  if (has_prev_log_number_) {
-    PutVarint32(dst, kPrevLogNumber);
-    PutVarint64(dst, prev_log_number_);
-  }
-  if (has_next_file_number_) {
-    PutVarint32(dst, kNextFileNumber);
-    PutVarint64(dst, next_file_number_);
-  }
-  if (has_last_sequence_) {
-    PutVarint32(dst, kLastSequence);
-    PutVarint64(dst, last_sequence_);
-  }
-
-  for (size_t i = 0; i < compact_pointers_.size(); i++) {
-    PutVarint32(dst, kCompactPointer);
-    PutVarint32(dst, compact_pointers_[i].first);  // level
-    PutLengthPrefixedSlice(dst, compact_pointers_[i].second.Encode());
-  }
-
-  for (DeletedFileSet::const_iterator iter = deleted_files_.begin();
-       iter != deleted_files_.end(); ++iter) {
-    PutVarint32(dst, kDeletedFile);
-    PutVarint32(dst, iter->first);   // level
-    PutVarint64(dst, iter->second);  // file number
-  }
-
-  for (size_t i = 0; i < new_files_.size(); i++) {
-    const FileMetaData& f = new_files_[i].second;
-    PutVarint32(dst, kNewFile);
-    PutVarint32(dst, new_files_[i].first);  // level
-    PutVarint64(dst, f.number);
-    PutVarint64(dst, f.file_size);
-    PutLengthPrefixedSlice(dst, f.smallest.Encode());
-    PutLengthPrefixedSlice(dst, f.largest.Encode());
-  }
-}
-
-static bool GetInternalKey(Slice* input, InternalKey* dst) {
-  Slice str;
-  if (GetLengthPrefixedSlice(input, &str)) {
-    dst->DecodeFrom(str);
-    return true;
-  } else {
-    return false;
-  }
-}
-
-static bool GetLevel(Slice* input, int* level) {
-  uint32_t v;
-  if (GetVarint32(input, &v) && v < config::kNumLevels) {
-    *level = v;
-    return true;
-  } else {
-    return false;
-  }
-}
-
-Status VersionEdit::DecodeFrom(const Slice& src) {
-  Clear();
-  Slice input = src;
-  const char* msg = nullptr;
-  uint32_t tag;
-
-  // Temporary storage for parsing
-  int level;
-  uint64_t number;
-  FileMetaData f;
-  Slice str;
-  InternalKey key;
-
-  while (msg == nullptr && GetVarint32(&input, &tag)) {
-    switch (tag) {
-      case kComparator:
-        if (GetLengthPrefixedSlice(&input, &str)) {
-          comparator_ = str.ToString();
-          has_comparator_ = true;
-        } else {
-          msg = "comparator name";
-        }
-        break;
-
-      case kLogNumber:
-        if (GetVarint64(&input, &log_number_)) {
-          has_log_number_ = true;
-        } else {
-          msg = "log number";
-        }
-        break;
-
-      case kPrevLogNumber:
-        if (GetVarint64(&input, &prev_log_number_)) {
-          has_prev_log_number_ = true;
-        } else {
-          msg = "previous log number";
-        }
-        break;
-
-      case kNextFileNumber:
-        if (GetVarint64(&input, &next_file_number_)) {
-          has_next_file_number_ = true;
-        } else {
-          msg = "next file number";
-        }
-        break;
-
-      case kLastSequence:
-        if (GetVarint64(&input, &last_sequence_)) {
-          has_last_sequence_ = true;
-        } else {
-          msg = "last sequence number";
-        }
-        break;
-
-      case kCompactPointer:
-        if (GetLevel(&input, &level) && GetInternalKey(&input, &key)) {
-          compact_pointers_.push_back(std::make_pair(level, key));
-        } else {
-          msg = "compaction pointer";
-        }
-        break;
-
-      case kDeletedFile:
-        if (GetLevel(&input, &level) && GetVarint64(&input, &number)) {
-          deleted_files_.insert(std::make_pair(level, number));
-        } else {
-          msg = "deleted file";
-        }
-        break;
-
-      case kNewFile:
-        if (GetLevel(&input, &level) && GetVarint64(&input, &f.number) &&
-            GetVarint64(&input, &f.file_size) &&
-            GetInternalKey(&input, &f.smallest) &&
-            GetInternalKey(&input, &f.largest)) {
-          new_files_.push_back(std::make_pair(level, f));
-        } else {
-          msg = "new-file entry";
-        }
-        break;
-
-      default:
-        msg = "unknown tag";
-        break;
-    }
-  }
-
-  if (msg == nullptr && !input.empty()) {
-    msg = "invalid tag";
-  }
-
-  Status result;
-  if (msg != nullptr) {
-    result = Status::Corruption("VersionEdit", msg);
-  }
-  return result;
-}
-
-std::string VersionEdit::DebugString() const {
-  std::string r;
-  r.append("VersionEdit {");
-  if (has_comparator_) {
-    r.append("\n  Comparator: ");
-    r.append(comparator_);
-  }
-  if (has_log_number_) {
-    r.append("\n  LogNumber: ");
-    AppendNumberTo(&r, log_number_);
-  }
-  if (has_prev_log_number_) {
-    r.append("\n  PrevLogNumber: ");
-    AppendNumberTo(&r, prev_log_number_);
-  }
-  if (has_next_file_number_) {
-    r.append("\n  NextFile: ");
-    AppendNumberTo(&r, next_file_number_);
-  }
-  if (has_last_sequence_) {
-    r.append("\n  LastSeq: ");
-    AppendNumberTo(&r, last_sequence_);
-  }
-  for (size_t i = 0; i < compact_pointers_.size(); i++) {
-    r.append("\n  CompactPointer: ");
-    AppendNumberTo(&r, compact_pointers_[i].first);
-    r.append(" ");
-    r.append(compact_pointers_[i].second.DebugString());
-  }
-  for (DeletedFileSet::const_iterator iter = deleted_files_.begin();
-       iter != deleted_files_.end(); ++iter) {
-    r.append("\n  DeleteFile: ");
-    AppendNumberTo(&r, iter->first);
-    r.append(" ");
-    AppendNumberTo(&r, iter->second);
-  }
-  for (size_t i = 0; i < new_files_.size(); i++) {
-    const FileMetaData& f = new_files_[i].second;
-    r.append("\n  AddFile: ");
-    AppendNumberTo(&r, new_files_[i].first);
-    r.append(" ");
-    AppendNumberTo(&r, f.number);
-    r.append(" ");
-    AppendNumberTo(&r, f.file_size);
-    r.append(" ");
-    r.append(f.smallest.DebugString());
-    r.append(" .. ");
-    r.append(f.largest.DebugString());
-  }
-  r.append("\n}\n");
-  return r;
-}
-
-}  // namespace leveldb
diff --git a/assign5/openTok/Pods/leveldb-library/db/version_edit.h b/assign5/openTok/Pods/leveldb-library/db/version_edit.h
deleted file mode 100644
index 2dadda7..0000000
--- a/assign5/openTok/Pods/leveldb-library/db/version_edit.h
+++ /dev/null
@@ -1,106 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#ifndef STORAGE_LEVELDB_DB_VERSION_EDIT_H_
-#define STORAGE_LEVELDB_DB_VERSION_EDIT_H_
-
-#include <set>
-#include <utility>
-#include <vector>
-
-#include "db/dbformat.h"
-
-namespace leveldb {
-
-class VersionSet;
-
-struct FileMetaData {
-  FileMetaData() : refs(0), allowed_seeks(1 << 30), file_size(0) {}
-
-  int refs;
-  int allowed_seeks;  // Seeks allowed until compaction
-  uint64_t number;
-  uint64_t file_size;    // File size in bytes
-  InternalKey smallest;  // Smallest internal key served by table
-  InternalKey largest;   // Largest internal key served by table
-};
-
-class VersionEdit {
- public:
-  VersionEdit() { Clear(); }
-  ~VersionEdit() {}
-
-  void Clear();
-
-  void SetComparatorName(const Slice& name) {
-    has_comparator_ = true;
-    comparator_ = name.ToString();
-  }
-  void SetLogNumber(uint64_t num) {
-    has_log_number_ = true;
-    log_number_ = num;
-  }
-  void SetPrevLogNumber(uint64_t num) {
-    has_prev_log_number_ = true;
-    prev_log_number_ = num;
-  }
-  void SetNextFile(uint64_t num) {
-    has_next_file_number_ = true;
-    next_file_number_ = num;
-  }
-  void SetLastSequence(SequenceNumber seq) {
-    has_last_sequence_ = true;
-    last_sequence_ = seq;
-  }
-  void SetCompactPointer(int level, const InternalKey& key) {
-    compact_pointers_.push_back(std::make_pair(level, key));
-  }
-
-  // Add the specified file at the specified number.
-  // REQUIRES: This version has not been saved (see VersionSet::SaveTo)
-  // REQUIRES: "smallest" and "largest" are smallest and largest keys in file
-  void AddFile(int level, uint64_t file, uint64_t file_size,
-               const InternalKey& smallest, const InternalKey& largest) {
-    FileMetaData f;
-    f.number = file;
-    f.file_size = file_size;
-    f.smallest = smallest;
-    f.largest = largest;
-    new_files_.push_back(std::make_pair(level, f));
-  }
-
-  // Delete the specified "file" from the specified "level".
-  void DeleteFile(int level, uint64_t file) {
-    deleted_files_.insert(std::make_pair(level, file));
-  }
-
-  void EncodeTo(std::string* dst) const;
-  Status DecodeFrom(const Slice& src);
-
-  std::string DebugString() const;
-
- private:
-  friend class VersionSet;
-
-  typedef std::set<std::pair<int, uint64_t> > DeletedFileSet;
-
-  std::string comparator_;
-  uint64_t log_number_;
-  uint64_t prev_log_number_;
-  uint64_t next_file_number_;
-  SequenceNumber last_sequence_;
-  bool has_comparator_;
-  bool has_log_number_;
-  bool has_prev_log_number_;
-  bool has_next_file_number_;
-  bool has_last_sequence_;
-
-  std::vector<std::pair<int, InternalKey> > compact_pointers_;
-  DeletedFileSet deleted_files_;
-  std::vector<std::pair<int, FileMetaData> > new_files_;
-};
-
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_DB_VERSION_EDIT_H_
diff --git a/assign5/openTok/Pods/leveldb-library/db/version_set.cc b/assign5/openTok/Pods/leveldb-library/db/version_set.cc
deleted file mode 100644
index 96a92cc..0000000
--- a/assign5/openTok/Pods/leveldb-library/db/version_set.cc
+++ /dev/null
@@ -1,1585 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#include "db/version_set.h"
-
-#include <stdio.h>
-
-#include <algorithm>
-
-#include "db/filename.h"
-#include "db/log_reader.h"
-#include "db/log_writer.h"
-#include "db/memtable.h"
-#include "db/table_cache.h"
-#include "leveldb/env.h"
-#include "leveldb/table_builder.h"
-#include "table/merger.h"
-#include "table/two_level_iterator.h"
-#include "util/coding.h"
-#include "util/logging.h"
-
-namespace leveldb {
-
-static size_t TargetFileSize(const Options* options) {
-  return options->max_file_size;
-}
-
-// Maximum bytes of overlaps in grandparent (i.e., level+2) before we
-// stop building a single file in a level->level+1 compaction.
-static int64_t MaxGrandParentOverlapBytes(const Options* options) {
-  return 10 * TargetFileSize(options);
-}
-
-// Maximum number of bytes in all compacted files.  We avoid expanding
-// the lower level file set of a compaction if it would make the
-// total compaction cover more than this many bytes.
-static int64_t ExpandedCompactionByteSizeLimit(const Options* options) {
-  return 25 * TargetFileSize(options);
-}
-
-static double MaxBytesForLevel(const Options* options, int level) {
-  // Note: the result for level zero is not really used since we set
-  // the level-0 compaction threshold based on number of files.
-
-  // Result for both level-0 and level-1
-  double result = 10. * 1048576.0;
-  while (level > 1) {
-    result *= 10;
-    level--;
-  }
-  return result;
-}
-
-static uint64_t MaxFileSizeForLevel(const Options* options, int level) {
-  // We could vary per level to reduce number of files?
-  return TargetFileSize(options);
-}
-
-static int64_t TotalFileSize(const std::vector<FileMetaData*>& files) {
-  int64_t sum = 0;
-  for (size_t i = 0; i < files.size(); i++) {
-    sum += files[i]->file_size;
-  }
-  return sum;
-}
-
-Version::~Version() {
-  assert(refs_ == 0);
-
-  // Remove from linked list
-  prev_->next_ = next_;
-  next_->prev_ = prev_;
-
-  // Drop references to files
-  for (int level = 0; level < config::kNumLevels; level++) {
-    for (size_t i = 0; i < files_[level].size(); i++) {
-      FileMetaData* f = files_[level][i];
-      assert(f->refs > 0);
-      f->refs--;
-      if (f->refs <= 0) {
-        delete f;
-      }
-    }
-  }
-}
-
-int FindFile(const InternalKeyComparator& icmp,
-             const std::vector<FileMetaData*>& files, const Slice& key) {
-  uint32_t left = 0;
-  uint32_t right = files.size();
-  while (left < right) {
-    uint32_t mid = (left + right) / 2;
-    const FileMetaData* f = files[mid];
-    if (icmp.InternalKeyComparator::Compare(f->largest.Encode(), key) < 0) {
-      // Key at "mid.largest" is < "target".  Therefore all
-      // files at or before "mid" are uninteresting.
-      left = mid + 1;
-    } else {
-      // Key at "mid.largest" is >= "target".  Therefore all files
-      // after "mid" are uninteresting.
-      right = mid;
-    }
-  }
-  return right;
-}
-
-static bool AfterFile(const Comparator* ucmp, const Slice* user_key,
-                      const FileMetaData* f) {
-  // null user_key occurs before all keys and is therefore never after *f
-  return (user_key != nullptr &&
-          ucmp->Compare(*user_key, f->largest.user_key()) > 0);
-}
-
-static bool BeforeFile(const Comparator* ucmp, const Slice* user_key,
-                       const FileMetaData* f) {
-  // null user_key occurs after all keys and is therefore never before *f
-  return (user_key != nullptr &&
-          ucmp->Compare(*user_key, f->smallest.user_key()) < 0);
-}
-
-bool SomeFileOverlapsRange(const InternalKeyComparator& icmp,
-                           bool disjoint_sorted_files,
-                           const std::vector<FileMetaData*>& files,
-                           const Slice* smallest_user_key,
-                           const Slice* largest_user_key) {
-  const Comparator* ucmp = icmp.user_comparator();
-  if (!disjoint_sorted_files) {
-    // Need to check against all files
-    for (size_t i = 0; i < files.size(); i++) {
-      const FileMetaData* f = files[i];
-      if (AfterFile(ucmp, smallest_user_key, f) ||
-          BeforeFile(ucmp, largest_user_key, f)) {
-        // No overlap
-      } else {
-        return true;  // Overlap
-      }
-    }
-    return false;
-  }
-
-  // Binary search over file list
-  uint32_t index = 0;
-  if (smallest_user_key != nullptr) {
-    // Find the earliest possible internal key for smallest_user_key
-    InternalKey small_key(*smallest_user_key, kMaxSequenceNumber,
-                          kValueTypeForSeek);
-    index = FindFile(icmp, files, small_key.Encode());
-  }
-
-  if (index >= files.size()) {
-    // beginning of range is after all files, so no overlap.
-    return false;
-  }
-
-  return !BeforeFile(ucmp, largest_user_key, files[index]);
-}
-
-// An internal iterator.  For a given version/level pair, yields
-// information about the files in the level.  For a given entry, key()
-// is the largest key that occurs in the file, and value() is an
-// 16-byte value containing the file number and file size, both
-// encoded using EncodeFixed64.
-class Version::LevelFileNumIterator : public Iterator {
- public:
-  LevelFileNumIterator(const InternalKeyComparator& icmp,
-                       const std::vector<FileMetaData*>* flist)
-      : icmp_(icmp), flist_(flist), index_(flist->size()) {  // Marks as invalid
-  }
-  virtual bool Valid() const { return index_ < flist_->size(); }
-  virtual void Seek(const Slice& target) {
-    index_ = FindFile(icmp_, *flist_, target);
-  }
-  virtual void SeekToFirst() { index_ = 0; }
-  virtual void SeekToLast() {
-    index_ = flist_->empty() ? 0 : flist_->size() - 1;
-  }
-  virtual void Next() {
-    assert(Valid());
-    index_++;
-  }
-  virtual void Prev() {
-    assert(Valid());
-    if (index_ == 0) {
-      index_ = flist_->size();  // Marks as invalid
-    } else {
-      index_--;
-    }
-  }
-  Slice key() const {
-    assert(Valid());
-    return (*flist_)[index_]->largest.Encode();
-  }
-  Slice value() const {
-    assert(Valid());
-    EncodeFixed64(value_buf_, (*flist_)[index_]->number);
-    EncodeFixed64(value_buf_ + 8, (*flist_)[index_]->file_size);
-    return Slice(value_buf_, sizeof(value_buf_));
-  }
-  virtual Status status() const { return Status::OK(); }
-
- private:
-  const InternalKeyComparator icmp_;
-  const std::vector<FileMetaData*>* const flist_;
-  uint32_t index_;
-
-  // Backing store for value().  Holds the file number and size.
-  mutable char value_buf_[16];
-};
-
-static Iterator* GetFileIterator(void* arg, const ReadOptions& options,
-                                 const Slice& file_value) {
-  TableCache* cache = reinterpret_cast<TableCache*>(arg);
-  if (file_value.size() != 16) {
-    return NewErrorIterator(
-        Status::Corruption("FileReader invoked with unexpected value"));
-  } else {
-    return cache->NewIterator(options, DecodeFixed64(file_value.data()),
-                              DecodeFixed64(file_value.data() + 8));
-  }
-}
-
-Iterator* Version::NewConcatenatingIterator(const ReadOptions& options,
-                                            int level) const {
-  return NewTwoLevelIterator(
-      new LevelFileNumIterator(vset_->icmp_, &files_[level]), &GetFileIterator,
-      vset_->table_cache_, options);
-}
-
-void Version::AddIterators(const ReadOptions& options,
-                           std::vector<Iterator*>* iters) {
-  // Merge all level zero files together since they may overlap
-  for (size_t i = 0; i < files_[0].size(); i++) {
-    iters->push_back(vset_->table_cache_->NewIterator(
-        options, files_[0][i]->number, files_[0][i]->file_size));
-  }
-
-  // For levels > 0, we can use a concatenating iterator that sequentially
-  // walks through the non-overlapping files in the level, opening them
-  // lazily.
-  for (int level = 1; level < config::kNumLevels; level++) {
-    if (!files_[level].empty()) {
-      iters->push_back(NewConcatenatingIterator(options, level));
-    }
-  }
-}
-
-// Callback from TableCache::Get()
-namespace {
-enum SaverState {
-  kNotFound,
-  kFound,
-  kDeleted,
-  kCorrupt,
-};
-struct Saver {
-  SaverState state;
-  const Comparator* ucmp;
-  Slice user_key;
-  std::string* value;
-};
-}  // namespace
-static void SaveValue(void* arg, const Slice& ikey, const Slice& v) {
-  Saver* s = reinterpret_cast<Saver*>(arg);
-  ParsedInternalKey parsed_key;
-  if (!ParseInternalKey(ikey, &parsed_key)) {
-    s->state = kCorrupt;
-  } else {
-    if (s->ucmp->Compare(parsed_key.user_key, s->user_key) == 0) {
-      s->state = (parsed_key.type == kTypeValue) ? kFound : kDeleted;
-      if (s->state == kFound) {
-        s->value->assign(v.data(), v.size());
-      }
-    }
-  }
-}
-
-static bool NewestFirst(FileMetaData* a, FileMetaData* b) {
-  return a->number > b->number;
-}
-
-void Version::ForEachOverlapping(Slice user_key, Slice internal_key, void* arg,
-                                 bool (*func)(void*, int, FileMetaData*)) {
-  // TODO(sanjay): Change Version::Get() to use this function.
-  const Comparator* ucmp = vset_->icmp_.user_comparator();
-
-  // Search level-0 in order from newest to oldest.
-  std::vector<FileMetaData*> tmp;
-  tmp.reserve(files_[0].size());
-  for (uint32_t i = 0; i < files_[0].size(); i++) {
-    FileMetaData* f = files_[0][i];
-    if (ucmp->Compare(user_key, f->smallest.user_key()) >= 0 &&
-        ucmp->Compare(user_key, f->largest.user_key()) <= 0) {
-      tmp.push_back(f);
-    }
-  }
-  if (!tmp.empty()) {
-    std::sort(tmp.begin(), tmp.end(), NewestFirst);
-    for (uint32_t i = 0; i < tmp.size(); i++) {
-      if (!(*func)(arg, 0, tmp[i])) {
-        return;
-      }
-    }
-  }
-
-  // Search other levels.
-  for (int level = 1; level < config::kNumLevels; level++) {
-    size_t num_files = files_[level].size();
-    if (num_files == 0) continue;
-
-    // Binary search to find earliest index whose largest key >= internal_key.
-    uint32_t index = FindFile(vset_->icmp_, files_[level], internal_key);
-    if (index < num_files) {
-      FileMetaData* f = files_[level][index];
-      if (ucmp->Compare(user_key, f->smallest.user_key()) < 0) {
-        // All of "f" is past any data for user_key
-      } else {
-        if (!(*func)(arg, level, f)) {
-          return;
-        }
-      }
-    }
-  }
-}
-
-Status Version::Get(const ReadOptions& options, const LookupKey& k,
-                    std::string* value, GetStats* stats) {
-  Slice ikey = k.internal_key();
-  Slice user_key = k.user_key();
-  const Comparator* ucmp = vset_->icmp_.user_comparator();
-  Status s;
-
-  stats->seek_file = nullptr;
-  stats->seek_file_level = -1;
-  FileMetaData* last_file_read = nullptr;
-  int last_file_read_level = -1;
-
-  // We can search level-by-level since entries never hop across
-  // levels.  Therefore we are guaranteed that if we find data
-  // in a smaller level, later levels are irrelevant.
-  std::vector<FileMetaData*> tmp;
-  FileMetaData* tmp2;
-  for (int level = 0; level < config::kNumLevels; level++) {
-    size_t num_files = files_[level].size();
-    if (num_files == 0) continue;
-
-    // Get the list of files to search in this level
-    FileMetaData* const* files = &files_[level][0];
-    if (level == 0) {
-      // Level-0 files may overlap each other.  Find all files that
-      // overlap user_key and process them in order from newest to oldest.
-      tmp.reserve(num_files);
-      for (uint32_t i = 0; i < num_files; i++) {
-        FileMetaData* f = files[i];
-        if (ucmp->Compare(user_key, f->smallest.user_key()) >= 0 &&
-            ucmp->Compare(user_key, f->largest.user_key()) <= 0) {
-          tmp.push_back(f);
-        }
-      }
-      if (tmp.empty()) continue;
-
-      std::sort(tmp.begin(), tmp.end(), NewestFirst);
-      files = &tmp[0];
-      num_files = tmp.size();
-    } else {
-      // Binary search to find earliest index whose largest key >= ikey.
-      uint32_t index = FindFile(vset_->icmp_, files_[level], ikey);
-      if (index >= num_files) {
-        files = nullptr;
-        num_files = 0;
-      } else {
-        tmp2 = files[index];
-        if (ucmp->Compare(user_key, tmp2->smallest.user_key()) < 0) {
-          // All of "tmp2" is past any data for user_key
-          files = nullptr;
-          num_files = 0;
-        } else {
-          files = &tmp2;
-          num_files = 1;
-        }
-      }
-    }
-
-    for (uint32_t i = 0; i < num_files; ++i) {
-      if (last_file_read != nullptr && stats->seek_file == nullptr) {
-        // We have had more than one seek for this read.  Charge the 1st file.
-        stats->seek_file = last_file_read;
-        stats->seek_file_level = last_file_read_level;
-      }
-
-      FileMetaData* f = files[i];
-      last_file_read = f;
-      last_file_read_level = level;
-
-      Saver saver;
-      saver.state = kNotFound;
-      saver.ucmp = ucmp;
-      saver.user_key = user_key;
-      saver.value = value;
-      s = vset_->table_cache_->Get(options, f->number, f->file_size, ikey,
-                                   &saver, SaveValue);
-      if (!s.ok()) {
-        return s;
-      }
-      switch (saver.state) {
-        case kNotFound:
-          break;  // Keep searching in other files
-        case kFound:
-          return s;
-        case kDeleted:
-          s = Status::NotFound(Slice());  // Use empty error message for speed
-          return s;
-        case kCorrupt:
-          s = Status::Corruption("corrupted key for ", user_key);
-          return s;
-      }
-    }
-  }
-
-  return Status::NotFound(Slice());  // Use an empty error message for speed
-}
-
-bool Version::UpdateStats(const GetStats& stats) {
-  FileMetaData* f = stats.seek_file;
-  if (f != nullptr) {
-    f->allowed_seeks--;
-    if (f->allowed_seeks <= 0 && file_to_compact_ == nullptr) {
-      file_to_compact_ = f;
-      file_to_compact_level_ = stats.seek_file_level;
-      return true;
-    }
-  }
-  return false;
-}
-
-bool Version::RecordReadSample(Slice internal_key) {
-  ParsedInternalKey ikey;
-  if (!ParseInternalKey(internal_key, &ikey)) {
-    return false;
-  }
-
-  struct State {
-    GetStats stats;  // Holds first matching file
-    int matches;
-
-    static bool Match(void* arg, int level, FileMetaData* f) {
-      State* state = reinterpret_cast<State*>(arg);
-      state->matches++;
-      if (state->matches == 1) {
-        // Remember first match.
-        state->stats.seek_file = f;
-        state->stats.seek_file_level = level;
-      }
-      // We can stop iterating once we have a second match.
-      return state->matches < 2;
-    }
-  };
-
-  State state;
-  state.matches = 0;
-  ForEachOverlapping(ikey.user_key, internal_key, &state, &State::Match);
-
-  // Must have at least two matches since we want to merge across
-  // files. But what if we have a single file that contains many
-  // overwrites and deletions?  Should we have another mechanism for
-  // finding such files?
-  if (state.matches >= 2) {
-    // 1MB cost is about 1 seek (see comment in Builder::Apply).
-    return UpdateStats(state.stats);
-  }
-  return false;
-}
-
-void Version::Ref() { ++refs_; }
-
-void Version::Unref() {
-  assert(this != &vset_->dummy_versions_);
-  assert(refs_ >= 1);
-  --refs_;
-  if (refs_ == 0) {
-    delete this;
-  }
-}
-
-bool Version::OverlapInLevel(int level, const Slice* smallest_user_key,
-                             const Slice* largest_user_key) {
-  return SomeFileOverlapsRange(vset_->icmp_, (level > 0), files_[level],
-                               smallest_user_key, largest_user_key);
-}
-
-int Version::PickLevelForMemTableOutput(const Slice& smallest_user_key,
-                                        const Slice& largest_user_key) {
-  int level = 0;
-  if (!OverlapInLevel(0, &smallest_user_key, &largest_user_key)) {
-    // Push to next level if there is no overlap in next level,
-    // and the #bytes overlapping in the level after that are limited.
-    InternalKey start(smallest_user_key, kMaxSequenceNumber, kValueTypeForSeek);
-    InternalKey limit(largest_user_key, 0, static_cast<ValueType>(0));
-    std::vector<FileMetaData*> overlaps;
-    while (level < config::kMaxMemCompactLevel) {
-      if (OverlapInLevel(level + 1, &smallest_user_key, &largest_user_key)) {
-        break;
-      }
-      if (level + 2 < config::kNumLevels) {
-        // Check that file does not overlap too many grandparent bytes.
-        GetOverlappingInputs(level + 2, &start, &limit, &overlaps);
-        const int64_t sum = TotalFileSize(overlaps);
-        if (sum > MaxGrandParentOverlapBytes(vset_->options_)) {
-          break;
-        }
-      }
-      level++;
-    }
-  }
-  return level;
-}
-
-// Store in "*inputs" all files in "level" that overlap [begin,end]
-void Version::GetOverlappingInputs(int level, const InternalKey* begin,
-                                   const InternalKey* end,
-                                   std::vector<FileMetaData*>* inputs) {
-  assert(level >= 0);
-  assert(level < config::kNumLevels);
-  inputs->clear();
-  Slice user_begin, user_end;
-  if (begin != nullptr) {
-    user_begin = begin->user_key();
-  }
-  if (end != nullptr) {
-    user_end = end->user_key();
-  }
-  const Comparator* user_cmp = vset_->icmp_.user_comparator();
-  for (size_t i = 0; i < files_[level].size();) {
-    FileMetaData* f = files_[level][i++];
-    const Slice file_start = f->smallest.user_key();
-    const Slice file_limit = f->largest.user_key();
-    if (begin != nullptr && user_cmp->Compare(file_limit, user_begin) < 0) {
-      // "f" is completely before specified range; skip it
-    } else if (end != nullptr && user_cmp->Compare(file_start, user_end) > 0) {
-      // "f" is completely after specified range; skip it
-    } else {
-      inputs->push_back(f);
-      if (level == 0) {
-        // Level-0 files may overlap each other.  So check if the newly
-        // added file has expanded the range.  If so, restart search.
-        if (begin != nullptr && user_cmp->Compare(file_start, user_begin) < 0) {
-          user_begin = file_start;
-          inputs->clear();
-          i = 0;
-        } else if (end != nullptr &&
-                   user_cmp->Compare(file_limit, user_end) > 0) {
-          user_end = file_limit;
-          inputs->clear();
-          i = 0;
-        }
-      }
-    }
-  }
-}
-
-std::string Version::DebugString() const {
-  std::string r;
-  for (int level = 0; level < config::kNumLevels; level++) {
-    // E.g.,
-    //   --- level 1 ---
-    //   17:123['a' .. 'd']
-    //   20:43['e' .. 'g']
-    r.append("--- level ");
-    AppendNumberTo(&r, level);
-    r.append(" ---\n");
-    const std::vector<FileMetaData*>& files = files_[level];
-    for (size_t i = 0; i < files.size(); i++) {
-      r.push_back(' ');
-      AppendNumberTo(&r, files[i]->number);
-      r.push_back(':');
-      AppendNumberTo(&r, files[i]->file_size);
-      r.append("[");
-      r.append(files[i]->smallest.DebugString());
-      r.append(" .. ");
-      r.append(files[i]->largest.DebugString());
-      r.append("]\n");
-    }
-  }
-  return r;
-}
-
-// A helper class so we can efficiently apply a whole sequence
-// of edits to a particular state without creating intermediate
-// Versions that contain full copies of the intermediate state.
-class VersionSet::Builder {
- private:
-  // Helper to sort by v->files_[file_number].smallest
-  struct BySmallestKey {
-    const InternalKeyComparator* internal_comparator;
-
-    bool operator()(FileMetaData* f1, FileMetaData* f2) const {
-      int r = internal_comparator->Compare(f1->smallest, f2->smallest);
-      if (r != 0) {
-        return (r < 0);
-      } else {
-        // Break ties by file number
-        return (f1->number < f2->number);
-      }
-    }
-  };
-
-  typedef std::set<FileMetaData*, BySmallestKey> FileSet;
-  struct LevelState {
-    std::set<uint64_t> deleted_files;
-    FileSet* added_files;
-  };
-
-  VersionSet* vset_;
-  Version* base_;
-  LevelState levels_[config::kNumLevels];
-
- public:
-  // Initialize a builder with the files from *base and other info from *vset
-  Builder(VersionSet* vset, Version* base) : vset_(vset), base_(base) {
-    base_->Ref();
-    BySmallestKey cmp;
-    cmp.internal_comparator = &vset_->icmp_;
-    for (int level = 0; level < config::kNumLevels; level++) {
-      levels_[level].added_files = new FileSet(cmp);
-    }
-  }
-
-  ~Builder() {
-    for (int level = 0; level < config::kNumLevels; level++) {
-      const FileSet* added = levels_[level].added_files;
-      std::vector<FileMetaData*> to_unref;
-      to_unref.reserve(added->size());
-      for (FileSet::const_iterator it = added->begin(); it != added->end();
-           ++it) {
-        to_unref.push_back(*it);
-      }
-      delete added;
-      for (uint32_t i = 0; i < to_unref.size(); i++) {
-        FileMetaData* f = to_unref[i];
-        f->refs--;
-        if (f->refs <= 0) {
-          delete f;
-        }
-      }
-    }
-    base_->Unref();
-  }
-
-  // Apply all of the edits in *edit to the current state.
-  void Apply(VersionEdit* edit) {
-    // Update compaction pointers
-    for (size_t i = 0; i < edit->compact_pointers_.size(); i++) {
-      const int level = edit->compact_pointers_[i].first;
-      vset_->compact_pointer_[level] =
-          edit->compact_pointers_[i].second.Encode().ToString();
-    }
-
-    // Delete files
-    const VersionEdit::DeletedFileSet& del = edit->deleted_files_;
-    for (VersionEdit::DeletedFileSet::const_iterator iter = del.begin();
-         iter != del.end(); ++iter) {
-      const int level = iter->first;
-      const uint64_t number = iter->second;
-      levels_[level].deleted_files.insert(number);
-    }
-
-    // Add new files
-    for (size_t i = 0; i < edit->new_files_.size(); i++) {
-      const int level = edit->new_files_[i].first;
-      FileMetaData* f = new FileMetaData(edit->new_files_[i].second);
-      f->refs = 1;
-
-      // We arrange to automatically compact this file after
-      // a certain number of seeks.  Let's assume:
-      //   (1) One seek costs 10ms
-      //   (2) Writing or reading 1MB costs 10ms (100MB/s)
-      //   (3) A compaction of 1MB does 25MB of IO:
-      //         1MB read from this level
-      //         10-12MB read from next level (boundaries may be misaligned)
-      //         10-12MB written to next level
-      // This implies that 25 seeks cost the same as the compaction
-      // of 1MB of data.  I.e., one seek costs approximately the
-      // same as the compaction of 40KB of data.  We are a little
-      // conservative and allow approximately one seek for every 16KB
-      // of data before triggering a compaction.
-      f->allowed_seeks = static_cast<int>((f->file_size / 16384U));
-      if (f->allowed_seeks < 100) f->allowed_seeks = 100;
-
-      levels_[level].deleted_files.erase(f->number);
-      levels_[level].added_files->insert(f);
-    }
-  }
-
-  // Save the current state in *v.
-  void SaveTo(Version* v) {
-    BySmallestKey cmp;
-    cmp.internal_comparator = &vset_->icmp_;
-    for (int level = 0; level < config::kNumLevels; level++) {
-      // Merge the set of added files with the set of pre-existing files.
-      // Drop any deleted files.  Store the result in *v.
-      const std::vector<FileMetaData*>& base_files = base_->files_[level];
-      std::vector<FileMetaData*>::const_iterator base_iter = base_files.begin();
-      std::vector<FileMetaData*>::const_iterator base_end = base_files.end();
-      const FileSet* added = levels_[level].added_files;
-      v->files_[level].reserve(base_files.size() + added->size());
-      for (FileSet::const_iterator added_iter = added->begin();
-           added_iter != added->end(); ++added_iter) {
-        // Add all smaller files listed in base_
-        for (std::vector<FileMetaData*>::const_iterator bpos =
-                 std::upper_bound(base_iter, base_end, *added_iter, cmp);
-             base_iter != bpos; ++base_iter) {
-          MaybeAddFile(v, level, *base_iter);
-        }
-
-        MaybeAddFile(v, level, *added_iter);
-      }
-
-      // Add remaining base files
-      for (; base_iter != base_end; ++base_iter) {
-        MaybeAddFile(v, level, *base_iter);
-      }
-
-#ifndef NDEBUG
-      // Make sure there is no overlap in levels > 0
-      if (level > 0) {
-        for (uint32_t i = 1; i < v->files_[level].size(); i++) {
-          const InternalKey& prev_end = v->files_[level][i - 1]->largest;
-          const InternalKey& this_begin = v->files_[level][i]->smallest;
-          if (vset_->icmp_.Compare(prev_end, this_begin) >= 0) {
-            fprintf(stderr, "overlapping ranges in same level %s vs. %s\n",
-                    prev_end.DebugString().c_str(),
-                    this_begin.DebugString().c_str());
-            abort();
-          }
-        }
-      }
-#endif
-    }
-  }
-
-  void MaybeAddFile(Version* v, int level, FileMetaData* f) {
-    if (levels_[level].deleted_files.count(f->number) > 0) {
-      // File is deleted: do nothing
-    } else {
-      std::vector<FileMetaData*>* files = &v->files_[level];
-      if (level > 0 && !files->empty()) {
-        // Must not overlap
-        assert(vset_->icmp_.Compare((*files)[files->size() - 1]->largest,
-                                    f->smallest) < 0);
-      }
-      f->refs++;
-      files->push_back(f);
-    }
-  }
-};
-
-VersionSet::VersionSet(const std::string& dbname, const Options* options,
-                       TableCache* table_cache,
-                       const InternalKeyComparator* cmp)
-    : env_(options->env),
-      dbname_(dbname),
-      options_(options),
-      table_cache_(table_cache),
-      icmp_(*cmp),
-      next_file_number_(2),
-      manifest_file_number_(0),  // Filled by Recover()
-      last_sequence_(0),
-      log_number_(0),
-      prev_log_number_(0),
-      descriptor_file_(nullptr),
-      descriptor_log_(nullptr),
-      dummy_versions_(this),
-      current_(nullptr) {
-  AppendVersion(new Version(this));
-}
-
-VersionSet::~VersionSet() {
-  current_->Unref();
-  assert(dummy_versions_.next_ == &dummy_versions_);  // List must be empty
-  delete descriptor_log_;
-  delete descriptor_file_;
-}
-
-void VersionSet::AppendVersion(Version* v) {
-  // Make "v" current
-  assert(v->refs_ == 0);
-  assert(v != current_);
-  if (current_ != nullptr) {
-    current_->Unref();
-  }
-  current_ = v;
-  v->Ref();
-
-  // Append to linked list
-  v->prev_ = dummy_versions_.prev_;
-  v->next_ = &dummy_versions_;
-  v->prev_->next_ = v;
-  v->next_->prev_ = v;
-}
-
-Status VersionSet::LogAndApply(VersionEdit* edit, port::Mutex* mu) {
-  if (edit->has_log_number_) {
-    assert(edit->log_number_ >= log_number_);
-    assert(edit->log_number_ < next_file_number_);
-  } else {
-    edit->SetLogNumber(log_number_);
-  }
-
-  if (!edit->has_prev_log_number_) {
-    edit->SetPrevLogNumber(prev_log_number_);
-  }
-
-  edit->SetNextFile(next_file_number_);
-  edit->SetLastSequence(last_sequence_);
-
-  Version* v = new Version(this);
-  {
-    Builder builder(this, current_);
-    builder.Apply(edit);
-    builder.SaveTo(v);
-  }
-  Finalize(v);
-
-  // Initialize new descriptor log file if necessary by creating
-  // a temporary file that contains a snapshot of the current version.
-  std::string new_manifest_file;
-  Status s;
-  if (descriptor_log_ == nullptr) {
-    // No reason to unlock *mu here since we only hit this path in the
-    // first call to LogAndApply (when opening the database).
-    assert(descriptor_file_ == nullptr);
-    new_manifest_file = DescriptorFileName(dbname_, manifest_file_number_);
-    edit->SetNextFile(next_file_number_);
-    s = env_->NewWritableFile(new_manifest_file, &descriptor_file_);
-    if (s.ok()) {
-      descriptor_log_ = new log::Writer(descriptor_file_);
-      s = WriteSnapshot(descriptor_log_);
-    }
-  }
-
-  // Unlock during expensive MANIFEST log write
-  {
-    mu->Unlock();
-
-    // Write new record to MANIFEST log
-    if (s.ok()) {
-      std::string record;
-      edit->EncodeTo(&record);
-      s = descriptor_log_->AddRecord(record);
-      if (s.ok()) {
-        s = descriptor_file_->Sync();
-      }
-      if (!s.ok()) {
-        Log(options_->info_log, "MANIFEST write: %s\n", s.ToString().c_str());
-      }
-    }
-
-    // If we just created a new descriptor file, install it by writing a
-    // new CURRENT file that points to it.
-    if (s.ok() && !new_manifest_file.empty()) {
-      s = SetCurrentFile(env_, dbname_, manifest_file_number_);
-    }
-
-    mu->Lock();
-  }
-
-  // Install the new version
-  if (s.ok()) {
-    AppendVersion(v);
-    log_number_ = edit->log_number_;
-    prev_log_number_ = edit->prev_log_number_;
-  } else {
-    delete v;
-    if (!new_manifest_file.empty()) {
-      delete descriptor_log_;
-      delete descriptor_file_;
-      descriptor_log_ = nullptr;
-      descriptor_file_ = nullptr;
-      env_->DeleteFile(new_manifest_file);
-    }
-  }
-
-  return s;
-}
-
-Status VersionSet::Recover(bool* save_manifest) {
-  struct LogReporter : public log::Reader::Reporter {
-    Status* status;
-    virtual void Corruption(size_t bytes, const Status& s) {
-      if (this->status->ok()) *this->status = s;
-    }
-  };
-
-  // Read "CURRENT" file, which contains a pointer to the current manifest file
-  std::string current;
-  Status s = ReadFileToString(env_, CurrentFileName(dbname_), &current);
-  if (!s.ok()) {
-    return s;
-  }
-  if (current.empty() || current[current.size() - 1] != '\n') {
-    return Status::Corruption("CURRENT file does not end with newline");
-  }
-  current.resize(current.size() - 1);
-
-  std::string dscname = dbname_ + "/" + current;
-  SequentialFile* file;
-  s = env_->NewSequentialFile(dscname, &file);
-  if (!s.ok()) {
-    if (s.IsNotFound()) {
-      return Status::Corruption("CURRENT points to a non-existent file",
-                                s.ToString());
-    }
-    return s;
-  }
-
-  bool have_log_number = false;
-  bool have_prev_log_number = false;
-  bool have_next_file = false;
-  bool have_last_sequence = false;
-  uint64_t next_file = 0;
-  uint64_t last_sequence = 0;
-  uint64_t log_number = 0;
-  uint64_t prev_log_number = 0;
-  Builder builder(this, current_);
-
-  {
-    LogReporter reporter;
-    reporter.status = &s;
-    log::Reader reader(file, &reporter, true /*checksum*/,
-                       0 /*initial_offset*/);
-    Slice record;
-    std::string scratch;
-    while (reader.ReadRecord(&record, &scratch) && s.ok()) {
-      VersionEdit edit;
-      s = edit.DecodeFrom(record);
-      if (s.ok()) {
-        if (edit.has_comparator_ &&
-            edit.comparator_ != icmp_.user_comparator()->Name()) {
-          s = Status::InvalidArgument(
-              edit.comparator_ + " does not match existing comparator ",
-              icmp_.user_comparator()->Name());
-        }
-      }
-
-      if (s.ok()) {
-        builder.Apply(&edit);
-      }
-
-      if (edit.has_log_number_) {
-        log_number = edit.log_number_;
-        have_log_number = true;
-      }
-
-      if (edit.has_prev_log_number_) {
-        prev_log_number = edit.prev_log_number_;
-        have_prev_log_number = true;
-      }
-
-      if (edit.has_next_file_number_) {
-        next_file = edit.next_file_number_;
-        have_next_file = true;
-      }
-
-      if (edit.has_last_sequence_) {
-        last_sequence = edit.last_sequence_;
-        have_last_sequence = true;
-      }
-    }
-  }
-  delete file;
-  file = nullptr;
-
-  if (s.ok()) {
-    if (!have_next_file) {
-      s = Status::Corruption("no meta-nextfile entry in descriptor");
-    } else if (!have_log_number) {
-      s = Status::Corruption("no meta-lognumber entry in descriptor");
-    } else if (!have_last_sequence) {
-      s = Status::Corruption("no last-sequence-number entry in descriptor");
-    }
-
-    if (!have_prev_log_number) {
-      prev_log_number = 0;
-    }
-
-    MarkFileNumberUsed(prev_log_number);
-    MarkFileNumberUsed(log_number);
-  }
-
-  if (s.ok()) {
-    Version* v = new Version(this);
-    builder.SaveTo(v);
-    // Install recovered version
-    Finalize(v);
-    AppendVersion(v);
-    manifest_file_number_ = next_file;
-    next_file_number_ = next_file + 1;
-    last_sequence_ = last_sequence;
-    log_number_ = log_number;
-    prev_log_number_ = prev_log_number;
-
-    // See if we can reuse the existing MANIFEST file.
-    if (ReuseManifest(dscname, current)) {
-      // No need to save new manifest
-    } else {
-      *save_manifest = true;
-    }
-  }
-
-  return s;
-}
-
-bool VersionSet::ReuseManifest(const std::string& dscname,
-                               const std::string& dscbase) {
-  if (!options_->reuse_logs) {
-    return false;
-  }
-  FileType manifest_type;
-  uint64_t manifest_number;
-  uint64_t manifest_size;
-  if (!ParseFileName(dscbase, &manifest_number, &manifest_type) ||
-      manifest_type != kDescriptorFile ||
-      !env_->GetFileSize(dscname, &manifest_size).ok() ||
-      // Make new compacted MANIFEST if old one is too big
-      manifest_size >= TargetFileSize(options_)) {
-    return false;
-  }
-
-  assert(descriptor_file_ == nullptr);
-  assert(descriptor_log_ == nullptr);
-  Status r = env_->NewAppendableFile(dscname, &descriptor_file_);
-  if (!r.ok()) {
-    Log(options_->info_log, "Reuse MANIFEST: %s\n", r.ToString().c_str());
-    assert(descriptor_file_ == nullptr);
-    return false;
-  }
-
-  Log(options_->info_log, "Reusing MANIFEST %s\n", dscname.c_str());
-  descriptor_log_ = new log::Writer(descriptor_file_, manifest_size);
-  manifest_file_number_ = manifest_number;
-  return true;
-}
-
-void VersionSet::MarkFileNumberUsed(uint64_t number) {
-  if (next_file_number_ <= number) {
-    next_file_number_ = number + 1;
-  }
-}
-
-void VersionSet::Finalize(Version* v) {
-  // Precomputed best level for next compaction
-  int best_level = -1;
-  double best_score = -1;
-
-  for (int level = 0; level < config::kNumLevels - 1; level++) {
-    double score;
-    if (level == 0) {
-      // We treat level-0 specially by bounding the number of files
-      // instead of number of bytes for two reasons:
-      //
-      // (1) With larger write-buffer sizes, it is nice not to do too
-      // many level-0 compactions.
-      //
-      // (2) The files in level-0 are merged on every read and
-      // therefore we wish to avoid too many files when the individual
-      // file size is small (perhaps because of a small write-buffer
-      // setting, or very high compression ratios, or lots of
-      // overwrites/deletions).
-      score = v->files_[level].size() /
-              static_cast<double>(config::kL0_CompactionTrigger);
-    } else {
-      // Compute the ratio of current size to size limit.
-      const uint64_t level_bytes = TotalFileSize(v->files_[level]);
-      score =
-          static_cast<double>(level_bytes) / MaxBytesForLevel(options_, level);
-    }
-
-    if (score > best_score) {
-      best_level = level;
-      best_score = score;
-    }
-  }
-
-  v->compaction_level_ = best_level;
-  v->compaction_score_ = best_score;
-}
-
-Status VersionSet::WriteSnapshot(log::Writer* log) {
-  // TODO: Break up into multiple records to reduce memory usage on recovery?
-
-  // Save metadata
-  VersionEdit edit;
-  edit.SetComparatorName(icmp_.user_comparator()->Name());
-
-  // Save compaction pointers
-  for (int level = 0; level < config::kNumLevels; level++) {
-    if (!compact_pointer_[level].empty()) {
-      InternalKey key;
-      key.DecodeFrom(compact_pointer_[level]);
-      edit.SetCompactPointer(level, key);
-    }
-  }
-
-  // Save files
-  for (int level = 0; level < config::kNumLevels; level++) {
-    const std::vector<FileMetaData*>& files = current_->files_[level];
-    for (size_t i = 0; i < files.size(); i++) {
-      const FileMetaData* f = files[i];
-      edit.AddFile(level, f->number, f->file_size, f->smallest, f->largest);
-    }
-  }
-
-  std::string record;
-  edit.EncodeTo(&record);
-  return log->AddRecord(record);
-}
-
-int VersionSet::NumLevelFiles(int level) const {
-  assert(level >= 0);
-  assert(level < config::kNumLevels);
-  return current_->files_[level].size();
-}
-
-const char* VersionSet::LevelSummary(LevelSummaryStorage* scratch) const {
-  // Update code if kNumLevels changes
-  static_assert(config::kNumLevels == 7, "");
-  snprintf(scratch->buffer, sizeof(scratch->buffer),
-           "files[ %d %d %d %d %d %d %d ]", int(current_->files_[0].size()),
-           int(current_->files_[1].size()), int(current_->files_[2].size()),
-           int(current_->files_[3].size()), int(current_->files_[4].size()),
-           int(current_->files_[5].size()), int(current_->files_[6].size()));
-  return scratch->buffer;
-}
-
-uint64_t VersionSet::ApproximateOffsetOf(Version* v, const InternalKey& ikey) {
-  uint64_t result = 0;
-  for (int level = 0; level < config::kNumLevels; level++) {
-    const std::vector<FileMetaData*>& files = v->files_[level];
-    for (size_t i = 0; i < files.size(); i++) {
-      if (icmp_.Compare(files[i]->largest, ikey) <= 0) {
-        // Entire file is before "ikey", so just add the file size
-        result += files[i]->file_size;
-      } else if (icmp_.Compare(files[i]->smallest, ikey) > 0) {
-        // Entire file is after "ikey", so ignore
-        if (level > 0) {
-          // Files other than level 0 are sorted by meta->smallest, so
-          // no further files in this level will contain data for
-          // "ikey".
-          break;
-        }
-      } else {
-        // "ikey" falls in the range for this table.  Add the
-        // approximate offset of "ikey" within the table.
-        Table* tableptr;
-        Iterator* iter = table_cache_->NewIterator(
-            ReadOptions(), files[i]->number, files[i]->file_size, &tableptr);
-        if (tableptr != nullptr) {
-          result += tableptr->ApproximateOffsetOf(ikey.Encode());
-        }
-        delete iter;
-      }
-    }
-  }
-  return result;
-}
-
-void VersionSet::AddLiveFiles(std::set<uint64_t>* live) {
-  for (Version* v = dummy_versions_.next_; v != &dummy_versions_;
-       v = v->next_) {
-    for (int level = 0; level < config::kNumLevels; level++) {
-      const std::vector<FileMetaData*>& files = v->files_[level];
-      for (size_t i = 0; i < files.size(); i++) {
-        live->insert(files[i]->number);
-      }
-    }
-  }
-}
-
-int64_t VersionSet::NumLevelBytes(int level) const {
-  assert(level >= 0);
-  assert(level < config::kNumLevels);
-  return TotalFileSize(current_->files_[level]);
-}
-
-int64_t VersionSet::MaxNextLevelOverlappingBytes() {
-  int64_t result = 0;
-  std::vector<FileMetaData*> overlaps;
-  for (int level = 1; level < config::kNumLevels - 1; level++) {
-    for (size_t i = 0; i < current_->files_[level].size(); i++) {
-      const FileMetaData* f = current_->files_[level][i];
-      current_->GetOverlappingInputs(level + 1, &f->smallest, &f->largest,
-                                     &overlaps);
-      const int64_t sum = TotalFileSize(overlaps);
-      if (sum > result) {
-        result = sum;
-      }
-    }
-  }
-  return result;
-}
-
-// Stores the minimal range that covers all entries in inputs in
-// *smallest, *largest.
-// REQUIRES: inputs is not empty
-void VersionSet::GetRange(const std::vector<FileMetaData*>& inputs,
-                          InternalKey* smallest, InternalKey* largest) {
-  assert(!inputs.empty());
-  smallest->Clear();
-  largest->Clear();
-  for (size_t i = 0; i < inputs.size(); i++) {
-    FileMetaData* f = inputs[i];
-    if (i == 0) {
-      *smallest = f->smallest;
-      *largest = f->largest;
-    } else {
-      if (icmp_.Compare(f->smallest, *smallest) < 0) {
-        *smallest = f->smallest;
-      }
-      if (icmp_.Compare(f->largest, *largest) > 0) {
-        *largest = f->largest;
-      }
-    }
-  }
-}
-
-// Stores the minimal range that covers all entries in inputs1 and inputs2
-// in *smallest, *largest.
-// REQUIRES: inputs is not empty
-void VersionSet::GetRange2(const std::vector<FileMetaData*>& inputs1,
-                           const std::vector<FileMetaData*>& inputs2,
-                           InternalKey* smallest, InternalKey* largest) {
-  std::vector<FileMetaData*> all = inputs1;
-  all.insert(all.end(), inputs2.begin(), inputs2.end());
-  GetRange(all, smallest, largest);
-}
-
-Iterator* VersionSet::MakeInputIterator(Compaction* c) {
-  ReadOptions options;
-  options.verify_checksums = options_->paranoid_checks;
-  options.fill_cache = false;
-
-  // Level-0 files have to be merged together.  For other levels,
-  // we will make a concatenating iterator per level.
-  // TODO(opt): use concatenating iterator for level-0 if there is no overlap
-  const int space = (c->level() == 0 ? c->inputs_[0].size() + 1 : 2);
-  Iterator** list = new Iterator*[space];
-  int num = 0;
-  for (int which = 0; which < 2; which++) {
-    if (!c->inputs_[which].empty()) {
-      if (c->level() + which == 0) {
-        const std::vector<FileMetaData*>& files = c->inputs_[which];
-        for (size_t i = 0; i < files.size(); i++) {
-          list[num++] = table_cache_->NewIterator(options, files[i]->number,
-                                                  files[i]->file_size);
-        }
-      } else {
-        // Create concatenating iterator for the files from this level
-        list[num++] = NewTwoLevelIterator(
-            new Version::LevelFileNumIterator(icmp_, &c->inputs_[which]),
-            &GetFileIterator, table_cache_, options);
-      }
-    }
-  }
-  assert(num <= space);
-  Iterator* result = NewMergingIterator(&icmp_, list, num);
-  delete[] list;
-  return result;
-}
-
-Compaction* VersionSet::PickCompaction() {
-  Compaction* c;
-  int level;
-
-  // We prefer compactions triggered by too much data in a level over
-  // the compactions triggered by seeks.
-  const bool size_compaction = (current_->compaction_score_ >= 1);
-  const bool seek_compaction = (current_->file_to_compact_ != nullptr);
-  if (size_compaction) {
-    level = current_->compaction_level_;
-    assert(level >= 0);
-    assert(level + 1 < config::kNumLevels);
-    c = new Compaction(options_, level);
-
-    // Pick the first file that comes after compact_pointer_[level]
-    for (size_t i = 0; i < current_->files_[level].size(); i++) {
-      FileMetaData* f = current_->files_[level][i];
-      if (compact_pointer_[level].empty() ||
-          icmp_.Compare(f->largest.Encode(), compact_pointer_[level]) > 0) {
-        c->inputs_[0].push_back(f);
-        break;
-      }
-    }
-    if (c->inputs_[0].empty()) {
-      // Wrap-around to the beginning of the key space
-      c->inputs_[0].push_back(current_->files_[level][0]);
-    }
-  } else if (seek_compaction) {
-    level = current_->file_to_compact_level_;
-    c = new Compaction(options_, level);
-    c->inputs_[0].push_back(current_->file_to_compact_);
-  } else {
-    return nullptr;
-  }
-
-  c->input_version_ = current_;
-  c->input_version_->Ref();
-
-  // Files in level 0 may overlap each other, so pick up all overlapping ones
-  if (level == 0) {
-    InternalKey smallest, largest;
-    GetRange(c->inputs_[0], &smallest, &largest);
-    // Note that the next call will discard the file we placed in
-    // c->inputs_[0] earlier and replace it with an overlapping set
-    // which will include the picked file.
-    current_->GetOverlappingInputs(0, &smallest, &largest, &c->inputs_[0]);
-    assert(!c->inputs_[0].empty());
-  }
-
-  SetupOtherInputs(c);
-
-  return c;
-}
-
-// Finds the largest key in a vector of files. Returns true if files it not
-// empty.
-bool FindLargestKey(const InternalKeyComparator& icmp,
-                    const std::vector<FileMetaData*>& files,
-                    InternalKey* largest_key) {
-  if (files.empty()) {
-    return false;
-  }
-  *largest_key = files[0]->largest;
-  for (size_t i = 1; i < files.size(); ++i) {
-    FileMetaData* f = files[i];
-    if (icmp.Compare(f->largest, *largest_key) > 0) {
-      *largest_key = f->largest;
-    }
-  }
-  return true;
-}
-
-// Finds minimum file b2=(l2, u2) in level file for which l2 > u1 and
-// user_key(l2) = user_key(u1)
-FileMetaData* FindSmallestBoundaryFile(
-    const InternalKeyComparator& icmp,
-    const std::vector<FileMetaData*>& level_files,
-    const InternalKey& largest_key) {
-  const Comparator* user_cmp = icmp.user_comparator();
-  FileMetaData* smallest_boundary_file = nullptr;
-  for (size_t i = 0; i < level_files.size(); ++i) {
-    FileMetaData* f = level_files[i];
-    if (icmp.Compare(f->smallest, largest_key) > 0 &&
-        user_cmp->Compare(f->smallest.user_key(), largest_key.user_key()) ==
-            0) {
-      if (smallest_boundary_file == nullptr ||
-          icmp.Compare(f->smallest, smallest_boundary_file->smallest) < 0) {
-        smallest_boundary_file = f;
-      }
-    }
-  }
-  return smallest_boundary_file;
-}
-
-// Extracts the largest file b1 from |compaction_files| and then searches for a
-// b2 in |level_files| for which user_key(u1) = user_key(l2). If it finds such a
-// file b2 (known as a boundary file) it adds it to |compaction_files| and then
-// searches again using this new upper bound.
-//
-// If there are two blocks, b1=(l1, u1) and b2=(l2, u2) and
-// user_key(u1) = user_key(l2), and if we compact b1 but not b2 then a
-// subsequent get operation will yield an incorrect result because it will
-// return the record from b2 in level i rather than from b1 because it searches
-// level by level for records matching the supplied user key.
-//
-// parameters:
-//   in     level_files:      List of files to search for boundary files.
-//   in/out compaction_files: List of files to extend by adding boundary files.
-void AddBoundaryInputs(const InternalKeyComparator& icmp,
-                       const std::vector<FileMetaData*>& level_files,
-                       std::vector<FileMetaData*>* compaction_files) {
-  InternalKey largest_key;
-
-  // Quick return if compaction_files is empty.
-  if (!FindLargestKey(icmp, *compaction_files, &largest_key)) {
-    return;
-  }
-
-  bool continue_searching = true;
-  while (continue_searching) {
-    FileMetaData* smallest_boundary_file =
-        FindSmallestBoundaryFile(icmp, level_files, largest_key);
-
-    // If a boundary file was found advance largest_key, otherwise we're done.
-    if (smallest_boundary_file != NULL) {
-      compaction_files->push_back(smallest_boundary_file);
-      largest_key = smallest_boundary_file->largest;
-    } else {
-      continue_searching = false;
-    }
-  }
-}
-
-void VersionSet::SetupOtherInputs(Compaction* c) {
-  const int level = c->level();
-  InternalKey smallest, largest;
-
-  AddBoundaryInputs(icmp_, current_->files_[level], &c->inputs_[0]);
-  GetRange(c->inputs_[0], &smallest, &largest);
-
-  current_->GetOverlappingInputs(level + 1, &smallest, &largest,
-                                 &c->inputs_[1]);
-
-  // Get entire range covered by compaction
-  InternalKey all_start, all_limit;
-  GetRange2(c->inputs_[0], c->inputs_[1], &all_start, &all_limit);
-
-  // See if we can grow the number of inputs in "level" without
-  // changing the number of "level+1" files we pick up.
-  if (!c->inputs_[1].empty()) {
-    std::vector<FileMetaData*> expanded0;
-    current_->GetOverlappingInputs(level, &all_start, &all_limit, &expanded0);
-    AddBoundaryInputs(icmp_, current_->files_[level], &expanded0);
-    const int64_t inputs0_size = TotalFileSize(c->inputs_[0]);
-    const int64_t inputs1_size = TotalFileSize(c->inputs_[1]);
-    const int64_t expanded0_size = TotalFileSize(expanded0);
-    if (expanded0.size() > c->inputs_[0].size() &&
-        inputs1_size + expanded0_size <
-            ExpandedCompactionByteSizeLimit(options_)) {
-      InternalKey new_start, new_limit;
-      GetRange(expanded0, &new_start, &new_limit);
-      std::vector<FileMetaData*> expanded1;
-      current_->GetOverlappingInputs(level + 1, &new_start, &new_limit,
-                                     &expanded1);
-      if (expanded1.size() == c->inputs_[1].size()) {
-        Log(options_->info_log,
-            "Expanding@%d %d+%d (%ld+%ld bytes) to %d+%d (%ld+%ld bytes)\n",
-            level, int(c->inputs_[0].size()), int(c->inputs_[1].size()),
-            long(inputs0_size), long(inputs1_size), int(expanded0.size()),
-            int(expanded1.size()), long(expanded0_size), long(inputs1_size));
-        smallest = new_start;
-        largest = new_limit;
-        c->inputs_[0] = expanded0;
-        c->inputs_[1] = expanded1;
-        GetRange2(c->inputs_[0], c->inputs_[1], &all_start, &all_limit);
-      }
-    }
-  }
-
-  // Compute the set of grandparent files that overlap this compaction
-  // (parent == level+1; grandparent == level+2)
-  if (level + 2 < config::kNumLevels) {
-    current_->GetOverlappingInputs(level + 2, &all_start, &all_limit,
-                                   &c->grandparents_);
-  }
-
-  // Update the place where we will do the next compaction for this level.
-  // We update this immediately instead of waiting for the VersionEdit
-  // to be applied so that if the compaction fails, we will try a different
-  // key range next time.
-  compact_pointer_[level] = largest.Encode().ToString();
-  c->edit_.SetCompactPointer(level, largest);
-}
-
-Compaction* VersionSet::CompactRange(int level, const InternalKey* begin,
-                                     const InternalKey* end) {
-  std::vector<FileMetaData*> inputs;
-  current_->GetOverlappingInputs(level, begin, end, &inputs);
-  if (inputs.empty()) {
-    return nullptr;
-  }
-
-  // Avoid compacting too much in one shot in case the range is large.
-  // But we cannot do this for level-0 since level-0 files can overlap
-  // and we must not pick one file and drop another older file if the
-  // two files overlap.
-  if (level > 0) {
-    const uint64_t limit = MaxFileSizeForLevel(options_, level);
-    uint64_t total = 0;
-    for (size_t i = 0; i < inputs.size(); i++) {
-      uint64_t s = inputs[i]->file_size;
-      total += s;
-      if (total >= limit) {
-        inputs.resize(i + 1);
-        break;
-      }
-    }
-  }
-
-  Compaction* c = new Compaction(options_, level);
-  c->input_version_ = current_;
-  c->input_version_->Ref();
-  c->inputs_[0] = inputs;
-  SetupOtherInputs(c);
-  return c;
-}
-
-Compaction::Compaction(const Options* options, int level)
-    : level_(level),
-      max_output_file_size_(MaxFileSizeForLevel(options, level)),
-      input_version_(nullptr),
-      grandparent_index_(0),
-      seen_key_(false),
-      overlapped_bytes_(0) {
-  for (int i = 0; i < config::kNumLevels; i++) {
-    level_ptrs_[i] = 0;
-  }
-}
-
-Compaction::~Compaction() {
-  if (input_version_ != nullptr) {
-    input_version_->Unref();
-  }
-}
-
-bool Compaction::IsTrivialMove() const {
-  const VersionSet* vset = input_version_->vset_;
-  // Avoid a move if there is lots of overlapping grandparent data.
-  // Otherwise, the move could create a parent file that will require
-  // a very expensive merge later on.
-  return (num_input_files(0) == 1 && num_input_files(1) == 0 &&
-          TotalFileSize(grandparents_) <=
-              MaxGrandParentOverlapBytes(vset->options_));
-}
-
-void Compaction::AddInputDeletions(VersionEdit* edit) {
-  for (int which = 0; which < 2; which++) {
-    for (size_t i = 0; i < inputs_[which].size(); i++) {
-      edit->DeleteFile(level_ + which, inputs_[which][i]->number);
-    }
-  }
-}
-
-bool Compaction::IsBaseLevelForKey(const Slice& user_key) {
-  // Maybe use binary search to find right entry instead of linear search?
-  const Comparator* user_cmp = input_version_->vset_->icmp_.user_comparator();
-  for (int lvl = level_ + 2; lvl < config::kNumLevels; lvl++) {
-    const std::vector<FileMetaData*>& files = input_version_->files_[lvl];
-    for (; level_ptrs_[lvl] < files.size();) {
-      FileMetaData* f = files[level_ptrs_[lvl]];
-      if (user_cmp->Compare(user_key, f->largest.user_key()) <= 0) {
-        // We've advanced far enough
-        if (user_cmp->Compare(user_key, f->smallest.user_key()) >= 0) {
-          // Key falls in this file's range, so definitely not base level
-          return false;
-        }
-        break;
-      }
-      level_ptrs_[lvl]++;
-    }
-  }
-  return true;
-}
-
-bool Compaction::ShouldStopBefore(const Slice& internal_key) {
-  const VersionSet* vset = input_version_->vset_;
-  // Scan to find earliest grandparent file that contains key.
-  const InternalKeyComparator* icmp = &vset->icmp_;
-  while (grandparent_index_ < grandparents_.size() &&
-         icmp->Compare(internal_key,
-                       grandparents_[grandparent_index_]->largest.Encode()) >
-             0) {
-    if (seen_key_) {
-      overlapped_bytes_ += grandparents_[grandparent_index_]->file_size;
-    }
-    grandparent_index_++;
-  }
-  seen_key_ = true;
-
-  if (overlapped_bytes_ > MaxGrandParentOverlapBytes(vset->options_)) {
-    // Too much overlap for current output; start new output
-    overlapped_bytes_ = 0;
-    return true;
-  } else {
-    return false;
-  }
-}
-
-void Compaction::ReleaseInputs() {
-  if (input_version_ != nullptr) {
-    input_version_->Unref();
-    input_version_ = nullptr;
-  }
-}
-
-}  // namespace leveldb
diff --git a/assign5/openTok/Pods/leveldb-library/db/version_set.h b/assign5/openTok/Pods/leveldb-library/db/version_set.h
deleted file mode 100644
index 69f3d70..0000000
--- a/assign5/openTok/Pods/leveldb-library/db/version_set.h
+++ /dev/null
@@ -1,393 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-//
-// The representation of a DBImpl consists of a set of Versions.  The
-// newest version is called "current".  Older versions may be kept
-// around to provide a consistent view to live iterators.
-//
-// Each Version keeps track of a set of Table files per level.  The
-// entire set of versions is maintained in a VersionSet.
-//
-// Version,VersionSet are thread-compatible, but require external
-// synchronization on all accesses.
-
-#ifndef STORAGE_LEVELDB_DB_VERSION_SET_H_
-#define STORAGE_LEVELDB_DB_VERSION_SET_H_
-
-#include <map>
-#include <set>
-#include <vector>
-
-#include "db/dbformat.h"
-#include "db/version_edit.h"
-#include "port/port.h"
-#include "port/thread_annotations.h"
-
-namespace leveldb {
-
-namespace log {
-class Writer;
-}
-
-class Compaction;
-class Iterator;
-class MemTable;
-class TableBuilder;
-class TableCache;
-class Version;
-class VersionSet;
-class WritableFile;
-
-// Return the smallest index i such that files[i]->largest >= key.
-// Return files.size() if there is no such file.
-// REQUIRES: "files" contains a sorted list of non-overlapping files.
-int FindFile(const InternalKeyComparator& icmp,
-             const std::vector<FileMetaData*>& files, const Slice& key);
-
-// Returns true iff some file in "files" overlaps the user key range
-// [*smallest,*largest].
-// smallest==nullptr represents a key smaller than all keys in the DB.
-// largest==nullptr represents a key largest than all keys in the DB.
-// REQUIRES: If disjoint_sorted_files, files[] contains disjoint ranges
-//           in sorted order.
-bool SomeFileOverlapsRange(const InternalKeyComparator& icmp,
-                           bool disjoint_sorted_files,
-                           const std::vector<FileMetaData*>& files,
-                           const Slice* smallest_user_key,
-                           const Slice* largest_user_key);
-
-class Version {
- public:
-  // Lookup the value for key.  If found, store it in *val and
-  // return OK.  Else return a non-OK status.  Fills *stats.
-  // REQUIRES: lock is not held
-  struct GetStats {
-    FileMetaData* seek_file;
-    int seek_file_level;
-  };
-
-  // Append to *iters a sequence of iterators that will
-  // yield the contents of this Version when merged together.
-  // REQUIRES: This version has been saved (see VersionSet::SaveTo)
-  void AddIterators(const ReadOptions&, std::vector<Iterator*>* iters);
-
-  Status Get(const ReadOptions&, const LookupKey& key, std::string* val,
-             GetStats* stats);
-
-  // Adds "stats" into the current state.  Returns true if a new
-  // compaction may need to be triggered, false otherwise.
-  // REQUIRES: lock is held
-  bool UpdateStats(const GetStats& stats);
-
-  // Record a sample of bytes read at the specified internal key.
-  // Samples are taken approximately once every config::kReadBytesPeriod
-  // bytes.  Returns true if a new compaction may need to be triggered.
-  // REQUIRES: lock is held
-  bool RecordReadSample(Slice key);
-
-  // Reference count management (so Versions do not disappear out from
-  // under live iterators)
-  void Ref();
-  void Unref();
-
-  void GetOverlappingInputs(
-      int level,
-      const InternalKey* begin,  // nullptr means before all keys
-      const InternalKey* end,    // nullptr means after all keys
-      std::vector<FileMetaData*>* inputs);
-
-  // Returns true iff some file in the specified level overlaps
-  // some part of [*smallest_user_key,*largest_user_key].
-  // smallest_user_key==nullptr represents a key smaller than all the DB's keys.
-  // largest_user_key==nullptr represents a key largest than all the DB's keys.
-  bool OverlapInLevel(int level, const Slice* smallest_user_key,
-                      const Slice* largest_user_key);
-
-  // Return the level at which we should place a new memtable compaction
-  // result that covers the range [smallest_user_key,largest_user_key].
-  int PickLevelForMemTableOutput(const Slice& smallest_user_key,
-                                 const Slice& largest_user_key);
-
-  int NumFiles(int level) const { return files_[level].size(); }
-
-  // Return a human readable string that describes this version's contents.
-  std::string DebugString() const;
-
- private:
-  friend class Compaction;
-  friend class VersionSet;
-
-  class LevelFileNumIterator;
-
-  explicit Version(VersionSet* vset)
-      : vset_(vset),
-        next_(this),
-        prev_(this),
-        refs_(0),
-        file_to_compact_(nullptr),
-        file_to_compact_level_(-1),
-        compaction_score_(-1),
-        compaction_level_(-1) {}
-
-  Version(const Version&) = delete;
-  Version& operator=(const Version&) = delete;
-
-  ~Version();
-
-  Iterator* NewConcatenatingIterator(const ReadOptions&, int level) const;
-
-  // Call func(arg, level, f) for every file that overlaps user_key in
-  // order from newest to oldest.  If an invocation of func returns
-  // false, makes no more calls.
-  //
-  // REQUIRES: user portion of internal_key == user_key.
-  void ForEachOverlapping(Slice user_key, Slice internal_key, void* arg,
-                          bool (*func)(void*, int, FileMetaData*));
-
-  VersionSet* vset_;  // VersionSet to which this Version belongs
-  Version* next_;     // Next version in linked list
-  Version* prev_;     // Previous version in linked list
-  int refs_;          // Number of live refs to this version
-
-  // List of files per level
-  std::vector<FileMetaData*> files_[config::kNumLevels];
-
-  // Next file to compact based on seek stats.
-  FileMetaData* file_to_compact_;
-  int file_to_compact_level_;
-
-  // Level that should be compacted next and its compaction score.
-  // Score < 1 means compaction is not strictly needed.  These fields
-  // are initialized by Finalize().
-  double compaction_score_;
-  int compaction_level_;
-};
-
-class VersionSet {
- public:
-  VersionSet(const std::string& dbname, const Options* options,
-             TableCache* table_cache, const InternalKeyComparator*);
-  VersionSet(const VersionSet&) = delete;
-  VersionSet& operator=(const VersionSet&) = delete;
-
-  ~VersionSet();
-
-  // Apply *edit to the current version to form a new descriptor that
-  // is both saved to persistent state and installed as the new
-  // current version.  Will release *mu while actually writing to the file.
-  // REQUIRES: *mu is held on entry.
-  // REQUIRES: no other thread concurrently calls LogAndApply()
-  Status LogAndApply(VersionEdit* edit, port::Mutex* mu)
-      EXCLUSIVE_LOCKS_REQUIRED(mu);
-
-  // Recover the last saved descriptor from persistent storage.
-  Status Recover(bool* save_manifest);
-
-  // Return the current version.
-  Version* current() const { return current_; }
-
-  // Return the current manifest file number
-  uint64_t ManifestFileNumber() const { return manifest_file_number_; }
-
-  // Allocate and return a new file number
-  uint64_t NewFileNumber() { return next_file_number_++; }
-
-  // Arrange to reuse "file_number" unless a newer file number has
-  // already been allocated.
-  // REQUIRES: "file_number" was returned by a call to NewFileNumber().
-  void ReuseFileNumber(uint64_t file_number) {
-    if (next_file_number_ == file_number + 1) {
-      next_file_number_ = file_number;
-    }
-  }
-
-  // Return the number of Table files at the specified level.
-  int NumLevelFiles(int level) const;
-
-  // Return the combined file size of all files at the specified level.
-  int64_t NumLevelBytes(int level) const;
-
-  // Return the last sequence number.
-  uint64_t LastSequence() const { return last_sequence_; }
-
-  // Set the last sequence number to s.
-  void SetLastSequence(uint64_t s) {
-    assert(s >= last_sequence_);
-    last_sequence_ = s;
-  }
-
-  // Mark the specified file number as used.
-  void MarkFileNumberUsed(uint64_t number);
-
-  // Return the current log file number.
-  uint64_t LogNumber() const { return log_number_; }
-
-  // Return the log file number for the log file that is currently
-  // being compacted, or zero if there is no such log file.
-  uint64_t PrevLogNumber() const { return prev_log_number_; }
-
-  // Pick level and inputs for a new compaction.
-  // Returns nullptr if there is no compaction to be done.
-  // Otherwise returns a pointer to a heap-allocated object that
-  // describes the compaction.  Caller should delete the result.
-  Compaction* PickCompaction();
-
-  // Return a compaction object for compacting the range [begin,end] in
-  // the specified level.  Returns nullptr if there is nothing in that
-  // level that overlaps the specified range.  Caller should delete
-  // the result.
-  Compaction* CompactRange(int level, const InternalKey* begin,
-                           const InternalKey* end);
-
-  // Return the maximum overlapping data (in bytes) at next level for any
-  // file at a level >= 1.
-  int64_t MaxNextLevelOverlappingBytes();
-
-  // Create an iterator that reads over the compaction inputs for "*c".
-  // The caller should delete the iterator when no longer needed.
-  Iterator* MakeInputIterator(Compaction* c);
-
-  // Returns true iff some level needs a compaction.
-  bool NeedsCompaction() const {
-    Version* v = current_;
-    return (v->compaction_score_ >= 1) || (v->file_to_compact_ != nullptr);
-  }
-
-  // Add all files listed in any live version to *live.
-  // May also mutate some internal state.
-  void AddLiveFiles(std::set<uint64_t>* live);
-
-  // Return the approximate offset in the database of the data for
-  // "key" as of version "v".
-  uint64_t ApproximateOffsetOf(Version* v, const InternalKey& key);
-
-  // Return a human-readable short (single-line) summary of the number
-  // of files per level.  Uses *scratch as backing store.
-  struct LevelSummaryStorage {
-    char buffer[100];
-  };
-  const char* LevelSummary(LevelSummaryStorage* scratch) const;
-
- private:
-  class Builder;
-
-  friend class Compaction;
-  friend class Version;
-
-  bool ReuseManifest(const std::string& dscname, const std::string& dscbase);
-
-  void Finalize(Version* v);
-
-  void GetRange(const std::vector<FileMetaData*>& inputs, InternalKey* smallest,
-                InternalKey* largest);
-
-  void GetRange2(const std::vector<FileMetaData*>& inputs1,
-                 const std::vector<FileMetaData*>& inputs2,
-                 InternalKey* smallest, InternalKey* largest);
-
-  void SetupOtherInputs(Compaction* c);
-
-  // Save current contents to *log
-  Status WriteSnapshot(log::Writer* log);
-
-  void AppendVersion(Version* v);
-
-  Env* const env_;
-  const std::string dbname_;
-  const Options* const options_;
-  TableCache* const table_cache_;
-  const InternalKeyComparator icmp_;
-  uint64_t next_file_number_;
-  uint64_t manifest_file_number_;
-  uint64_t last_sequence_;
-  uint64_t log_number_;
-  uint64_t prev_log_number_;  // 0 or backing store for memtable being compacted
-
-  // Opened lazily
-  WritableFile* descriptor_file_;
-  log::Writer* descriptor_log_;
-  Version dummy_versions_;  // Head of circular doubly-linked list of versions.
-  Version* current_;        // == dummy_versions_.prev_
-
-  // Per-level key at which the next compaction at that level should start.
-  // Either an empty string, or a valid InternalKey.
-  std::string compact_pointer_[config::kNumLevels];
-};
-
-// A Compaction encapsulates information about a compaction.
-class Compaction {
- public:
-  ~Compaction();
-
-  // Return the level that is being compacted.  Inputs from "level"
-  // and "level+1" will be merged to produce a set of "level+1" files.
-  int level() const { return level_; }
-
-  // Return the object that holds the edits to the descriptor done
-  // by this compaction.
-  VersionEdit* edit() { return &edit_; }
-
-  // "which" must be either 0 or 1
-  int num_input_files(int which) const { return inputs_[which].size(); }
-
-  // Return the ith input file at "level()+which" ("which" must be 0 or 1).
-  FileMetaData* input(int which, int i) const { return inputs_[which][i]; }
-
-  // Maximum size of files to build during this compaction.
-  uint64_t MaxOutputFileSize() const { return max_output_file_size_; }
-
-  // Is this a trivial compaction that can be implemented by just
-  // moving a single input file to the next level (no merging or splitting)
-  bool IsTrivialMove() const;
-
-  // Add all inputs to this compaction as delete operations to *edit.
-  void AddInputDeletions(VersionEdit* edit);
-
-  // Returns true if the information we have available guarantees that
-  // the compaction is producing data in "level+1" for which no data exists
-  // in levels greater than "level+1".
-  bool IsBaseLevelForKey(const Slice& user_key);
-
-  // Returns true iff we should stop building the current output
-  // before processing "internal_key".
-  bool ShouldStopBefore(const Slice& internal_key);
-
-  // Release the input version for the compaction, once the compaction
-  // is successful.
-  void ReleaseInputs();
-
- private:
-  friend class Version;
-  friend class VersionSet;
-
-  Compaction(const Options* options, int level);
-
-  int level_;
-  uint64_t max_output_file_size_;
-  Version* input_version_;
-  VersionEdit edit_;
-
-  // Each compaction reads inputs from "level_" and "level_+1"
-  std::vector<FileMetaData*> inputs_[2];  // The two sets of inputs
-
-  // State used to check for number of overlapping grandparent files
-  // (parent == level_ + 1, grandparent == level_ + 2)
-  std::vector<FileMetaData*> grandparents_;
-  size_t grandparent_index_;  // Index in grandparent_starts_
-  bool seen_key_;             // Some output key has been seen
-  int64_t overlapped_bytes_;  // Bytes of overlap between current output
-                              // and grandparent files
-
-  // State for implementing IsBaseLevelForKey
-
-  // level_ptrs_ holds indices into input_version_->levels_: our state
-  // is that we are positioned at one of the file ranges for each
-  // higher level than the ones involved in this compaction (i.e. for
-  // all L >= level_ + 2).
-  size_t level_ptrs_[config::kNumLevels];
-};
-
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_DB_VERSION_SET_H_
diff --git a/assign5/openTok/Pods/leveldb-library/db/write_batch.cc b/assign5/openTok/Pods/leveldb-library/db/write_batch.cc
deleted file mode 100644
index 2dec642..0000000
--- a/assign5/openTok/Pods/leveldb-library/db/write_batch.cc
+++ /dev/null
@@ -1,150 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-//
-// WriteBatch::rep_ :=
-//    sequence: fixed64
-//    count: fixed32
-//    data: record[count]
-// record :=
-//    kTypeValue varstring varstring         |
-//    kTypeDeletion varstring
-// varstring :=
-//    len: varint32
-//    data: uint8[len]
-
-#include "leveldb/write_batch.h"
-
-#include "db/dbformat.h"
-#include "db/memtable.h"
-#include "db/write_batch_internal.h"
-#include "leveldb/db.h"
-#include "util/coding.h"
-
-namespace leveldb {
-
-// WriteBatch header has an 8-byte sequence number followed by a 4-byte count.
-static const size_t kHeader = 12;
-
-WriteBatch::WriteBatch() { Clear(); }
-
-WriteBatch::~WriteBatch() {}
-
-WriteBatch::Handler::~Handler() {}
-
-void WriteBatch::Clear() {
-  rep_.clear();
-  rep_.resize(kHeader);
-}
-
-size_t WriteBatch::ApproximateSize() const { return rep_.size(); }
-
-Status WriteBatch::Iterate(Handler* handler) const {
-  Slice input(rep_);
-  if (input.size() < kHeader) {
-    return Status::Corruption("malformed WriteBatch (too small)");
-  }
-
-  input.remove_prefix(kHeader);
-  Slice key, value;
-  int found = 0;
-  while (!input.empty()) {
-    found++;
-    char tag = input[0];
-    input.remove_prefix(1);
-    switch (tag) {
-      case kTypeValue:
-        if (GetLengthPrefixedSlice(&input, &key) &&
-            GetLengthPrefixedSlice(&input, &value)) {
-          handler->Put(key, value);
-        } else {
-          return Status::Corruption("bad WriteBatch Put");
-        }
-        break;
-      case kTypeDeletion:
-        if (GetLengthPrefixedSlice(&input, &key)) {
-          handler->Delete(key);
-        } else {
-          return Status::Corruption("bad WriteBatch Delete");
-        }
-        break;
-      default:
-        return Status::Corruption("unknown WriteBatch tag");
-    }
-  }
-  if (found != WriteBatchInternal::Count(this)) {
-    return Status::Corruption("WriteBatch has wrong count");
-  } else {
-    return Status::OK();
-  }
-}
-
-int WriteBatchInternal::Count(const WriteBatch* b) {
-  return DecodeFixed32(b->rep_.data() + 8);
-}
-
-void WriteBatchInternal::SetCount(WriteBatch* b, int n) {
-  EncodeFixed32(&b->rep_[8], n);
-}
-
-SequenceNumber WriteBatchInternal::Sequence(const WriteBatch* b) {
-  return SequenceNumber(DecodeFixed64(b->rep_.data()));
-}
-
-void WriteBatchInternal::SetSequence(WriteBatch* b, SequenceNumber seq) {
-  EncodeFixed64(&b->rep_[0], seq);
-}
-
-void WriteBatch::Put(const Slice& key, const Slice& value) {
-  WriteBatchInternal::SetCount(this, WriteBatchInternal::Count(this) + 1);
-  rep_.push_back(static_cast<char>(kTypeValue));
-  PutLengthPrefixedSlice(&rep_, key);
-  PutLengthPrefixedSlice(&rep_, value);
-}
-
-void WriteBatch::Delete(const Slice& key) {
-  WriteBatchInternal::SetCount(this, WriteBatchInternal::Count(this) + 1);
-  rep_.push_back(static_cast<char>(kTypeDeletion));
-  PutLengthPrefixedSlice(&rep_, key);
-}
-
-void WriteBatch::Append(const WriteBatch& source) {
-  WriteBatchInternal::Append(this, &source);
-}
-
-namespace {
-class MemTableInserter : public WriteBatch::Handler {
- public:
-  SequenceNumber sequence_;
-  MemTable* mem_;
-
-  virtual void Put(const Slice& key, const Slice& value) {
-    mem_->Add(sequence_, kTypeValue, key, value);
-    sequence_++;
-  }
-  virtual void Delete(const Slice& key) {
-    mem_->Add(sequence_, kTypeDeletion, key, Slice());
-    sequence_++;
-  }
-};
-}  // namespace
-
-Status WriteBatchInternal::InsertInto(const WriteBatch* b, MemTable* memtable) {
-  MemTableInserter inserter;
-  inserter.sequence_ = WriteBatchInternal::Sequence(b);
-  inserter.mem_ = memtable;
-  return b->Iterate(&inserter);
-}
-
-void WriteBatchInternal::SetContents(WriteBatch* b, const Slice& contents) {
-  assert(contents.size() >= kHeader);
-  b->rep_.assign(contents.data(), contents.size());
-}
-
-void WriteBatchInternal::Append(WriteBatch* dst, const WriteBatch* src) {
-  SetCount(dst, Count(dst) + Count(src));
-  assert(src->rep_.size() >= kHeader);
-  dst->rep_.append(src->rep_.data() + kHeader, src->rep_.size() - kHeader);
-}
-
-}  // namespace leveldb
diff --git a/assign5/openTok/Pods/leveldb-library/db/write_batch_internal.h b/assign5/openTok/Pods/leveldb-library/db/write_batch_internal.h
deleted file mode 100644
index fce86e3..0000000
--- a/assign5/openTok/Pods/leveldb-library/db/write_batch_internal.h
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#ifndef STORAGE_LEVELDB_DB_WRITE_BATCH_INTERNAL_H_
-#define STORAGE_LEVELDB_DB_WRITE_BATCH_INTERNAL_H_
-
-#include "db/dbformat.h"
-#include "leveldb/write_batch.h"
-
-namespace leveldb {
-
-class MemTable;
-
-// WriteBatchInternal provides static methods for manipulating a
-// WriteBatch that we don't want in the public WriteBatch interface.
-class WriteBatchInternal {
- public:
-  // Return the number of entries in the batch.
-  static int Count(const WriteBatch* batch);
-
-  // Set the count for the number of entries in the batch.
-  static void SetCount(WriteBatch* batch, int n);
-
-  // Return the sequence number for the start of this batch.
-  static SequenceNumber Sequence(const WriteBatch* batch);
-
-  // Store the specified number as the sequence number for the start of
-  // this batch.
-  static void SetSequence(WriteBatch* batch, SequenceNumber seq);
-
-  static Slice Contents(const WriteBatch* batch) { return Slice(batch->rep_); }
-
-  static size_t ByteSize(const WriteBatch* batch) { return batch->rep_.size(); }
-
-  static void SetContents(WriteBatch* batch, const Slice& contents);
-
-  static Status InsertInto(const WriteBatch* batch, MemTable* memtable);
-
-  static void Append(WriteBatch* dst, const WriteBatch* src);
-};
-
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_DB_WRITE_BATCH_INTERNAL_H_
diff --git a/assign5/openTok/Pods/leveldb-library/include/leveldb/c.h b/assign5/openTok/Pods/leveldb-library/include/leveldb/c.h
deleted file mode 100644
index 8e0d592..0000000
--- a/assign5/openTok/Pods/leveldb-library/include/leveldb/c.h
+++ /dev/null
@@ -1,270 +0,0 @@
-/* Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-  Use of this source code is governed by a BSD-style license that can be
-  found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-  C bindings for leveldb.  May be useful as a stable ABI that can be
-  used by programs that keep leveldb in a shared library, or for
-  a JNI api.
-
-  Does not support:
-  . getters for the option types
-  . custom comparators that implement key shortening
-  . custom iter, db, env, cache implementations using just the C bindings
-
-  Some conventions:
-
-  (1) We expose just opaque struct pointers and functions to clients.
-  This allows us to change internal representations without having to
-  recompile clients.
-
-  (2) For simplicity, there is no equivalent to the Slice type.  Instead,
-  the caller has to pass the pointer and length as separate
-  arguments.
-
-  (3) Errors are represented by a null-terminated c string.  NULL
-  means no error.  All operations that can raise an error are passed
-  a "char** errptr" as the last argument.  One of the following must
-  be true on entry:
-     *errptr == NULL
-     *errptr points to a malloc()ed null-terminated error message
-       (On Windows, *errptr must have been malloc()-ed by this library.)
-  On success, a leveldb routine leaves *errptr unchanged.
-  On failure, leveldb frees the old value of *errptr and
-  set *errptr to a malloc()ed error message.
-
-  (4) Bools have the type unsigned char (0 == false; rest == true)
-
-  (5) All of the pointer arguments must be non-NULL.
-*/
-
-#ifndef STORAGE_LEVELDB_INCLUDE_C_H_
-#define STORAGE_LEVELDB_INCLUDE_C_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdint.h>
-
-#include "leveldb/export.h"
-
-/* Exported types */
-
-typedef struct leveldb_t leveldb_t;
-typedef struct leveldb_cache_t leveldb_cache_t;
-typedef struct leveldb_comparator_t leveldb_comparator_t;
-typedef struct leveldb_env_t leveldb_env_t;
-typedef struct leveldb_filelock_t leveldb_filelock_t;
-typedef struct leveldb_filterpolicy_t leveldb_filterpolicy_t;
-typedef struct leveldb_iterator_t leveldb_iterator_t;
-typedef struct leveldb_logger_t leveldb_logger_t;
-typedef struct leveldb_options_t leveldb_options_t;
-typedef struct leveldb_randomfile_t leveldb_randomfile_t;
-typedef struct leveldb_readoptions_t leveldb_readoptions_t;
-typedef struct leveldb_seqfile_t leveldb_seqfile_t;
-typedef struct leveldb_snapshot_t leveldb_snapshot_t;
-typedef struct leveldb_writablefile_t leveldb_writablefile_t;
-typedef struct leveldb_writebatch_t leveldb_writebatch_t;
-typedef struct leveldb_writeoptions_t leveldb_writeoptions_t;
-
-/* DB operations */
-
-LEVELDB_EXPORT leveldb_t* leveldb_open(const leveldb_options_t* options,
-                                       const char* name, char** errptr);
-
-LEVELDB_EXPORT void leveldb_close(leveldb_t* db);
-
-LEVELDB_EXPORT void leveldb_put(leveldb_t* db,
-                                const leveldb_writeoptions_t* options,
-                                const char* key, size_t keylen, const char* val,
-                                size_t vallen, char** errptr);
-
-LEVELDB_EXPORT void leveldb_delete(leveldb_t* db,
-                                   const leveldb_writeoptions_t* options,
-                                   const char* key, size_t keylen,
-                                   char** errptr);
-
-LEVELDB_EXPORT void leveldb_write(leveldb_t* db,
-                                  const leveldb_writeoptions_t* options,
-                                  leveldb_writebatch_t* batch, char** errptr);
-
-/* Returns NULL if not found.  A malloc()ed array otherwise.
-   Stores the length of the array in *vallen. */
-LEVELDB_EXPORT char* leveldb_get(leveldb_t* db,
-                                 const leveldb_readoptions_t* options,
-                                 const char* key, size_t keylen, size_t* vallen,
-                                 char** errptr);
-
-LEVELDB_EXPORT leveldb_iterator_t* leveldb_create_iterator(
-    leveldb_t* db, const leveldb_readoptions_t* options);
-
-LEVELDB_EXPORT const leveldb_snapshot_t* leveldb_create_snapshot(leveldb_t* db);
-
-LEVELDB_EXPORT void leveldb_release_snapshot(
-    leveldb_t* db, const leveldb_snapshot_t* snapshot);
-
-/* Returns NULL if property name is unknown.
-   Else returns a pointer to a malloc()-ed null-terminated value. */
-LEVELDB_EXPORT char* leveldb_property_value(leveldb_t* db,
-                                            const char* propname);
-
-LEVELDB_EXPORT void leveldb_approximate_sizes(
-    leveldb_t* db, int num_ranges, const char* const* range_start_key,
-    const size_t* range_start_key_len, const char* const* range_limit_key,
-    const size_t* range_limit_key_len, uint64_t* sizes);
-
-LEVELDB_EXPORT void leveldb_compact_range(leveldb_t* db, const char* start_key,
-                                          size_t start_key_len,
-                                          const char* limit_key,
-                                          size_t limit_key_len);
-
-/* Management operations */
-
-LEVELDB_EXPORT void leveldb_destroy_db(const leveldb_options_t* options,
-                                       const char* name, char** errptr);
-
-LEVELDB_EXPORT void leveldb_repair_db(const leveldb_options_t* options,
-                                      const char* name, char** errptr);
-
-/* Iterator */
-
-LEVELDB_EXPORT void leveldb_iter_destroy(leveldb_iterator_t*);
-LEVELDB_EXPORT unsigned char leveldb_iter_valid(const leveldb_iterator_t*);
-LEVELDB_EXPORT void leveldb_iter_seek_to_first(leveldb_iterator_t*);
-LEVELDB_EXPORT void leveldb_iter_seek_to_last(leveldb_iterator_t*);
-LEVELDB_EXPORT void leveldb_iter_seek(leveldb_iterator_t*, const char* k,
-                                      size_t klen);
-LEVELDB_EXPORT void leveldb_iter_next(leveldb_iterator_t*);
-LEVELDB_EXPORT void leveldb_iter_prev(leveldb_iterator_t*);
-LEVELDB_EXPORT const char* leveldb_iter_key(const leveldb_iterator_t*,
-                                            size_t* klen);
-LEVELDB_EXPORT const char* leveldb_iter_value(const leveldb_iterator_t*,
-                                              size_t* vlen);
-LEVELDB_EXPORT void leveldb_iter_get_error(const leveldb_iterator_t*,
-                                           char** errptr);
-
-/* Write batch */
-
-LEVELDB_EXPORT leveldb_writebatch_t* leveldb_writebatch_create();
-LEVELDB_EXPORT void leveldb_writebatch_destroy(leveldb_writebatch_t*);
-LEVELDB_EXPORT void leveldb_writebatch_clear(leveldb_writebatch_t*);
-LEVELDB_EXPORT void leveldb_writebatch_put(leveldb_writebatch_t*,
-                                           const char* key, size_t klen,
-                                           const char* val, size_t vlen);
-LEVELDB_EXPORT void leveldb_writebatch_delete(leveldb_writebatch_t*,
-                                              const char* key, size_t klen);
-LEVELDB_EXPORT void leveldb_writebatch_iterate(
-    const leveldb_writebatch_t*, void* state,
-    void (*put)(void*, const char* k, size_t klen, const char* v, size_t vlen),
-    void (*deleted)(void*, const char* k, size_t klen));
-LEVELDB_EXPORT void leveldb_writebatch_append(
-    leveldb_writebatch_t* destination, const leveldb_writebatch_t* source);
-
-/* Options */
-
-LEVELDB_EXPORT leveldb_options_t* leveldb_options_create();
-LEVELDB_EXPORT void leveldb_options_destroy(leveldb_options_t*);
-LEVELDB_EXPORT void leveldb_options_set_comparator(leveldb_options_t*,
-                                                   leveldb_comparator_t*);
-LEVELDB_EXPORT void leveldb_options_set_filter_policy(leveldb_options_t*,
-                                                      leveldb_filterpolicy_t*);
-LEVELDB_EXPORT void leveldb_options_set_create_if_missing(leveldb_options_t*,
-                                                          unsigned char);
-LEVELDB_EXPORT void leveldb_options_set_error_if_exists(leveldb_options_t*,
-                                                        unsigned char);
-LEVELDB_EXPORT void leveldb_options_set_paranoid_checks(leveldb_options_t*,
-                                                        unsigned char);
-LEVELDB_EXPORT void leveldb_options_set_env(leveldb_options_t*, leveldb_env_t*);
-LEVELDB_EXPORT void leveldb_options_set_info_log(leveldb_options_t*,
-                                                 leveldb_logger_t*);
-LEVELDB_EXPORT void leveldb_options_set_write_buffer_size(leveldb_options_t*,
-                                                          size_t);
-LEVELDB_EXPORT void leveldb_options_set_max_open_files(leveldb_options_t*, int);
-LEVELDB_EXPORT void leveldb_options_set_cache(leveldb_options_t*,
-                                              leveldb_cache_t*);
-LEVELDB_EXPORT void leveldb_options_set_block_size(leveldb_options_t*, size_t);
-LEVELDB_EXPORT void leveldb_options_set_block_restart_interval(
-    leveldb_options_t*, int);
-LEVELDB_EXPORT void leveldb_options_set_max_file_size(leveldb_options_t*,
-                                                      size_t);
-
-enum { leveldb_no_compression = 0, leveldb_snappy_compression = 1 };
-LEVELDB_EXPORT void leveldb_options_set_compression(leveldb_options_t*, int);
-
-/* Comparator */
-
-LEVELDB_EXPORT leveldb_comparator_t* leveldb_comparator_create(
-    void* state, void (*destructor)(void*),
-    int (*compare)(void*, const char* a, size_t alen, const char* b,
-                   size_t blen),
-    const char* (*name)(void*));
-LEVELDB_EXPORT void leveldb_comparator_destroy(leveldb_comparator_t*);
-
-/* Filter policy */
-
-LEVELDB_EXPORT leveldb_filterpolicy_t* leveldb_filterpolicy_create(
-    void* state, void (*destructor)(void*),
-    char* (*create_filter)(void*, const char* const* key_array,
-                           const size_t* key_length_array, int num_keys,
-                           size_t* filter_length),
-    unsigned char (*key_may_match)(void*, const char* key, size_t length,
-                                   const char* filter, size_t filter_length),
-    const char* (*name)(void*));
-LEVELDB_EXPORT void leveldb_filterpolicy_destroy(leveldb_filterpolicy_t*);
-
-LEVELDB_EXPORT leveldb_filterpolicy_t* leveldb_filterpolicy_create_bloom(
-    int bits_per_key);
-
-/* Read options */
-
-LEVELDB_EXPORT leveldb_readoptions_t* leveldb_readoptions_create();
-LEVELDB_EXPORT void leveldb_readoptions_destroy(leveldb_readoptions_t*);
-LEVELDB_EXPORT void leveldb_readoptions_set_verify_checksums(
-    leveldb_readoptions_t*, unsigned char);
-LEVELDB_EXPORT void leveldb_readoptions_set_fill_cache(leveldb_readoptions_t*,
-                                                       unsigned char);
-LEVELDB_EXPORT void leveldb_readoptions_set_snapshot(leveldb_readoptions_t*,
-                                                     const leveldb_snapshot_t*);
-
-/* Write options */
-
-LEVELDB_EXPORT leveldb_writeoptions_t* leveldb_writeoptions_create();
-LEVELDB_EXPORT void leveldb_writeoptions_destroy(leveldb_writeoptions_t*);
-LEVELDB_EXPORT void leveldb_writeoptions_set_sync(leveldb_writeoptions_t*,
-                                                  unsigned char);
-
-/* Cache */
-
-LEVELDB_EXPORT leveldb_cache_t* leveldb_cache_create_lru(size_t capacity);
-LEVELDB_EXPORT void leveldb_cache_destroy(leveldb_cache_t* cache);
-
-/* Env */
-
-LEVELDB_EXPORT leveldb_env_t* leveldb_create_default_env();
-LEVELDB_EXPORT void leveldb_env_destroy(leveldb_env_t*);
-
-/* If not NULL, the returned buffer must be released using leveldb_free(). */
-LEVELDB_EXPORT char* leveldb_env_get_test_directory(leveldb_env_t*);
-
-/* Utility */
-
-/* Calls free(ptr).
-   REQUIRES: ptr was malloc()-ed and returned by one of the routines
-   in this file.  Note that in certain cases (typically on Windows), you
-   may need to call this routine instead of free(ptr) to dispose of
-   malloc()-ed memory returned by this library. */
-LEVELDB_EXPORT void leveldb_free(void* ptr);
-
-/* Return the major version number for this release. */
-LEVELDB_EXPORT int leveldb_major_version();
-
-/* Return the minor version number for this release. */
-LEVELDB_EXPORT int leveldb_minor_version();
-
-#ifdef __cplusplus
-} /* end extern "C" */
-#endif
-
-#endif /* STORAGE_LEVELDB_INCLUDE_C_H_ */
diff --git a/assign5/openTok/Pods/leveldb-library/include/leveldb/cache.h b/assign5/openTok/Pods/leveldb-library/include/leveldb/cache.h
deleted file mode 100644
index 7d1a221..0000000
--- a/assign5/openTok/Pods/leveldb-library/include/leveldb/cache.h
+++ /dev/null
@@ -1,111 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-//
-// A Cache is an interface that maps keys to values.  It has internal
-// synchronization and may be safely accessed concurrently from
-// multiple threads.  It may automatically evict entries to make room
-// for new entries.  Values have a specified charge against the cache
-// capacity.  For example, a cache where the values are variable
-// length strings, may use the length of the string as the charge for
-// the string.
-//
-// A builtin cache implementation with a least-recently-used eviction
-// policy is provided.  Clients may use their own implementations if
-// they want something more sophisticated (like scan-resistance, a
-// custom eviction policy, variable cache sizing, etc.)
-
-#ifndef STORAGE_LEVELDB_INCLUDE_CACHE_H_
-#define STORAGE_LEVELDB_INCLUDE_CACHE_H_
-
-#include <stdint.h>
-
-#include "leveldb/export.h"
-#include "leveldb/slice.h"
-
-namespace leveldb {
-
-class LEVELDB_EXPORT Cache;
-
-// Create a new cache with a fixed size capacity.  This implementation
-// of Cache uses a least-recently-used eviction policy.
-LEVELDB_EXPORT Cache* NewLRUCache(size_t capacity);
-
-class LEVELDB_EXPORT Cache {
- public:
-  Cache() = default;
-
-  Cache(const Cache&) = delete;
-  Cache& operator=(const Cache&) = delete;
-
-  // Destroys all existing entries by calling the "deleter"
-  // function that was passed to the constructor.
-  virtual ~Cache();
-
-  // Opaque handle to an entry stored in the cache.
-  struct Handle {};
-
-  // Insert a mapping from key->value into the cache and assign it
-  // the specified charge against the total cache capacity.
-  //
-  // Returns a handle that corresponds to the mapping.  The caller
-  // must call this->Release(handle) when the returned mapping is no
-  // longer needed.
-  //
-  // When the inserted entry is no longer needed, the key and
-  // value will be passed to "deleter".
-  virtual Handle* Insert(const Slice& key, void* value, size_t charge,
-                         void (*deleter)(const Slice& key, void* value)) = 0;
-
-  // If the cache has no mapping for "key", returns nullptr.
-  //
-  // Else return a handle that corresponds to the mapping.  The caller
-  // must call this->Release(handle) when the returned mapping is no
-  // longer needed.
-  virtual Handle* Lookup(const Slice& key) = 0;
-
-  // Release a mapping returned by a previous Lookup().
-  // REQUIRES: handle must not have been released yet.
-  // REQUIRES: handle must have been returned by a method on *this.
-  virtual void Release(Handle* handle) = 0;
-
-  // Return the value encapsulated in a handle returned by a
-  // successful Lookup().
-  // REQUIRES: handle must not have been released yet.
-  // REQUIRES: handle must have been returned by a method on *this.
-  virtual void* Value(Handle* handle) = 0;
-
-  // If the cache contains entry for key, erase it.  Note that the
-  // underlying entry will be kept around until all existing handles
-  // to it have been released.
-  virtual void Erase(const Slice& key) = 0;
-
-  // Return a new numeric id.  May be used by multiple clients who are
-  // sharing the same cache to partition the key space.  Typically the
-  // client will allocate a new id at startup and prepend the id to
-  // its cache keys.
-  virtual uint64_t NewId() = 0;
-
-  // Remove all cache entries that are not actively in use.  Memory-constrained
-  // applications may wish to call this method to reduce memory usage.
-  // Default implementation of Prune() does nothing.  Subclasses are strongly
-  // encouraged to override the default implementation.  A future release of
-  // leveldb may change Prune() to a pure abstract method.
-  virtual void Prune() {}
-
-  // Return an estimate of the combined charges of all elements stored in the
-  // cache.
-  virtual size_t TotalCharge() const = 0;
-
- private:
-  void LRU_Remove(Handle* e);
-  void LRU_Append(Handle* e);
-  void Unref(Handle* e);
-
-  struct Rep;
-  Rep* rep_;
-};
-
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_INCLUDE_CACHE_H_
diff --git a/assign5/openTok/Pods/leveldb-library/include/leveldb/comparator.h b/assign5/openTok/Pods/leveldb-library/include/leveldb/comparator.h
deleted file mode 100644
index a85b51e..0000000
--- a/assign5/openTok/Pods/leveldb-library/include/leveldb/comparator.h
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#ifndef STORAGE_LEVELDB_INCLUDE_COMPARATOR_H_
-#define STORAGE_LEVELDB_INCLUDE_COMPARATOR_H_
-
-#include <string>
-
-#include "leveldb/export.h"
-
-namespace leveldb {
-
-class Slice;
-
-// A Comparator object provides a total order across slices that are
-// used as keys in an sstable or a database.  A Comparator implementation
-// must be thread-safe since leveldb may invoke its methods concurrently
-// from multiple threads.
-class LEVELDB_EXPORT Comparator {
- public:
-  virtual ~Comparator();
-
-  // Three-way comparison.  Returns value:
-  //   < 0 iff "a" < "b",
-  //   == 0 iff "a" == "b",
-  //   > 0 iff "a" > "b"
-  virtual int Compare(const Slice& a, const Slice& b) const = 0;
-
-  // The name of the comparator.  Used to check for comparator
-  // mismatches (i.e., a DB created with one comparator is
-  // accessed using a different comparator.
-  //
-  // The client of this package should switch to a new name whenever
-  // the comparator implementation changes in a way that will cause
-  // the relative ordering of any two keys to change.
-  //
-  // Names starting with "leveldb." are reserved and should not be used
-  // by any clients of this package.
-  virtual const char* Name() const = 0;
-
-  // Advanced functions: these are used to reduce the space requirements
-  // for internal data structures like index blocks.
-
-  // If *start < limit, changes *start to a short string in [start,limit).
-  // Simple comparator implementations may return with *start unchanged,
-  // i.e., an implementation of this method that does nothing is correct.
-  virtual void FindShortestSeparator(std::string* start,
-                                     const Slice& limit) const = 0;
-
-  // Changes *key to a short string >= *key.
-  // Simple comparator implementations may return with *key unchanged,
-  // i.e., an implementation of this method that does nothing is correct.
-  virtual void FindShortSuccessor(std::string* key) const = 0;
-};
-
-// Return a builtin comparator that uses lexicographic byte-wise
-// ordering.  The result remains the property of this module and
-// must not be deleted.
-LEVELDB_EXPORT const Comparator* BytewiseComparator();
-
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_INCLUDE_COMPARATOR_H_
diff --git a/assign5/openTok/Pods/leveldb-library/include/leveldb/db.h b/assign5/openTok/Pods/leveldb-library/include/leveldb/db.h
deleted file mode 100644
index ea3d9e5..0000000
--- a/assign5/openTok/Pods/leveldb-library/include/leveldb/db.h
+++ /dev/null
@@ -1,167 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#ifndef STORAGE_LEVELDB_INCLUDE_DB_H_
-#define STORAGE_LEVELDB_INCLUDE_DB_H_
-
-#include <stdint.h>
-#include <stdio.h>
-
-#include "leveldb/export.h"
-#include "leveldb/iterator.h"
-#include "leveldb/options.h"
-
-namespace leveldb {
-
-// Update CMakeLists.txt if you change these
-static const int kMajorVersion = 1;
-static const int kMinorVersion = 22;
-
-struct Options;
-struct ReadOptions;
-struct WriteOptions;
-class WriteBatch;
-
-// Abstract handle to particular state of a DB.
-// A Snapshot is an immutable object and can therefore be safely
-// accessed from multiple threads without any external synchronization.
-class LEVELDB_EXPORT Snapshot {
- protected:
-  virtual ~Snapshot();
-};
-
-// A range of keys
-struct LEVELDB_EXPORT Range {
-  Range() {}
-  Range(const Slice& s, const Slice& l) : start(s), limit(l) {}
-
-  Slice start;  // Included in the range
-  Slice limit;  // Not included in the range
-};
-
-// A DB is a persistent ordered map from keys to values.
-// A DB is safe for concurrent access from multiple threads without
-// any external synchronization.
-class LEVELDB_EXPORT DB {
- public:
-  // Open the database with the specified "name".
-  // Stores a pointer to a heap-allocated database in *dbptr and returns
-  // OK on success.
-  // Stores nullptr in *dbptr and returns a non-OK status on error.
-  // Caller should delete *dbptr when it is no longer needed.
-  static Status Open(const Options& options, const std::string& name,
-                     DB** dbptr);
-
-  DB() = default;
-
-  DB(const DB&) = delete;
-  DB& operator=(const DB&) = delete;
-
-  virtual ~DB();
-
-  // Set the database entry for "key" to "value".  Returns OK on success,
-  // and a non-OK status on error.
-  // Note: consider setting options.sync = true.
-  virtual Status Put(const WriteOptions& options, const Slice& key,
-                     const Slice& value) = 0;
-
-  // Remove the database entry (if any) for "key".  Returns OK on
-  // success, and a non-OK status on error.  It is not an error if "key"
-  // did not exist in the database.
-  // Note: consider setting options.sync = true.
-  virtual Status Delete(const WriteOptions& options, const Slice& key) = 0;
-
-  // Apply the specified updates to the database.
-  // Returns OK on success, non-OK on failure.
-  // Note: consider setting options.sync = true.
-  virtual Status Write(const WriteOptions& options, WriteBatch* updates) = 0;
-
-  // If the database contains an entry for "key" store the
-  // corresponding value in *value and return OK.
-  //
-  // If there is no entry for "key" leave *value unchanged and return
-  // a status for which Status::IsNotFound() returns true.
-  //
-  // May return some other Status on an error.
-  virtual Status Get(const ReadOptions& options, const Slice& key,
-                     std::string* value) = 0;
-
-  // Return a heap-allocated iterator over the contents of the database.
-  // The result of NewIterator() is initially invalid (caller must
-  // call one of the Seek methods on the iterator before using it).
-  //
-  // Caller should delete the iterator when it is no longer needed.
-  // The returned iterator should be deleted before this db is deleted.
-  virtual Iterator* NewIterator(const ReadOptions& options) = 0;
-
-  // Return a handle to the current DB state.  Iterators created with
-  // this handle will all observe a stable snapshot of the current DB
-  // state.  The caller must call ReleaseSnapshot(result) when the
-  // snapshot is no longer needed.
-  virtual const Snapshot* GetSnapshot() = 0;
-
-  // Release a previously acquired snapshot.  The caller must not
-  // use "snapshot" after this call.
-  virtual void ReleaseSnapshot(const Snapshot* snapshot) = 0;
-
-  // DB implementations can export properties about their state
-  // via this method.  If "property" is a valid property understood by this
-  // DB implementation, fills "*value" with its current value and returns
-  // true.  Otherwise returns false.
-  //
-  //
-  // Valid property names include:
-  //
-  //  "leveldb.num-files-at-level<N>" - return the number of files at level <N>,
-  //     where <N> is an ASCII representation of a level number (e.g. "0").
-  //  "leveldb.stats" - returns a multi-line string that describes statistics
-  //     about the internal operation of the DB.
-  //  "leveldb.sstables" - returns a multi-line string that describes all
-  //     of the sstables that make up the db contents.
-  //  "leveldb.approximate-memory-usage" - returns the approximate number of
-  //     bytes of memory in use by the DB.
-  virtual bool GetProperty(const Slice& property, std::string* value) = 0;
-
-  // For each i in [0,n-1], store in "sizes[i]", the approximate
-  // file system space used by keys in "[range[i].start .. range[i].limit)".
-  //
-  // Note that the returned sizes measure file system space usage, so
-  // if the user data compresses by a factor of ten, the returned
-  // sizes will be one-tenth the size of the corresponding user data size.
-  //
-  // The results may not include the sizes of recently written data.
-  virtual void GetApproximateSizes(const Range* range, int n,
-                                   uint64_t* sizes) = 0;
-
-  // Compact the underlying storage for the key range [*begin,*end].
-  // In particular, deleted and overwritten versions are discarded,
-  // and the data is rearranged to reduce the cost of operations
-  // needed to access the data.  This operation should typically only
-  // be invoked by users who understand the underlying implementation.
-  //
-  // begin==nullptr is treated as a key before all keys in the database.
-  // end==nullptr is treated as a key after all keys in the database.
-  // Therefore the following call will compact the entire database:
-  //    db->CompactRange(nullptr, nullptr);
-  virtual void CompactRange(const Slice* begin, const Slice* end) = 0;
-};
-
-// Destroy the contents of the specified database.
-// Be very careful using this method.
-//
-// Note: For backwards compatibility, if DestroyDB is unable to list the
-// database files, Status::OK() will still be returned masking this failure.
-LEVELDB_EXPORT Status DestroyDB(const std::string& name,
-                                const Options& options);
-
-// If a DB cannot be opened, you may attempt to call this method to
-// resurrect as much of the contents of the database as possible.
-// Some data may be lost, so be careful when calling this function
-// on a database that contains important information.
-LEVELDB_EXPORT Status RepairDB(const std::string& dbname,
-                               const Options& options);
-
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_INCLUDE_DB_H_
diff --git a/assign5/openTok/Pods/leveldb-library/include/leveldb/dumpfile.h b/assign5/openTok/Pods/leveldb-library/include/leveldb/dumpfile.h
deleted file mode 100644
index a58bc6b..0000000
--- a/assign5/openTok/Pods/leveldb-library/include/leveldb/dumpfile.h
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright (c) 2014 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#ifndef STORAGE_LEVELDB_INCLUDE_DUMPFILE_H_
-#define STORAGE_LEVELDB_INCLUDE_DUMPFILE_H_
-
-#include <string>
-
-#include "leveldb/env.h"
-#include "leveldb/export.h"
-#include "leveldb/status.h"
-
-namespace leveldb {
-
-// Dump the contents of the file named by fname in text format to
-// *dst.  Makes a sequence of dst->Append() calls; each call is passed
-// the newline-terminated text corresponding to a single item found
-// in the file.
-//
-// Returns a non-OK result if fname does not name a leveldb storage
-// file, or if the file cannot be read.
-LEVELDB_EXPORT Status DumpFile(Env* env, const std::string& fname,
-                               WritableFile* dst);
-
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_INCLUDE_DUMPFILE_H_
diff --git a/assign5/openTok/Pods/leveldb-library/include/leveldb/env.h b/assign5/openTok/Pods/leveldb-library/include/leveldb/env.h
deleted file mode 100644
index 112fe96..0000000
--- a/assign5/openTok/Pods/leveldb-library/include/leveldb/env.h
+++ /dev/null
@@ -1,387 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-//
-// An Env is an interface used by the leveldb implementation to access
-// operating system functionality like the filesystem etc.  Callers
-// may wish to provide a custom Env object when opening a database to
-// get fine gain control; e.g., to rate limit file system operations.
-//
-// All Env implementations are safe for concurrent access from
-// multiple threads without any external synchronization.
-
-#ifndef STORAGE_LEVELDB_INCLUDE_ENV_H_
-#define STORAGE_LEVELDB_INCLUDE_ENV_H_
-
-#include <stdarg.h>
-#include <stdint.h>
-
-#include <string>
-#include <vector>
-
-#include "leveldb/export.h"
-#include "leveldb/status.h"
-
-#if defined(_WIN32)
-// The leveldb::Env class below contains a DeleteFile method.
-// At the same time, <windows.h>, a fairly popular header
-// file for Windows applications, defines a DeleteFile macro.
-//
-// Without any intervention on our part, the result of this
-// unfortunate coincidence is that the name of the
-// leveldb::Env::DeleteFile method seen by the compiler depends on
-// whether <windows.h> was included before or after the LevelDB
-// headers.
-//
-// To avoid headaches, we undefined DeleteFile (if defined) and
-// redefine it at the bottom of this file. This way <windows.h>
-// can be included before this file (or not at all) and the
-// exported method will always be leveldb::Env::DeleteFile.
-#if defined(DeleteFile)
-#undef DeleteFile
-#define LEVELDB_DELETEFILE_UNDEFINED
-#endif  // defined(DeleteFile)
-#endif  // defined(_WIN32)
-
-namespace leveldb {
-
-class FileLock;
-class Logger;
-class RandomAccessFile;
-class SequentialFile;
-class Slice;
-class WritableFile;
-
-class LEVELDB_EXPORT Env {
- public:
-  Env() = default;
-
-  Env(const Env&) = delete;
-  Env& operator=(const Env&) = delete;
-
-  virtual ~Env();
-
-  // Return a default environment suitable for the current operating
-  // system.  Sophisticated users may wish to provide their own Env
-  // implementation instead of relying on this default environment.
-  //
-  // The result of Default() belongs to leveldb and must never be deleted.
-  static Env* Default();
-
-  // Create an object that sequentially reads the file with the specified name.
-  // On success, stores a pointer to the new file in *result and returns OK.
-  // On failure stores nullptr in *result and returns non-OK.  If the file does
-  // not exist, returns a non-OK status.  Implementations should return a
-  // NotFound status when the file does not exist.
-  //
-  // The returned file will only be accessed by one thread at a time.
-  virtual Status NewSequentialFile(const std::string& fname,
-                                   SequentialFile** result) = 0;
-
-  // Create an object supporting random-access reads from the file with the
-  // specified name.  On success, stores a pointer to the new file in
-  // *result and returns OK.  On failure stores nullptr in *result and
-  // returns non-OK.  If the file does not exist, returns a non-OK
-  // status.  Implementations should return a NotFound status when the file does
-  // not exist.
-  //
-  // The returned file may be concurrently accessed by multiple threads.
-  virtual Status NewRandomAccessFile(const std::string& fname,
-                                     RandomAccessFile** result) = 0;
-
-  // Create an object that writes to a new file with the specified
-  // name.  Deletes any existing file with the same name and creates a
-  // new file.  On success, stores a pointer to the new file in
-  // *result and returns OK.  On failure stores nullptr in *result and
-  // returns non-OK.
-  //
-  // The returned file will only be accessed by one thread at a time.
-  virtual Status NewWritableFile(const std::string& fname,
-                                 WritableFile** result) = 0;
-
-  // Create an object that either appends to an existing file, or
-  // writes to a new file (if the file does not exist to begin with).
-  // On success, stores a pointer to the new file in *result and
-  // returns OK.  On failure stores nullptr in *result and returns
-  // non-OK.
-  //
-  // The returned file will only be accessed by one thread at a time.
-  //
-  // May return an IsNotSupportedError error if this Env does
-  // not allow appending to an existing file.  Users of Env (including
-  // the leveldb implementation) must be prepared to deal with
-  // an Env that does not support appending.
-  virtual Status NewAppendableFile(const std::string& fname,
-                                   WritableFile** result);
-
-  // Returns true iff the named file exists.
-  virtual bool FileExists(const std::string& fname) = 0;
-
-  // Store in *result the names of the children of the specified directory.
-  // The names are relative to "dir".
-  // Original contents of *results are dropped.
-  virtual Status GetChildren(const std::string& dir,
-                             std::vector<std::string>* result) = 0;
-
-  // Delete the named file.
-  virtual Status DeleteFile(const std::string& fname) = 0;
-
-  // Create the specified directory.
-  virtual Status CreateDir(const std::string& dirname) = 0;
-
-  // Delete the specified directory.
-  virtual Status DeleteDir(const std::string& dirname) = 0;
-
-  // Store the size of fname in *file_size.
-  virtual Status GetFileSize(const std::string& fname, uint64_t* file_size) = 0;
-
-  // Rename file src to target.
-  virtual Status RenameFile(const std::string& src,
-                            const std::string& target) = 0;
-
-  // Lock the specified file.  Used to prevent concurrent access to
-  // the same db by multiple processes.  On failure, stores nullptr in
-  // *lock and returns non-OK.
-  //
-  // On success, stores a pointer to the object that represents the
-  // acquired lock in *lock and returns OK.  The caller should call
-  // UnlockFile(*lock) to release the lock.  If the process exits,
-  // the lock will be automatically released.
-  //
-  // If somebody else already holds the lock, finishes immediately
-  // with a failure.  I.e., this call does not wait for existing locks
-  // to go away.
-  //
-  // May create the named file if it does not already exist.
-  virtual Status LockFile(const std::string& fname, FileLock** lock) = 0;
-
-  // Release the lock acquired by a previous successful call to LockFile.
-  // REQUIRES: lock was returned by a successful LockFile() call
-  // REQUIRES: lock has not already been unlocked.
-  virtual Status UnlockFile(FileLock* lock) = 0;
-
-  // Arrange to run "(*function)(arg)" once in a background thread.
-  //
-  // "function" may run in an unspecified thread.  Multiple functions
-  // added to the same Env may run concurrently in different threads.
-  // I.e., the caller may not assume that background work items are
-  // serialized.
-  virtual void Schedule(void (*function)(void* arg), void* arg) = 0;
-
-  // Start a new thread, invoking "function(arg)" within the new thread.
-  // When "function(arg)" returns, the thread will be destroyed.
-  virtual void StartThread(void (*function)(void* arg), void* arg) = 0;
-
-  // *path is set to a temporary directory that can be used for testing. It may
-  // or may not have just been created. The directory may or may not differ
-  // between runs of the same process, but subsequent calls will return the
-  // same directory.
-  virtual Status GetTestDirectory(std::string* path) = 0;
-
-  // Create and return a log file for storing informational messages.
-  virtual Status NewLogger(const std::string& fname, Logger** result) = 0;
-
-  // Returns the number of micro-seconds since some fixed point in time. Only
-  // useful for computing deltas of time.
-  virtual uint64_t NowMicros() = 0;
-
-  // Sleep/delay the thread for the prescribed number of micro-seconds.
-  virtual void SleepForMicroseconds(int micros) = 0;
-};
-
-// A file abstraction for reading sequentially through a file
-class LEVELDB_EXPORT SequentialFile {
- public:
-  SequentialFile() = default;
-
-  SequentialFile(const SequentialFile&) = delete;
-  SequentialFile& operator=(const SequentialFile&) = delete;
-
-  virtual ~SequentialFile();
-
-  // Read up to "n" bytes from the file.  "scratch[0..n-1]" may be
-  // written by this routine.  Sets "*result" to the data that was
-  // read (including if fewer than "n" bytes were successfully read).
-  // May set "*result" to point at data in "scratch[0..n-1]", so
-  // "scratch[0..n-1]" must be live when "*result" is used.
-  // If an error was encountered, returns a non-OK status.
-  //
-  // REQUIRES: External synchronization
-  virtual Status Read(size_t n, Slice* result, char* scratch) = 0;
-
-  // Skip "n" bytes from the file. This is guaranteed to be no
-  // slower that reading the same data, but may be faster.
-  //
-  // If end of file is reached, skipping will stop at the end of the
-  // file, and Skip will return OK.
-  //
-  // REQUIRES: External synchronization
-  virtual Status Skip(uint64_t n) = 0;
-};
-
-// A file abstraction for randomly reading the contents of a file.
-class LEVELDB_EXPORT RandomAccessFile {
- public:
-  RandomAccessFile() = default;
-
-  RandomAccessFile(const RandomAccessFile&) = delete;
-  RandomAccessFile& operator=(const RandomAccessFile&) = delete;
-
-  virtual ~RandomAccessFile();
-
-  // Read up to "n" bytes from the file starting at "offset".
-  // "scratch[0..n-1]" may be written by this routine.  Sets "*result"
-  // to the data that was read (including if fewer than "n" bytes were
-  // successfully read).  May set "*result" to point at data in
-  // "scratch[0..n-1]", so "scratch[0..n-1]" must be live when
-  // "*result" is used.  If an error was encountered, returns a non-OK
-  // status.
-  //
-  // Safe for concurrent use by multiple threads.
-  virtual Status Read(uint64_t offset, size_t n, Slice* result,
-                      char* scratch) const = 0;
-};
-
-// A file abstraction for sequential writing.  The implementation
-// must provide buffering since callers may append small fragments
-// at a time to the file.
-class LEVELDB_EXPORT WritableFile {
- public:
-  WritableFile() = default;
-
-  WritableFile(const WritableFile&) = delete;
-  WritableFile& operator=(const WritableFile&) = delete;
-
-  virtual ~WritableFile();
-
-  virtual Status Append(const Slice& data) = 0;
-  virtual Status Close() = 0;
-  virtual Status Flush() = 0;
-  virtual Status Sync() = 0;
-};
-
-// An interface for writing log messages.
-class LEVELDB_EXPORT Logger {
- public:
-  Logger() = default;
-
-  Logger(const Logger&) = delete;
-  Logger& operator=(const Logger&) = delete;
-
-  virtual ~Logger();
-
-  // Write an entry to the log file with the specified format.
-  virtual void Logv(const char* format, va_list ap) = 0;
-};
-
-// Identifies a locked file.
-class LEVELDB_EXPORT FileLock {
- public:
-  FileLock() = default;
-
-  FileLock(const FileLock&) = delete;
-  FileLock& operator=(const FileLock&) = delete;
-
-  virtual ~FileLock();
-};
-
-// Log the specified data to *info_log if info_log is non-null.
-void Log(Logger* info_log, const char* format, ...)
-#if defined(__GNUC__) || defined(__clang__)
-    __attribute__((__format__(__printf__, 2, 3)))
-#endif
-    ;
-
-// A utility routine: write "data" to the named file.
-LEVELDB_EXPORT Status WriteStringToFile(Env* env, const Slice& data,
-                                        const std::string& fname);
-
-// A utility routine: read contents of named file into *data
-LEVELDB_EXPORT Status ReadFileToString(Env* env, const std::string& fname,
-                                       std::string* data);
-
-// An implementation of Env that forwards all calls to another Env.
-// May be useful to clients who wish to override just part of the
-// functionality of another Env.
-class LEVELDB_EXPORT EnvWrapper : public Env {
- public:
-  // Initialize an EnvWrapper that delegates all calls to *t.
-  explicit EnvWrapper(Env* t) : target_(t) {}
-  virtual ~EnvWrapper();
-
-  // Return the target to which this Env forwards all calls.
-  Env* target() const { return target_; }
-
-  // The following text is boilerplate that forwards all methods to target().
-  Status NewSequentialFile(const std::string& f, SequentialFile** r) override {
-    return target_->NewSequentialFile(f, r);
-  }
-  Status NewRandomAccessFile(const std::string& f,
-                             RandomAccessFile** r) override {
-    return target_->NewRandomAccessFile(f, r);
-  }
-  Status NewWritableFile(const std::string& f, WritableFile** r) override {
-    return target_->NewWritableFile(f, r);
-  }
-  Status NewAppendableFile(const std::string& f, WritableFile** r) override {
-    return target_->NewAppendableFile(f, r);
-  }
-  bool FileExists(const std::string& f) override {
-    return target_->FileExists(f);
-  }
-  Status GetChildren(const std::string& dir,
-                     std::vector<std::string>* r) override {
-    return target_->GetChildren(dir, r);
-  }
-  Status DeleteFile(const std::string& f) override {
-    return target_->DeleteFile(f);
-  }
-  Status CreateDir(const std::string& d) override {
-    return target_->CreateDir(d);
-  }
-  Status DeleteDir(const std::string& d) override {
-    return target_->DeleteDir(d);
-  }
-  Status GetFileSize(const std::string& f, uint64_t* s) override {
-    return target_->GetFileSize(f, s);
-  }
-  Status RenameFile(const std::string& s, const std::string& t) override {
-    return target_->RenameFile(s, t);
-  }
-  Status LockFile(const std::string& f, FileLock** l) override {
-    return target_->LockFile(f, l);
-  }
-  Status UnlockFile(FileLock* l) override { return target_->UnlockFile(l); }
-  void Schedule(void (*f)(void*), void* a) override {
-    return target_->Schedule(f, a);
-  }
-  void StartThread(void (*f)(void*), void* a) override {
-    return target_->StartThread(f, a);
-  }
-  Status GetTestDirectory(std::string* path) override {
-    return target_->GetTestDirectory(path);
-  }
-  Status NewLogger(const std::string& fname, Logger** result) override {
-    return target_->NewLogger(fname, result);
-  }
-  uint64_t NowMicros() override { return target_->NowMicros(); }
-  void SleepForMicroseconds(int micros) override {
-    target_->SleepForMicroseconds(micros);
-  }
-
- private:
-  Env* target_;
-};
-
-}  // namespace leveldb
-
-// Redefine DeleteFile if necessary.
-#if defined(_WIN32) && defined(LEVELDB_DELETEFILE_UNDEFINED)
-#if defined(UNICODE)
-#define DeleteFile DeleteFileW
-#else
-#define DeleteFile DeleteFileA
-#endif  // defined(UNICODE)
-#endif  // defined(_WIN32) && defined(LEVELDB_DELETEFILE_UNDEFINED)
-
-#endif  // STORAGE_LEVELDB_INCLUDE_ENV_H_
diff --git a/assign5/openTok/Pods/leveldb-library/include/leveldb/export.h b/assign5/openTok/Pods/leveldb-library/include/leveldb/export.h
deleted file mode 100644
index 6ba9b18..0000000
--- a/assign5/openTok/Pods/leveldb-library/include/leveldb/export.h
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright (c) 2017 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#ifndef STORAGE_LEVELDB_INCLUDE_EXPORT_H_
-#define STORAGE_LEVELDB_INCLUDE_EXPORT_H_
-
-#if !defined(LEVELDB_EXPORT)
-
-#if defined(LEVELDB_SHARED_LIBRARY)
-#if defined(_WIN32)
-
-#if defined(LEVELDB_COMPILE_LIBRARY)
-#define LEVELDB_EXPORT __declspec(dllexport)
-#else
-#define LEVELDB_EXPORT __declspec(dllimport)
-#endif  // defined(LEVELDB_COMPILE_LIBRARY)
-
-#else  // defined(_WIN32)
-#if defined(LEVELDB_COMPILE_LIBRARY)
-#define LEVELDB_EXPORT __attribute__((visibility("default")))
-#else
-#define LEVELDB_EXPORT
-#endif
-#endif  // defined(_WIN32)
-
-#else  // defined(LEVELDB_SHARED_LIBRARY)
-#define LEVELDB_EXPORT
-#endif
-
-#endif  // !defined(LEVELDB_EXPORT)
-
-#endif  // STORAGE_LEVELDB_INCLUDE_EXPORT_H_
diff --git a/assign5/openTok/Pods/leveldb-library/include/leveldb/filter_policy.h b/assign5/openTok/Pods/leveldb-library/include/leveldb/filter_policy.h
deleted file mode 100644
index 49c8eda..0000000
--- a/assign5/openTok/Pods/leveldb-library/include/leveldb/filter_policy.h
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright (c) 2012 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-//
-// A database can be configured with a custom FilterPolicy object.
-// This object is responsible for creating a small filter from a set
-// of keys.  These filters are stored in leveldb and are consulted
-// automatically by leveldb to decide whether or not to read some
-// information from disk. In many cases, a filter can cut down the
-// number of disk seeks form a handful to a single disk seek per
-// DB::Get() call.
-//
-// Most people will want to use the builtin bloom filter support (see
-// NewBloomFilterPolicy() below).
-
-#ifndef STORAGE_LEVELDB_INCLUDE_FILTER_POLICY_H_
-#define STORAGE_LEVELDB_INCLUDE_FILTER_POLICY_H_
-
-#include <string>
-
-#include "leveldb/export.h"
-
-namespace leveldb {
-
-class Slice;
-
-class LEVELDB_EXPORT FilterPolicy {
- public:
-  virtual ~FilterPolicy();
-
-  // Return the name of this policy.  Note that if the filter encoding
-  // changes in an incompatible way, the name returned by this method
-  // must be changed.  Otherwise, old incompatible filters may be
-  // passed to methods of this type.
-  virtual const char* Name() const = 0;
-
-  // keys[0,n-1] contains a list of keys (potentially with duplicates)
-  // that are ordered according to the user supplied comparator.
-  // Append a filter that summarizes keys[0,n-1] to *dst.
-  //
-  // Warning: do not change the initial contents of *dst.  Instead,
-  // append the newly constructed filter to *dst.
-  virtual void CreateFilter(const Slice* keys, int n,
-                            std::string* dst) const = 0;
-
-  // "filter" contains the data appended by a preceding call to
-  // CreateFilter() on this class.  This method must return true if
-  // the key was in the list of keys passed to CreateFilter().
-  // This method may return true or false if the key was not on the
-  // list, but it should aim to return false with a high probability.
-  virtual bool KeyMayMatch(const Slice& key, const Slice& filter) const = 0;
-};
-
-// Return a new filter policy that uses a bloom filter with approximately
-// the specified number of bits per key.  A good value for bits_per_key
-// is 10, which yields a filter with ~ 1% false positive rate.
-//
-// Callers must delete the result after any database that is using the
-// result has been closed.
-//
-// Note: if you are using a custom comparator that ignores some parts
-// of the keys being compared, you must not use NewBloomFilterPolicy()
-// and must provide your own FilterPolicy that also ignores the
-// corresponding parts of the keys.  For example, if the comparator
-// ignores trailing spaces, it would be incorrect to use a
-// FilterPolicy (like NewBloomFilterPolicy) that does not ignore
-// trailing spaces in keys.
-LEVELDB_EXPORT const FilterPolicy* NewBloomFilterPolicy(int bits_per_key);
-
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_INCLUDE_FILTER_POLICY_H_
diff --git a/assign5/openTok/Pods/leveldb-library/include/leveldb/iterator.h b/assign5/openTok/Pods/leveldb-library/include/leveldb/iterator.h
deleted file mode 100644
index bb9a5df..0000000
--- a/assign5/openTok/Pods/leveldb-library/include/leveldb/iterator.h
+++ /dev/null
@@ -1,112 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-//
-// An iterator yields a sequence of key/value pairs from a source.
-// The following class defines the interface.  Multiple implementations
-// are provided by this library.  In particular, iterators are provided
-// to access the contents of a Table or a DB.
-//
-// Multiple threads can invoke const methods on an Iterator without
-// external synchronization, but if any of the threads may call a
-// non-const method, all threads accessing the same Iterator must use
-// external synchronization.
-
-#ifndef STORAGE_LEVELDB_INCLUDE_ITERATOR_H_
-#define STORAGE_LEVELDB_INCLUDE_ITERATOR_H_
-
-#include "leveldb/export.h"
-#include "leveldb/slice.h"
-#include "leveldb/status.h"
-
-namespace leveldb {
-
-class LEVELDB_EXPORT Iterator {
- public:
-  Iterator();
-
-  Iterator(const Iterator&) = delete;
-  Iterator& operator=(const Iterator&) = delete;
-
-  virtual ~Iterator();
-
-  // An iterator is either positioned at a key/value pair, or
-  // not valid.  This method returns true iff the iterator is valid.
-  virtual bool Valid() const = 0;
-
-  // Position at the first key in the source.  The iterator is Valid()
-  // after this call iff the source is not empty.
-  virtual void SeekToFirst() = 0;
-
-  // Position at the last key in the source.  The iterator is
-  // Valid() after this call iff the source is not empty.
-  virtual void SeekToLast() = 0;
-
-  // Position at the first key in the source that is at or past target.
-  // The iterator is Valid() after this call iff the source contains
-  // an entry that comes at or past target.
-  virtual void Seek(const Slice& target) = 0;
-
-  // Moves to the next entry in the source.  After this call, Valid() is
-  // true iff the iterator was not positioned at the last entry in the source.
-  // REQUIRES: Valid()
-  virtual void Next() = 0;
-
-  // Moves to the previous entry in the source.  After this call, Valid() is
-  // true iff the iterator was not positioned at the first entry in source.
-  // REQUIRES: Valid()
-  virtual void Prev() = 0;
-
-  // Return the key for the current entry.  The underlying storage for
-  // the returned slice is valid only until the next modification of
-  // the iterator.
-  // REQUIRES: Valid()
-  virtual Slice key() const = 0;
-
-  // Return the value for the current entry.  The underlying storage for
-  // the returned slice is valid only until the next modification of
-  // the iterator.
-  // REQUIRES: Valid()
-  virtual Slice value() const = 0;
-
-  // If an error has occurred, return it.  Else return an ok status.
-  virtual Status status() const = 0;
-
-  // Clients are allowed to register function/arg1/arg2 triples that
-  // will be invoked when this iterator is destroyed.
-  //
-  // Note that unlike all of the preceding methods, this method is
-  // not abstract and therefore clients should not override it.
-  using CleanupFunction = void (*)(void* arg1, void* arg2);
-  void RegisterCleanup(CleanupFunction function, void* arg1, void* arg2);
-
- private:
-  // Cleanup functions are stored in a single-linked list.
-  // The list's head node is inlined in the iterator.
-  struct CleanupNode {
-    // True if the node is not used. Only head nodes might be unused.
-    bool IsEmpty() const { return function == nullptr; }
-    // Invokes the cleanup function.
-    void Run() {
-      assert(function != nullptr);
-      (*function)(arg1, arg2);
-    }
-
-    // The head node is used if the function pointer is not null.
-    CleanupFunction function;
-    void* arg1;
-    void* arg2;
-    CleanupNode* next;
-  };
-  CleanupNode cleanup_head_;
-};
-
-// Return an empty iterator (yields nothing).
-LEVELDB_EXPORT Iterator* NewEmptyIterator();
-
-// Return an empty iterator with the specified status.
-LEVELDB_EXPORT Iterator* NewErrorIterator(const Status& status);
-
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_INCLUDE_ITERATOR_H_
diff --git a/assign5/openTok/Pods/leveldb-library/include/leveldb/options.h b/assign5/openTok/Pods/leveldb-library/include/leveldb/options.h
deleted file mode 100644
index b748772..0000000
--- a/assign5/openTok/Pods/leveldb-library/include/leveldb/options.h
+++ /dev/null
@@ -1,187 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#ifndef STORAGE_LEVELDB_INCLUDE_OPTIONS_H_
-#define STORAGE_LEVELDB_INCLUDE_OPTIONS_H_
-
-#include <stddef.h>
-
-#include "leveldb/export.h"
-
-namespace leveldb {
-
-class Cache;
-class Comparator;
-class Env;
-class FilterPolicy;
-class Logger;
-class Snapshot;
-
-// DB contents are stored in a set of blocks, each of which holds a
-// sequence of key,value pairs.  Each block may be compressed before
-// being stored in a file.  The following enum describes which
-// compression method (if any) is used to compress a block.
-enum CompressionType {
-  // NOTE: do not change the values of existing entries, as these are
-  // part of the persistent format on disk.
-  kNoCompression = 0x0,
-  kSnappyCompression = 0x1
-};
-
-// Options to control the behavior of a database (passed to DB::Open)
-struct LEVELDB_EXPORT Options {
-  // Create an Options object with default values for all fields.
-  Options();
-
-  // -------------------
-  // Parameters that affect behavior
-
-  // Comparator used to define the order of keys in the table.
-  // Default: a comparator that uses lexicographic byte-wise ordering
-  //
-  // REQUIRES: The client must ensure that the comparator supplied
-  // here has the same name and orders keys *exactly* the same as the
-  // comparator provided to previous open calls on the same DB.
-  const Comparator* comparator;
-
-  // If true, the database will be created if it is missing.
-  bool create_if_missing = false;
-
-  // If true, an error is raised if the database already exists.
-  bool error_if_exists = false;
-
-  // If true, the implementation will do aggressive checking of the
-  // data it is processing and will stop early if it detects any
-  // errors.  This may have unforeseen ramifications: for example, a
-  // corruption of one DB entry may cause a large number of entries to
-  // become unreadable or for the entire DB to become unopenable.
-  bool paranoid_checks = false;
-
-  // Use the specified object to interact with the environment,
-  // e.g. to read/write files, schedule background work, etc.
-  // Default: Env::Default()
-  Env* env;
-
-  // Any internal progress/error information generated by the db will
-  // be written to info_log if it is non-null, or to a file stored
-  // in the same directory as the DB contents if info_log is null.
-  Logger* info_log = nullptr;
-
-  // -------------------
-  // Parameters that affect performance
-
-  // Amount of data to build up in memory (backed by an unsorted log
-  // on disk) before converting to a sorted on-disk file.
-  //
-  // Larger values increase performance, especially during bulk loads.
-  // Up to two write buffers may be held in memory at the same time,
-  // so you may wish to adjust this parameter to control memory usage.
-  // Also, a larger write buffer will result in a longer recovery time
-  // the next time the database is opened.
-  size_t write_buffer_size = 4 * 1024 * 1024;
-
-  // Number of open files that can be used by the DB.  You may need to
-  // increase this if your database has a large working set (budget
-  // one open file per 2MB of working set).
-  int max_open_files = 1000;
-
-  // Control over blocks (user data is stored in a set of blocks, and
-  // a block is the unit of reading from disk).
-
-  // If non-null, use the specified cache for blocks.
-  // If null, leveldb will automatically create and use an 8MB internal cache.
-  Cache* block_cache = nullptr;
-
-  // Approximate size of user data packed per block.  Note that the
-  // block size specified here corresponds to uncompressed data.  The
-  // actual size of the unit read from disk may be smaller if
-  // compression is enabled.  This parameter can be changed dynamically.
-  size_t block_size = 4 * 1024;
-
-  // Number of keys between restart points for delta encoding of keys.
-  // This parameter can be changed dynamically.  Most clients should
-  // leave this parameter alone.
-  int block_restart_interval = 16;
-
-  // Leveldb will write up to this amount of bytes to a file before
-  // switching to a new one.
-  // Most clients should leave this parameter alone.  However if your
-  // filesystem is more efficient with larger files, you could
-  // consider increasing the value.  The downside will be longer
-  // compactions and hence longer latency/performance hiccups.
-  // Another reason to increase this parameter might be when you are
-  // initially populating a large database.
-  size_t max_file_size = 2 * 1024 * 1024;
-
-  // Compress blocks using the specified compression algorithm.  This
-  // parameter can be changed dynamically.
-  //
-  // Default: kSnappyCompression, which gives lightweight but fast
-  // compression.
-  //
-  // Typical speeds of kSnappyCompression on an Intel(R) Core(TM)2 2.4GHz:
-  //    ~200-500MB/s compression
-  //    ~400-800MB/s decompression
-  // Note that these speeds are significantly faster than most
-  // persistent storage speeds, and therefore it is typically never
-  // worth switching to kNoCompression.  Even if the input data is
-  // incompressible, the kSnappyCompression implementation will
-  // efficiently detect that and will switch to uncompressed mode.
-  CompressionType compression = kSnappyCompression;
-
-  // EXPERIMENTAL: If true, append to existing MANIFEST and log files
-  // when a database is opened.  This can significantly speed up open.
-  //
-  // Default: currently false, but may become true later.
-  bool reuse_logs = false;
-
-  // If non-null, use the specified filter policy to reduce disk reads.
-  // Many applications will benefit from passing the result of
-  // NewBloomFilterPolicy() here.
-  const FilterPolicy* filter_policy = nullptr;
-};
-
-// Options that control read operations
-struct LEVELDB_EXPORT ReadOptions {
-  ReadOptions() = default;
-
-  // If true, all data read from underlying storage will be
-  // verified against corresponding checksums.
-  bool verify_checksums = false;
-
-  // Should the data read for this iteration be cached in memory?
-  // Callers may wish to set this field to false for bulk scans.
-  bool fill_cache = true;
-
-  // If "snapshot" is non-null, read as of the supplied snapshot
-  // (which must belong to the DB that is being read and which must
-  // not have been released).  If "snapshot" is null, use an implicit
-  // snapshot of the state at the beginning of this read operation.
-  const Snapshot* snapshot = nullptr;
-};
-
-// Options that control write operations
-struct LEVELDB_EXPORT WriteOptions {
-  WriteOptions() = default;
-
-  // If true, the write will be flushed from the operating system
-  // buffer cache (by calling WritableFile::Sync()) before the write
-  // is considered complete.  If this flag is true, writes will be
-  // slower.
-  //
-  // If this flag is false, and the machine crashes, some recent
-  // writes may be lost.  Note that if it is just the process that
-  // crashes (i.e., the machine does not reboot), no writes will be
-  // lost even if sync==false.
-  //
-  // In other words, a DB write with sync==false has similar
-  // crash semantics as the "write()" system call.  A DB write
-  // with sync==true has similar crash semantics to a "write()"
-  // system call followed by "fsync()".
-  bool sync = false;
-};
-
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_INCLUDE_OPTIONS_H_
diff --git a/assign5/openTok/Pods/leveldb-library/include/leveldb/slice.h b/assign5/openTok/Pods/leveldb-library/include/leveldb/slice.h
deleted file mode 100644
index 2df417d..0000000
--- a/assign5/openTok/Pods/leveldb-library/include/leveldb/slice.h
+++ /dev/null
@@ -1,115 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-//
-// Slice is a simple structure containing a pointer into some external
-// storage and a size.  The user of a Slice must ensure that the slice
-// is not used after the corresponding external storage has been
-// deallocated.
-//
-// Multiple threads can invoke const methods on a Slice without
-// external synchronization, but if any of the threads may call a
-// non-const method, all threads accessing the same Slice must use
-// external synchronization.
-
-#ifndef STORAGE_LEVELDB_INCLUDE_SLICE_H_
-#define STORAGE_LEVELDB_INCLUDE_SLICE_H_
-
-#include <assert.h>
-#include <stddef.h>
-#include <string.h>
-
-#include <string>
-
-#include "leveldb/export.h"
-
-namespace leveldb {
-
-class LEVELDB_EXPORT Slice {
- public:
-  // Create an empty slice.
-  Slice() : data_(""), size_(0) {}
-
-  // Create a slice that refers to d[0,n-1].
-  Slice(const char* d, size_t n) : data_(d), size_(n) {}
-
-  // Create a slice that refers to the contents of "s"
-  Slice(const std::string& s) : data_(s.data()), size_(s.size()) {}
-
-  // Create a slice that refers to s[0,strlen(s)-1]
-  Slice(const char* s) : data_(s), size_(strlen(s)) {}
-
-  // Intentionally copyable.
-  Slice(const Slice&) = default;
-  Slice& operator=(const Slice&) = default;
-
-  // Return a pointer to the beginning of the referenced data
-  const char* data() const { return data_; }
-
-  // Return the length (in bytes) of the referenced data
-  size_t size() const { return size_; }
-
-  // Return true iff the length of the referenced data is zero
-  bool empty() const { return size_ == 0; }
-
-  // Return the ith byte in the referenced data.
-  // REQUIRES: n < size()
-  char operator[](size_t n) const {
-    assert(n < size());
-    return data_[n];
-  }
-
-  // Change this slice to refer to an empty array
-  void clear() {
-    data_ = "";
-    size_ = 0;
-  }
-
-  // Drop the first "n" bytes from this slice.
-  void remove_prefix(size_t n) {
-    assert(n <= size());
-    data_ += n;
-    size_ -= n;
-  }
-
-  // Return a string that contains the copy of the referenced data.
-  std::string ToString() const { return std::string(data_, size_); }
-
-  // Three-way comparison.  Returns value:
-  //   <  0 iff "*this" <  "b",
-  //   == 0 iff "*this" == "b",
-  //   >  0 iff "*this" >  "b"
-  int compare(const Slice& b) const;
-
-  // Return true iff "x" is a prefix of "*this"
-  bool starts_with(const Slice& x) const {
-    return ((size_ >= x.size_) && (memcmp(data_, x.data_, x.size_) == 0));
-  }
-
- private:
-  const char* data_;
-  size_t size_;
-};
-
-inline bool operator==(const Slice& x, const Slice& y) {
-  return ((x.size() == y.size()) &&
-          (memcmp(x.data(), y.data(), x.size()) == 0));
-}
-
-inline bool operator!=(const Slice& x, const Slice& y) { return !(x == y); }
-
-inline int Slice::compare(const Slice& b) const {
-  const size_t min_len = (size_ < b.size_) ? size_ : b.size_;
-  int r = memcmp(data_, b.data_, min_len);
-  if (r == 0) {
-    if (size_ < b.size_)
-      r = -1;
-    else if (size_ > b.size_)
-      r = +1;
-  }
-  return r;
-}
-
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_INCLUDE_SLICE_H_
diff --git a/assign5/openTok/Pods/leveldb-library/include/leveldb/status.h b/assign5/openTok/Pods/leveldb-library/include/leveldb/status.h
deleted file mode 100644
index e327314..0000000
--- a/assign5/openTok/Pods/leveldb-library/include/leveldb/status.h
+++ /dev/null
@@ -1,122 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-//
-// A Status encapsulates the result of an operation.  It may indicate success,
-// or it may indicate an error with an associated error message.
-//
-// Multiple threads can invoke const methods on a Status without
-// external synchronization, but if any of the threads may call a
-// non-const method, all threads accessing the same Status must use
-// external synchronization.
-
-#ifndef STORAGE_LEVELDB_INCLUDE_STATUS_H_
-#define STORAGE_LEVELDB_INCLUDE_STATUS_H_
-
-#include <algorithm>
-#include <string>
-
-#include "leveldb/export.h"
-#include "leveldb/slice.h"
-
-namespace leveldb {
-
-class LEVELDB_EXPORT Status {
- public:
-  // Create a success status.
-  Status() noexcept : state_(nullptr) {}
-  ~Status() { delete[] state_; }
-
-  Status(const Status& rhs);
-  Status& operator=(const Status& rhs);
-
-  Status(Status&& rhs) noexcept : state_(rhs.state_) { rhs.state_ = nullptr; }
-  Status& operator=(Status&& rhs) noexcept;
-
-  // Return a success status.
-  static Status OK() { return Status(); }
-
-  // Return error status of an appropriate type.
-  static Status NotFound(const Slice& msg, const Slice& msg2 = Slice()) {
-    return Status(kNotFound, msg, msg2);
-  }
-  static Status Corruption(const Slice& msg, const Slice& msg2 = Slice()) {
-    return Status(kCorruption, msg, msg2);
-  }
-  static Status NotSupported(const Slice& msg, const Slice& msg2 = Slice()) {
-    return Status(kNotSupported, msg, msg2);
-  }
-  static Status InvalidArgument(const Slice& msg, const Slice& msg2 = Slice()) {
-    return Status(kInvalidArgument, msg, msg2);
-  }
-  static Status IOError(const Slice& msg, const Slice& msg2 = Slice()) {
-    return Status(kIOError, msg, msg2);
-  }
-
-  // Returns true iff the status indicates success.
-  bool ok() const { return (state_ == nullptr); }
-
-  // Returns true iff the status indicates a NotFound error.
-  bool IsNotFound() const { return code() == kNotFound; }
-
-  // Returns true iff the status indicates a Corruption error.
-  bool IsCorruption() const { return code() == kCorruption; }
-
-  // Returns true iff the status indicates an IOError.
-  bool IsIOError() const { return code() == kIOError; }
-
-  // Returns true iff the status indicates a NotSupportedError.
-  bool IsNotSupportedError() const { return code() == kNotSupported; }
-
-  // Returns true iff the status indicates an InvalidArgument.
-  bool IsInvalidArgument() const { return code() == kInvalidArgument; }
-
-  // Return a string representation of this status suitable for printing.
-  // Returns the string "OK" for success.
-  std::string ToString() const;
-
- private:
-  enum Code {
-    kOk = 0,
-    kNotFound = 1,
-    kCorruption = 2,
-    kNotSupported = 3,
-    kInvalidArgument = 4,
-    kIOError = 5
-  };
-
-  Code code() const {
-    return (state_ == nullptr) ? kOk : static_cast<Code>(state_[4]);
-  }
-
-  Status(Code code, const Slice& msg, const Slice& msg2);
-  static const char* CopyState(const char* s);
-
-  // OK status has a null state_.  Otherwise, state_ is a new[] array
-  // of the following form:
-  //    state_[0..3] == length of message
-  //    state_[4]    == code
-  //    state_[5..]  == message
-  const char* state_;
-};
-
-inline Status::Status(const Status& rhs) {
-  state_ = (rhs.state_ == nullptr) ? nullptr : CopyState(rhs.state_);
-}
-inline Status& Status::operator=(const Status& rhs) {
-  // The following condition catches both aliasing (when this == &rhs),
-  // and the common case where both rhs and *this are ok.
-  if (state_ != rhs.state_) {
-    delete[] state_;
-    state_ = (rhs.state_ == nullptr) ? nullptr : CopyState(rhs.state_);
-  }
-  return *this;
-}
-inline Status& Status::operator=(Status&& rhs) noexcept {
-  std::swap(state_, rhs.state_);
-  return *this;
-}
-
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_INCLUDE_STATUS_H_
diff --git a/assign5/openTok/Pods/leveldb-library/include/leveldb/table.h b/assign5/openTok/Pods/leveldb-library/include/leveldb/table.h
deleted file mode 100644
index 25c6013..0000000
--- a/assign5/openTok/Pods/leveldb-library/include/leveldb/table.h
+++ /dev/null
@@ -1,84 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#ifndef STORAGE_LEVELDB_INCLUDE_TABLE_H_
-#define STORAGE_LEVELDB_INCLUDE_TABLE_H_
-
-#include <stdint.h>
-
-#include "leveldb/export.h"
-#include "leveldb/iterator.h"
-
-namespace leveldb {
-
-class Block;
-class BlockHandle;
-class Footer;
-struct Options;
-class RandomAccessFile;
-struct ReadOptions;
-class TableCache;
-
-// A Table is a sorted map from strings to strings.  Tables are
-// immutable and persistent.  A Table may be safely accessed from
-// multiple threads without external synchronization.
-class LEVELDB_EXPORT Table {
- public:
-  // Attempt to open the table that is stored in bytes [0..file_size)
-  // of "file", and read the metadata entries necessary to allow
-  // retrieving data from the table.
-  //
-  // If successful, returns ok and sets "*table" to the newly opened
-  // table.  The client should delete "*table" when no longer needed.
-  // If there was an error while initializing the table, sets "*table"
-  // to nullptr and returns a non-ok status.  Does not take ownership of
-  // "*source", but the client must ensure that "source" remains live
-  // for the duration of the returned table's lifetime.
-  //
-  // *file must remain live while this Table is in use.
-  static Status Open(const Options& options, RandomAccessFile* file,
-                     uint64_t file_size, Table** table);
-
-  Table(const Table&) = delete;
-  Table& operator=(const Table&) = delete;
-
-  ~Table();
-
-  // Returns a new iterator over the table contents.
-  // The result of NewIterator() is initially invalid (caller must
-  // call one of the Seek methods on the iterator before using it).
-  Iterator* NewIterator(const ReadOptions&) const;
-
-  // Given a key, return an approximate byte offset in the file where
-  // the data for that key begins (or would begin if the key were
-  // present in the file).  The returned value is in terms of file
-  // bytes, and so includes effects like compression of the underlying data.
-  // E.g., the approximate offset of the last key in the table will
-  // be close to the file length.
-  uint64_t ApproximateOffsetOf(const Slice& key) const;
-
- private:
-  friend class TableCache;
-  struct Rep;
-
-  static Iterator* BlockReader(void*, const ReadOptions&, const Slice&);
-
-  explicit Table(Rep* rep) : rep_(rep) {}
-
-  // Calls (*handle_result)(arg, ...) with the entry found after a call
-  // to Seek(key).  May not make such a call if filter policy says
-  // that key is not present.
-  Status InternalGet(const ReadOptions&, const Slice& key, void* arg,
-                     void (*handle_result)(void* arg, const Slice& k,
-                                           const Slice& v));
-
-  void ReadMeta(const Footer& footer);
-  void ReadFilter(const Slice& filter_handle_value);
-
-  Rep* const rep_;
-};
-
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_INCLUDE_TABLE_H_
diff --git a/assign5/openTok/Pods/leveldb-library/include/leveldb/table_builder.h b/assign5/openTok/Pods/leveldb-library/include/leveldb/table_builder.h
deleted file mode 100644
index 7d8896b..0000000
--- a/assign5/openTok/Pods/leveldb-library/include/leveldb/table_builder.h
+++ /dev/null
@@ -1,93 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-//
-// TableBuilder provides the interface used to build a Table
-// (an immutable and sorted map from keys to values).
-//
-// Multiple threads can invoke const methods on a TableBuilder without
-// external synchronization, but if any of the threads may call a
-// non-const method, all threads accessing the same TableBuilder must use
-// external synchronization.
-
-#ifndef STORAGE_LEVELDB_INCLUDE_TABLE_BUILDER_H_
-#define STORAGE_LEVELDB_INCLUDE_TABLE_BUILDER_H_
-
-#include <stdint.h>
-
-#include "leveldb/export.h"
-#include "leveldb/options.h"
-#include "leveldb/status.h"
-
-namespace leveldb {
-
-class BlockBuilder;
-class BlockHandle;
-class WritableFile;
-
-class LEVELDB_EXPORT TableBuilder {
- public:
-  // Create a builder that will store the contents of the table it is
-  // building in *file.  Does not close the file.  It is up to the
-  // caller to close the file after calling Finish().
-  TableBuilder(const Options& options, WritableFile* file);
-
-  TableBuilder(const TableBuilder&) = delete;
-  TableBuilder& operator=(const TableBuilder&) = delete;
-
-  // REQUIRES: Either Finish() or Abandon() has been called.
-  ~TableBuilder();
-
-  // Change the options used by this builder.  Note: only some of the
-  // option fields can be changed after construction.  If a field is
-  // not allowed to change dynamically and its value in the structure
-  // passed to the constructor is different from its value in the
-  // structure passed to this method, this method will return an error
-  // without changing any fields.
-  Status ChangeOptions(const Options& options);
-
-  // Add key,value to the table being constructed.
-  // REQUIRES: key is after any previously added key according to comparator.
-  // REQUIRES: Finish(), Abandon() have not been called
-  void Add(const Slice& key, const Slice& value);
-
-  // Advanced operation: flush any buffered key/value pairs to file.
-  // Can be used to ensure that two adjacent entries never live in
-  // the same data block.  Most clients should not need to use this method.
-  // REQUIRES: Finish(), Abandon() have not been called
-  void Flush();
-
-  // Return non-ok iff some error has been detected.
-  Status status() const;
-
-  // Finish building the table.  Stops using the file passed to the
-  // constructor after this function returns.
-  // REQUIRES: Finish(), Abandon() have not been called
-  Status Finish();
-
-  // Indicate that the contents of this builder should be abandoned.  Stops
-  // using the file passed to the constructor after this function returns.
-  // If the caller is not going to call Finish(), it must call Abandon()
-  // before destroying this builder.
-  // REQUIRES: Finish(), Abandon() have not been called
-  void Abandon();
-
-  // Number of calls to Add() so far.
-  uint64_t NumEntries() const;
-
-  // Size of the file generated so far.  If invoked after a successful
-  // Finish() call, returns the size of the final generated file.
-  uint64_t FileSize() const;
-
- private:
-  bool ok() const { return status().ok(); }
-  void WriteBlock(BlockBuilder* block, BlockHandle* handle);
-  void WriteRawBlock(const Slice& data, CompressionType, BlockHandle* handle);
-
-  struct Rep;
-  Rep* rep_;
-};
-
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_INCLUDE_TABLE_BUILDER_H_
diff --git a/assign5/openTok/Pods/leveldb-library/include/leveldb/write_batch.h b/assign5/openTok/Pods/leveldb-library/include/leveldb/write_batch.h
deleted file mode 100644
index 94d4115..0000000
--- a/assign5/openTok/Pods/leveldb-library/include/leveldb/write_batch.h
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-//
-// WriteBatch holds a collection of updates to apply atomically to a DB.
-//
-// The updates are applied in the order in which they are added
-// to the WriteBatch.  For example, the value of "key" will be "v3"
-// after the following batch is written:
-//
-//    batch.Put("key", "v1");
-//    batch.Delete("key");
-//    batch.Put("key", "v2");
-//    batch.Put("key", "v3");
-//
-// Multiple threads can invoke const methods on a WriteBatch without
-// external synchronization, but if any of the threads may call a
-// non-const method, all threads accessing the same WriteBatch must use
-// external synchronization.
-
-#ifndef STORAGE_LEVELDB_INCLUDE_WRITE_BATCH_H_
-#define STORAGE_LEVELDB_INCLUDE_WRITE_BATCH_H_
-
-#include <string>
-
-#include "leveldb/export.h"
-#include "leveldb/status.h"
-
-namespace leveldb {
-
-class Slice;
-
-class LEVELDB_EXPORT WriteBatch {
- public:
-  class LEVELDB_EXPORT Handler {
-   public:
-    virtual ~Handler();
-    virtual void Put(const Slice& key, const Slice& value) = 0;
-    virtual void Delete(const Slice& key) = 0;
-  };
-
-  WriteBatch();
-
-  // Intentionally copyable.
-  WriteBatch(const WriteBatch&) = default;
-  WriteBatch& operator=(const WriteBatch&) = default;
-
-  ~WriteBatch();
-
-  // Store the mapping "key->value" in the database.
-  void Put(const Slice& key, const Slice& value);
-
-  // If the database contains a mapping for "key", erase it.  Else do nothing.
-  void Delete(const Slice& key);
-
-  // Clear all updates buffered in this batch.
-  void Clear();
-
-  // The size of the database changes caused by this batch.
-  //
-  // This number is tied to implementation details, and may change across
-  // releases. It is intended for LevelDB usage metrics.
-  size_t ApproximateSize() const;
-
-  // Copies the operations in "source" to this batch.
-  //
-  // This runs in O(source size) time. However, the constant factor is better
-  // than calling Iterate() over the source batch with a Handler that replicates
-  // the operations into this batch.
-  void Append(const WriteBatch& source);
-
-  // Support for iterating over the contents of a batch.
-  Status Iterate(Handler* handler) const;
-
- private:
-  friend class WriteBatchInternal;
-
-  std::string rep_;  // See comment in write_batch.cc for the format of rep_
-};
-
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_INCLUDE_WRITE_BATCH_H_
diff --git a/assign5/openTok/Pods/leveldb-library/port/port.h b/assign5/openTok/Pods/leveldb-library/port/port.h
deleted file mode 100644
index 4b247f7..0000000
--- a/assign5/openTok/Pods/leveldb-library/port/port.h
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#ifndef STORAGE_LEVELDB_PORT_PORT_H_
-#define STORAGE_LEVELDB_PORT_PORT_H_
-
-#include <string.h>
-
-// Include the appropriate platform specific file below.  If you are
-// porting to a new platform, see "port_example.h" for documentation
-// of what the new port_<platform>.h file must provide.
-#if defined(LEVELDB_PLATFORM_POSIX) || defined(LEVELDB_PLATFORM_WINDOWS)
-#include "port/port_stdcxx.h"
-#elif defined(LEVELDB_PLATFORM_CHROMIUM)
-#include "port/port_chromium.h"
-#endif
-
-#endif  // STORAGE_LEVELDB_PORT_PORT_H_
diff --git a/assign5/openTok/Pods/leveldb-library/port/port_example.h b/assign5/openTok/Pods/leveldb-library/port/port_example.h
deleted file mode 100644
index 1a8fca2..0000000
--- a/assign5/openTok/Pods/leveldb-library/port/port_example.h
+++ /dev/null
@@ -1,104 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-//
-// This file contains the specification, but not the implementations,
-// of the types/operations/etc. that should be defined by a platform
-// specific port_<platform>.h file.  Use this file as a reference for
-// how to port this package to a new platform.
-
-#ifndef STORAGE_LEVELDB_PORT_PORT_EXAMPLE_H_
-#define STORAGE_LEVELDB_PORT_PORT_EXAMPLE_H_
-
-#include "port/thread_annotations.h"
-
-namespace leveldb {
-namespace port {
-
-// TODO(jorlow): Many of these belong more in the environment class rather than
-//               here. We should try moving them and see if it affects perf.
-
-// The following boolean constant must be true on a little-endian machine
-// and false otherwise.
-static const bool kLittleEndian = true /* or some other expression */;
-
-// ------------------ Threading -------------------
-
-// A Mutex represents an exclusive lock.
-class LOCKABLE Mutex {
- public:
-  Mutex();
-  ~Mutex();
-
-  // Lock the mutex.  Waits until other lockers have exited.
-  // Will deadlock if the mutex is already locked by this thread.
-  void Lock() EXCLUSIVE_LOCK_FUNCTION();
-
-  // Unlock the mutex.
-  // REQUIRES: This mutex was locked by this thread.
-  void Unlock() UNLOCK_FUNCTION();
-
-  // Optionally crash if this thread does not hold this mutex.
-  // The implementation must be fast, especially if NDEBUG is
-  // defined.  The implementation is allowed to skip all checks.
-  void AssertHeld() ASSERT_EXCLUSIVE_LOCK();
-};
-
-class CondVar {
- public:
-  explicit CondVar(Mutex* mu);
-  ~CondVar();
-
-  // Atomically release *mu and block on this condition variable until
-  // either a call to SignalAll(), or a call to Signal() that picks
-  // this thread to wakeup.
-  // REQUIRES: this thread holds *mu
-  void Wait();
-
-  // If there are some threads waiting, wake up at least one of them.
-  void Signal();
-
-  // Wake up all waiting threads.
-  void SignallAll();
-};
-
-// ------------------ Compression -------------------
-
-// Store the snappy compression of "input[0,input_length-1]" in *output.
-// Returns false if snappy is not supported by this port.
-bool Snappy_Compress(const char* input, size_t input_length,
-                     std::string* output);
-
-// If input[0,input_length-1] looks like a valid snappy compressed
-// buffer, store the size of the uncompressed data in *result and
-// return true.  Else return false.
-bool Snappy_GetUncompressedLength(const char* input, size_t length,
-                                  size_t* result);
-
-// Attempt to snappy uncompress input[0,input_length-1] into *output.
-// Returns true if successful, false if the input is invalid lightweight
-// compressed data.
-//
-// REQUIRES: at least the first "n" bytes of output[] must be writable
-// where "n" is the result of a successful call to
-// Snappy_GetUncompressedLength.
-bool Snappy_Uncompress(const char* input_data, size_t input_length,
-                       char* output);
-
-// ------------------ Miscellaneous -------------------
-
-// If heap profiling is not supported, returns false.
-// Else repeatedly calls (*func)(arg, data, n) and then returns true.
-// The concatenation of all "data[0,n-1]" fragments is the heap profile.
-bool GetHeapProfile(void (*func)(void*, const char*, int), void* arg);
-
-// Extend the CRC to include the first n bytes of buf.
-//
-// Returns zero if the CRC cannot be extended using acceleration, else returns
-// the newly extended CRC value (which may also be zero).
-uint32_t AcceleratedCRC32C(uint32_t crc, const char* buf, size_t size);
-
-}  // namespace port
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_PORT_PORT_EXAMPLE_H_
diff --git a/assign5/openTok/Pods/leveldb-library/port/port_stdcxx.h b/assign5/openTok/Pods/leveldb-library/port/port_stdcxx.h
deleted file mode 100644
index e9cb0e5..0000000
--- a/assign5/openTok/Pods/leveldb-library/port/port_stdcxx.h
+++ /dev/null
@@ -1,153 +0,0 @@
-// Copyright (c) 2018 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#ifndef STORAGE_LEVELDB_PORT_PORT_STDCXX_H_
-#define STORAGE_LEVELDB_PORT_PORT_STDCXX_H_
-
-// port/port_config.h availability is automatically detected via __has_include
-// in newer compilers. If LEVELDB_HAS_PORT_CONFIG_H is defined, it overrides the
-// configuration detection.
-#if defined(LEVELDB_HAS_PORT_CONFIG_H)
-
-#if LEVELDB_HAS_PORT_CONFIG_H
-#include "port/port_config.h"
-#endif  // LEVELDB_HAS_PORT_CONFIG_H
-
-#elif defined(__has_include)
-
-#if __has_include("port/port_config.h")
-#include "port/port_config.h"
-#endif  // __has_include("port/port_config.h")
-
-#endif  // defined(LEVELDB_HAS_PORT_CONFIG_H)
-
-#if HAVE_CRC32C
-#include <crc32c/crc32c.h>
-#endif  // HAVE_CRC32C
-#if HAVE_SNAPPY
-#include <snappy.h>
-#endif  // HAVE_SNAPPY
-
-#include <cassert>
-#include <condition_variable>  // NOLINT
-#include <cstddef>
-#include <cstdint>
-#include <mutex>  // NOLINT
-#include <string>
-
-#include "port/thread_annotations.h"
-
-namespace leveldb {
-namespace port {
-
-static const bool kLittleEndian = !LEVELDB_IS_BIG_ENDIAN;
-
-class CondVar;
-
-// Thinly wraps std::mutex.
-class LOCKABLE Mutex {
- public:
-  Mutex() = default;
-  ~Mutex() = default;
-
-  Mutex(const Mutex&) = delete;
-  Mutex& operator=(const Mutex&) = delete;
-
-  void Lock() EXCLUSIVE_LOCK_FUNCTION() { mu_.lock(); }
-  void Unlock() UNLOCK_FUNCTION() { mu_.unlock(); }
-  void AssertHeld() ASSERT_EXCLUSIVE_LOCK() {}
-
- private:
-  friend class CondVar;
-  std::mutex mu_;
-};
-
-// Thinly wraps std::condition_variable.
-class CondVar {
- public:
-  explicit CondVar(Mutex* mu) : mu_(mu) { assert(mu != nullptr); }
-  ~CondVar() = default;
-
-  CondVar(const CondVar&) = delete;
-  CondVar& operator=(const CondVar&) = delete;
-
-  void Wait() {
-    std::unique_lock<std::mutex> lock(mu_->mu_, std::adopt_lock);
-    cv_.wait(lock);
-    lock.release();
-  }
-  void Signal() { cv_.notify_one(); }
-  void SignalAll() { cv_.notify_all(); }
-
- private:
-  std::condition_variable cv_;
-  Mutex* const mu_;
-};
-
-inline bool Snappy_Compress(const char* input, size_t length,
-                            std::string* output) {
-#if HAVE_SNAPPY
-  output->resize(snappy::MaxCompressedLength(length));
-  size_t outlen;
-  snappy::RawCompress(input, length, &(*output)[0], &outlen);
-  output->resize(outlen);
-  return true;
-#else
-  // Silence compiler warnings about unused arguments.
-  (void)input;
-  (void)length;
-  (void)output;
-#endif  // HAVE_SNAPPY
-
-  return false;
-}
-
-inline bool Snappy_GetUncompressedLength(const char* input, size_t length,
-                                         size_t* result) {
-#if HAVE_SNAPPY
-  return snappy::GetUncompressedLength(input, length, result);
-#else
-  // Silence compiler warnings about unused arguments.
-  (void)input;
-  (void)length;
-  (void)result;
-  return false;
-#endif  // HAVE_SNAPPY
-}
-
-inline bool Snappy_Uncompress(const char* input, size_t length, char* output) {
-#if HAVE_SNAPPY
-  return snappy::RawUncompress(input, length, output);
-#else
-  // Silence compiler warnings about unused arguments.
-  (void)input;
-  (void)length;
-  (void)output;
-  return false;
-#endif  // HAVE_SNAPPY
-}
-
-inline bool GetHeapProfile(void (*func)(void*, const char*, int), void* arg) {
-  // Silence compiler warnings about unused arguments.
-  (void)func;
-  (void)arg;
-  return false;
-}
-
-inline uint32_t AcceleratedCRC32C(uint32_t crc, const char* buf, size_t size) {
-#if HAVE_CRC32C
-  return ::crc32c::Extend(crc, reinterpret_cast<const uint8_t*>(buf), size);
-#else
-  // Silence compiler warnings about unused arguments.
-  (void)crc;
-  (void)buf;
-  (void)size;
-  return 0;
-#endif  // HAVE_CRC32C
-}
-
-}  // namespace port
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_PORT_PORT_STDCXX_H_
diff --git a/assign5/openTok/Pods/leveldb-library/port/thread_annotations.h b/assign5/openTok/Pods/leveldb-library/port/thread_annotations.h
deleted file mode 100644
index 1547df9..0000000
--- a/assign5/openTok/Pods/leveldb-library/port/thread_annotations.h
+++ /dev/null
@@ -1,108 +0,0 @@
-// Copyright (c) 2012 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#ifndef STORAGE_LEVELDB_PORT_THREAD_ANNOTATIONS_H_
-#define STORAGE_LEVELDB_PORT_THREAD_ANNOTATIONS_H_
-
-// Use Clang's thread safety analysis annotations when available. In other
-// environments, the macros receive empty definitions.
-// Usage documentation: https://clang.llvm.org/docs/ThreadSafetyAnalysis.html
-
-#if !defined(THREAD_ANNOTATION_ATTRIBUTE__)
-
-#if defined(__clang__)
-
-#define THREAD_ANNOTATION_ATTRIBUTE__(x) __attribute__((x))
-#else
-#define THREAD_ANNOTATION_ATTRIBUTE__(x)  // no-op
-#endif
-
-#endif  // !defined(THREAD_ANNOTATION_ATTRIBUTE__)
-
-#ifndef GUARDED_BY
-#define GUARDED_BY(x) THREAD_ANNOTATION_ATTRIBUTE__(guarded_by(x))
-#endif
-
-#ifndef PT_GUARDED_BY
-#define PT_GUARDED_BY(x) THREAD_ANNOTATION_ATTRIBUTE__(pt_guarded_by(x))
-#endif
-
-#ifndef ACQUIRED_AFTER
-#define ACQUIRED_AFTER(...) \
-  THREAD_ANNOTATION_ATTRIBUTE__(acquired_after(__VA_ARGS__))
-#endif
-
-#ifndef ACQUIRED_BEFORE
-#define ACQUIRED_BEFORE(...) \
-  THREAD_ANNOTATION_ATTRIBUTE__(acquired_before(__VA_ARGS__))
-#endif
-
-#ifndef EXCLUSIVE_LOCKS_REQUIRED
-#define EXCLUSIVE_LOCKS_REQUIRED(...) \
-  THREAD_ANNOTATION_ATTRIBUTE__(exclusive_locks_required(__VA_ARGS__))
-#endif
-
-#ifndef SHARED_LOCKS_REQUIRED
-#define SHARED_LOCKS_REQUIRED(...) \
-  THREAD_ANNOTATION_ATTRIBUTE__(shared_locks_required(__VA_ARGS__))
-#endif
-
-#ifndef LOCKS_EXCLUDED
-#define LOCKS_EXCLUDED(...) \
-  THREAD_ANNOTATION_ATTRIBUTE__(locks_excluded(__VA_ARGS__))
-#endif
-
-#ifndef LOCK_RETURNED
-#define LOCK_RETURNED(x) THREAD_ANNOTATION_ATTRIBUTE__(lock_returned(x))
-#endif
-
-#ifndef LOCKABLE
-#define LOCKABLE THREAD_ANNOTATION_ATTRIBUTE__(lockable)
-#endif
-
-#ifndef SCOPED_LOCKABLE
-#define SCOPED_LOCKABLE THREAD_ANNOTATION_ATTRIBUTE__(scoped_lockable)
-#endif
-
-#ifndef EXCLUSIVE_LOCK_FUNCTION
-#define EXCLUSIVE_LOCK_FUNCTION(...) \
-  THREAD_ANNOTATION_ATTRIBUTE__(exclusive_lock_function(__VA_ARGS__))
-#endif
-
-#ifndef SHARED_LOCK_FUNCTION
-#define SHARED_LOCK_FUNCTION(...) \
-  THREAD_ANNOTATION_ATTRIBUTE__(shared_lock_function(__VA_ARGS__))
-#endif
-
-#ifndef EXCLUSIVE_TRYLOCK_FUNCTION
-#define EXCLUSIVE_TRYLOCK_FUNCTION(...) \
-  THREAD_ANNOTATION_ATTRIBUTE__(exclusive_trylock_function(__VA_ARGS__))
-#endif
-
-#ifndef SHARED_TRYLOCK_FUNCTION
-#define SHARED_TRYLOCK_FUNCTION(...) \
-  THREAD_ANNOTATION_ATTRIBUTE__(shared_trylock_function(__VA_ARGS__))
-#endif
-
-#ifndef UNLOCK_FUNCTION
-#define UNLOCK_FUNCTION(...) \
-  THREAD_ANNOTATION_ATTRIBUTE__(unlock_function(__VA_ARGS__))
-#endif
-
-#ifndef NO_THREAD_SAFETY_ANALYSIS
-#define NO_THREAD_SAFETY_ANALYSIS \
-  THREAD_ANNOTATION_ATTRIBUTE__(no_thread_safety_analysis)
-#endif
-
-#ifndef ASSERT_EXCLUSIVE_LOCK
-#define ASSERT_EXCLUSIVE_LOCK(...) \
-  THREAD_ANNOTATION_ATTRIBUTE__(assert_exclusive_lock(__VA_ARGS__))
-#endif
-
-#ifndef ASSERT_SHARED_LOCK
-#define ASSERT_SHARED_LOCK(...) \
-  THREAD_ANNOTATION_ATTRIBUTE__(assert_shared_lock(__VA_ARGS__))
-#endif
-
-#endif  // STORAGE_LEVELDB_PORT_THREAD_ANNOTATIONS_H_
diff --git a/assign5/openTok/Pods/leveldb-library/table/block.cc b/assign5/openTok/Pods/leveldb-library/table/block.cc
deleted file mode 100644
index ad0ee98..0000000
--- a/assign5/openTok/Pods/leveldb-library/table/block.cc
+++ /dev/null
@@ -1,266 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-//
-// Decodes the blocks generated by block_builder.cc.
-
-#include "table/block.h"
-
-#include <algorithm>
-#include <vector>
-
-#include "leveldb/comparator.h"
-#include "table/format.h"
-#include "util/coding.h"
-#include "util/logging.h"
-
-namespace leveldb {
-
-inline uint32_t Block::NumRestarts() const {
-  assert(size_ >= sizeof(uint32_t));
-  return DecodeFixed32(data_ + size_ - sizeof(uint32_t));
-}
-
-Block::Block(const BlockContents& contents)
-    : data_(contents.data.data()),
-      size_(contents.data.size()),
-      owned_(contents.heap_allocated) {
-  if (size_ < sizeof(uint32_t)) {
-    size_ = 0;  // Error marker
-  } else {
-    size_t max_restarts_allowed = (size_ - sizeof(uint32_t)) / sizeof(uint32_t);
-    if (NumRestarts() > max_restarts_allowed) {
-      // The size is too small for NumRestarts()
-      size_ = 0;
-    } else {
-      restart_offset_ = size_ - (1 + NumRestarts()) * sizeof(uint32_t);
-    }
-  }
-}
-
-Block::~Block() {
-  if (owned_) {
-    delete[] data_;
-  }
-}
-
-// Helper routine: decode the next block entry starting at "p",
-// storing the number of shared key bytes, non_shared key bytes,
-// and the length of the value in "*shared", "*non_shared", and
-// "*value_length", respectively.  Will not dereference past "limit".
-//
-// If any errors are detected, returns nullptr.  Otherwise, returns a
-// pointer to the key delta (just past the three decoded values).
-static inline const char* DecodeEntry(const char* p, const char* limit,
-                                      uint32_t* shared, uint32_t* non_shared,
-                                      uint32_t* value_length) {
-  if (limit - p < 3) return nullptr;
-  *shared = reinterpret_cast<const unsigned char*>(p)[0];
-  *non_shared = reinterpret_cast<const unsigned char*>(p)[1];
-  *value_length = reinterpret_cast<const unsigned char*>(p)[2];
-  if ((*shared | *non_shared | *value_length) < 128) {
-    // Fast path: all three values are encoded in one byte each
-    p += 3;
-  } else {
-    if ((p = GetVarint32Ptr(p, limit, shared)) == nullptr) return nullptr;
-    if ((p = GetVarint32Ptr(p, limit, non_shared)) == nullptr) return nullptr;
-    if ((p = GetVarint32Ptr(p, limit, value_length)) == nullptr) return nullptr;
-  }
-
-  if (static_cast<uint32_t>(limit - p) < (*non_shared + *value_length)) {
-    return nullptr;
-  }
-  return p;
-}
-
-class Block::Iter : public Iterator {
- private:
-  const Comparator* const comparator_;
-  const char* const data_;       // underlying block contents
-  uint32_t const restarts_;      // Offset of restart array (list of fixed32)
-  uint32_t const num_restarts_;  // Number of uint32_t entries in restart array
-
-  // current_ is offset in data_ of current entry.  >= restarts_ if !Valid
-  uint32_t current_;
-  uint32_t restart_index_;  // Index of restart block in which current_ falls
-  std::string key_;
-  Slice value_;
-  Status status_;
-
-  inline int Compare(const Slice& a, const Slice& b) const {
-    return comparator_->Compare(a, b);
-  }
-
-  // Return the offset in data_ just past the end of the current entry.
-  inline uint32_t NextEntryOffset() const {
-    return (value_.data() + value_.size()) - data_;
-  }
-
-  uint32_t GetRestartPoint(uint32_t index) {
-    assert(index < num_restarts_);
-    return DecodeFixed32(data_ + restarts_ + index * sizeof(uint32_t));
-  }
-
-  void SeekToRestartPoint(uint32_t index) {
-    key_.clear();
-    restart_index_ = index;
-    // current_ will be fixed by ParseNextKey();
-
-    // ParseNextKey() starts at the end of value_, so set value_ accordingly
-    uint32_t offset = GetRestartPoint(index);
-    value_ = Slice(data_ + offset, 0);
-  }
-
- public:
-  Iter(const Comparator* comparator, const char* data, uint32_t restarts,
-       uint32_t num_restarts)
-      : comparator_(comparator),
-        data_(data),
-        restarts_(restarts),
-        num_restarts_(num_restarts),
-        current_(restarts_),
-        restart_index_(num_restarts_) {
-    assert(num_restarts_ > 0);
-  }
-
-  virtual bool Valid() const { return current_ < restarts_; }
-  virtual Status status() const { return status_; }
-  virtual Slice key() const {
-    assert(Valid());
-    return key_;
-  }
-  virtual Slice value() const {
-    assert(Valid());
-    return value_;
-  }
-
-  virtual void Next() {
-    assert(Valid());
-    ParseNextKey();
-  }
-
-  virtual void Prev() {
-    assert(Valid());
-
-    // Scan backwards to a restart point before current_
-    const uint32_t original = current_;
-    while (GetRestartPoint(restart_index_) >= original) {
-      if (restart_index_ == 0) {
-        // No more entries
-        current_ = restarts_;
-        restart_index_ = num_restarts_;
-        return;
-      }
-      restart_index_--;
-    }
-
-    SeekToRestartPoint(restart_index_);
-    do {
-      // Loop until end of current entry hits the start of original entry
-    } while (ParseNextKey() && NextEntryOffset() < original);
-  }
-
-  virtual void Seek(const Slice& target) {
-    // Binary search in restart array to find the last restart point
-    // with a key < target
-    uint32_t left = 0;
-    uint32_t right = num_restarts_ - 1;
-    while (left < right) {
-      uint32_t mid = (left + right + 1) / 2;
-      uint32_t region_offset = GetRestartPoint(mid);
-      uint32_t shared, non_shared, value_length;
-      const char* key_ptr =
-          DecodeEntry(data_ + region_offset, data_ + restarts_, &shared,
-                      &non_shared, &value_length);
-      if (key_ptr == nullptr || (shared != 0)) {
-        CorruptionError();
-        return;
-      }
-      Slice mid_key(key_ptr, non_shared);
-      if (Compare(mid_key, target) < 0) {
-        // Key at "mid" is smaller than "target".  Therefore all
-        // blocks before "mid" are uninteresting.
-        left = mid;
-      } else {
-        // Key at "mid" is >= "target".  Therefore all blocks at or
-        // after "mid" are uninteresting.
-        right = mid - 1;
-      }
-    }
-
-    // Linear search (within restart block) for first key >= target
-    SeekToRestartPoint(left);
-    while (true) {
-      if (!ParseNextKey()) {
-        return;
-      }
-      if (Compare(key_, target) >= 0) {
-        return;
-      }
-    }
-  }
-
-  virtual void SeekToFirst() {
-    SeekToRestartPoint(0);
-    ParseNextKey();
-  }
-
-  virtual void SeekToLast() {
-    SeekToRestartPoint(num_restarts_ - 1);
-    while (ParseNextKey() && NextEntryOffset() < restarts_) {
-      // Keep skipping
-    }
-  }
-
- private:
-  void CorruptionError() {
-    current_ = restarts_;
-    restart_index_ = num_restarts_;
-    status_ = Status::Corruption("bad entry in block");
-    key_.clear();
-    value_.clear();
-  }
-
-  bool ParseNextKey() {
-    current_ = NextEntryOffset();
-    const char* p = data_ + current_;
-    const char* limit = data_ + restarts_;  // Restarts come right after data
-    if (p >= limit) {
-      // No more entries to return.  Mark as invalid.
-      current_ = restarts_;
-      restart_index_ = num_restarts_;
-      return false;
-    }
-
-    // Decode next entry
-    uint32_t shared, non_shared, value_length;
-    p = DecodeEntry(p, limit, &shared, &non_shared, &value_length);
-    if (p == nullptr || key_.size() < shared) {
-      CorruptionError();
-      return false;
-    } else {
-      key_.resize(shared);
-      key_.append(p, non_shared);
-      value_ = Slice(p + non_shared, value_length);
-      while (restart_index_ + 1 < num_restarts_ &&
-             GetRestartPoint(restart_index_ + 1) < current_) {
-        ++restart_index_;
-      }
-      return true;
-    }
-  }
-};
-
-Iterator* Block::NewIterator(const Comparator* comparator) {
-  if (size_ < sizeof(uint32_t)) {
-    return NewErrorIterator(Status::Corruption("bad block contents"));
-  }
-  const uint32_t num_restarts = NumRestarts();
-  if (num_restarts == 0) {
-    return NewEmptyIterator();
-  } else {
-    return new Iter(comparator, data_, restart_offset_, num_restarts);
-  }
-}
-
-}  // namespace leveldb
diff --git a/assign5/openTok/Pods/leveldb-library/table/block.h b/assign5/openTok/Pods/leveldb-library/table/block.h
deleted file mode 100644
index c8f1f7b..0000000
--- a/assign5/openTok/Pods/leveldb-library/table/block.h
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#ifndef STORAGE_LEVELDB_TABLE_BLOCK_H_
-#define STORAGE_LEVELDB_TABLE_BLOCK_H_
-
-#include <stddef.h>
-#include <stdint.h>
-
-#include "leveldb/iterator.h"
-
-namespace leveldb {
-
-struct BlockContents;
-class Comparator;
-
-class Block {
- public:
-  // Initialize the block with the specified contents.
-  explicit Block(const BlockContents& contents);
-
-  Block(const Block&) = delete;
-  Block& operator=(const Block&) = delete;
-
-  ~Block();
-
-  size_t size() const { return size_; }
-  Iterator* NewIterator(const Comparator* comparator);
-
- private:
-  class Iter;
-
-  uint32_t NumRestarts() const;
-
-  const char* data_;
-  size_t size_;
-  uint32_t restart_offset_;  // Offset in data_ of restart array
-  bool owned_;               // Block owns data_[]
-};
-
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_TABLE_BLOCK_H_
diff --git a/assign5/openTok/Pods/leveldb-library/table/block_builder.cc b/assign5/openTok/Pods/leveldb-library/table/block_builder.cc
deleted file mode 100644
index f7cb1b0..0000000
--- a/assign5/openTok/Pods/leveldb-library/table/block_builder.cc
+++ /dev/null
@@ -1,108 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-//
-// BlockBuilder generates blocks where keys are prefix-compressed:
-//
-// When we store a key, we drop the prefix shared with the previous
-// string.  This helps reduce the space requirement significantly.
-// Furthermore, once every K keys, we do not apply the prefix
-// compression and store the entire key.  We call this a "restart
-// point".  The tail end of the block stores the offsets of all of the
-// restart points, and can be used to do a binary search when looking
-// for a particular key.  Values are stored as-is (without compression)
-// immediately following the corresponding key.
-//
-// An entry for a particular key-value pair has the form:
-//     shared_bytes: varint32
-//     unshared_bytes: varint32
-//     value_length: varint32
-//     key_delta: char[unshared_bytes]
-//     value: char[value_length]
-// shared_bytes == 0 for restart points.
-//
-// The trailer of the block has the form:
-//     restarts: uint32[num_restarts]
-//     num_restarts: uint32
-// restarts[i] contains the offset within the block of the ith restart point.
-
-#include "table/block_builder.h"
-
-#include <assert.h>
-
-#include <algorithm>
-
-#include "leveldb/comparator.h"
-#include "leveldb/table_builder.h"
-#include "util/coding.h"
-
-namespace leveldb {
-
-BlockBuilder::BlockBuilder(const Options* options)
-    : options_(options), restarts_(), counter_(0), finished_(false) {
-  assert(options->block_restart_interval >= 1);
-  restarts_.push_back(0);  // First restart point is at offset 0
-}
-
-void BlockBuilder::Reset() {
-  buffer_.clear();
-  restarts_.clear();
-  restarts_.push_back(0);  // First restart point is at offset 0
-  counter_ = 0;
-  finished_ = false;
-  last_key_.clear();
-}
-
-size_t BlockBuilder::CurrentSizeEstimate() const {
-  return (buffer_.size() +                       // Raw data buffer
-          restarts_.size() * sizeof(uint32_t) +  // Restart array
-          sizeof(uint32_t));                     // Restart array length
-}
-
-Slice BlockBuilder::Finish() {
-  // Append restart array
-  for (size_t i = 0; i < restarts_.size(); i++) {
-    PutFixed32(&buffer_, restarts_[i]);
-  }
-  PutFixed32(&buffer_, restarts_.size());
-  finished_ = true;
-  return Slice(buffer_);
-}
-
-void BlockBuilder::Add(const Slice& key, const Slice& value) {
-  Slice last_key_piece(last_key_);
-  assert(!finished_);
-  assert(counter_ <= options_->block_restart_interval);
-  assert(buffer_.empty()  // No values yet?
-         || options_->comparator->Compare(key, last_key_piece) > 0);
-  size_t shared = 0;
-  if (counter_ < options_->block_restart_interval) {
-    // See how much sharing to do with previous string
-    const size_t min_length = std::min(last_key_piece.size(), key.size());
-    while ((shared < min_length) && (last_key_piece[shared] == key[shared])) {
-      shared++;
-    }
-  } else {
-    // Restart compression
-    restarts_.push_back(buffer_.size());
-    counter_ = 0;
-  }
-  const size_t non_shared = key.size() - shared;
-
-  // Add "<shared><non_shared><value_size>" to buffer_
-  PutVarint32(&buffer_, shared);
-  PutVarint32(&buffer_, non_shared);
-  PutVarint32(&buffer_, value.size());
-
-  // Add string delta to buffer_ followed by value
-  buffer_.append(key.data() + shared, non_shared);
-  buffer_.append(value.data(), value.size());
-
-  // Update state
-  last_key_.resize(shared);
-  last_key_.append(key.data() + shared, non_shared);
-  assert(Slice(last_key_) == key);
-  counter_++;
-}
-
-}  // namespace leveldb
diff --git a/assign5/openTok/Pods/leveldb-library/table/block_builder.h b/assign5/openTok/Pods/leveldb-library/table/block_builder.h
deleted file mode 100644
index f91f5e6..0000000
--- a/assign5/openTok/Pods/leveldb-library/table/block_builder.h
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#ifndef STORAGE_LEVELDB_TABLE_BLOCK_BUILDER_H_
-#define STORAGE_LEVELDB_TABLE_BLOCK_BUILDER_H_
-
-#include <stdint.h>
-
-#include <vector>
-
-#include "leveldb/slice.h"
-
-namespace leveldb {
-
-struct Options;
-
-class BlockBuilder {
- public:
-  explicit BlockBuilder(const Options* options);
-
-  BlockBuilder(const BlockBuilder&) = delete;
-  BlockBuilder& operator=(const BlockBuilder&) = delete;
-
-  // Reset the contents as if the BlockBuilder was just constructed.
-  void Reset();
-
-  // REQUIRES: Finish() has not been called since the last call to Reset().
-  // REQUIRES: key is larger than any previously added key
-  void Add(const Slice& key, const Slice& value);
-
-  // Finish building the block and return a slice that refers to the
-  // block contents.  The returned slice will remain valid for the
-  // lifetime of this builder or until Reset() is called.
-  Slice Finish();
-
-  // Returns an estimate of the current (uncompressed) size of the block
-  // we are building.
-  size_t CurrentSizeEstimate() const;
-
-  // Return true iff no entries have been added since the last Reset()
-  bool empty() const { return buffer_.empty(); }
-
- private:
-  const Options* options_;
-  std::string buffer_;              // Destination buffer
-  std::vector<uint32_t> restarts_;  // Restart points
-  int counter_;                     // Number of entries emitted since restart
-  bool finished_;                   // Has Finish() been called?
-  std::string last_key_;
-};
-
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_TABLE_BLOCK_BUILDER_H_
diff --git a/assign5/openTok/Pods/leveldb-library/table/filter_block.cc b/assign5/openTok/Pods/leveldb-library/table/filter_block.cc
deleted file mode 100644
index 09ec009..0000000
--- a/assign5/openTok/Pods/leveldb-library/table/filter_block.cc
+++ /dev/null
@@ -1,106 +0,0 @@
-// Copyright (c) 2012 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#include "table/filter_block.h"
-
-#include "leveldb/filter_policy.h"
-#include "util/coding.h"
-
-namespace leveldb {
-
-// See doc/table_format.md for an explanation of the filter block format.
-
-// Generate new filter every 2KB of data
-static const size_t kFilterBaseLg = 11;
-static const size_t kFilterBase = 1 << kFilterBaseLg;
-
-FilterBlockBuilder::FilterBlockBuilder(const FilterPolicy* policy)
-    : policy_(policy) {}
-
-void FilterBlockBuilder::StartBlock(uint64_t block_offset) {
-  uint64_t filter_index = (block_offset / kFilterBase);
-  assert(filter_index >= filter_offsets_.size());
-  while (filter_index > filter_offsets_.size()) {
-    GenerateFilter();
-  }
-}
-
-void FilterBlockBuilder::AddKey(const Slice& key) {
-  Slice k = key;
-  start_.push_back(keys_.size());
-  keys_.append(k.data(), k.size());
-}
-
-Slice FilterBlockBuilder::Finish() {
-  if (!start_.empty()) {
-    GenerateFilter();
-  }
-
-  // Append array of per-filter offsets
-  const uint32_t array_offset = result_.size();
-  for (size_t i = 0; i < filter_offsets_.size(); i++) {
-    PutFixed32(&result_, filter_offsets_[i]);
-  }
-
-  PutFixed32(&result_, array_offset);
-  result_.push_back(kFilterBaseLg);  // Save encoding parameter in result
-  return Slice(result_);
-}
-
-void FilterBlockBuilder::GenerateFilter() {
-  const size_t num_keys = start_.size();
-  if (num_keys == 0) {
-    // Fast path if there are no keys for this filter
-    filter_offsets_.push_back(result_.size());
-    return;
-  }
-
-  // Make list of keys from flattened key structure
-  start_.push_back(keys_.size());  // Simplify length computation
-  tmp_keys_.resize(num_keys);
-  for (size_t i = 0; i < num_keys; i++) {
-    const char* base = keys_.data() + start_[i];
-    size_t length = start_[i + 1] - start_[i];
-    tmp_keys_[i] = Slice(base, length);
-  }
-
-  // Generate filter for current set of keys and append to result_.
-  filter_offsets_.push_back(result_.size());
-  policy_->CreateFilter(&tmp_keys_[0], static_cast<int>(num_keys), &result_);
-
-  tmp_keys_.clear();
-  keys_.clear();
-  start_.clear();
-}
-
-FilterBlockReader::FilterBlockReader(const FilterPolicy* policy,
-                                     const Slice& contents)
-    : policy_(policy), data_(nullptr), offset_(nullptr), num_(0), base_lg_(0) {
-  size_t n = contents.size();
-  if (n < 5) return;  // 1 byte for base_lg_ and 4 for start of offset array
-  base_lg_ = contents[n - 1];
-  uint32_t last_word = DecodeFixed32(contents.data() + n - 5);
-  if (last_word > n - 5) return;
-  data_ = contents.data();
-  offset_ = data_ + last_word;
-  num_ = (n - 5 - last_word) / 4;
-}
-
-bool FilterBlockReader::KeyMayMatch(uint64_t block_offset, const Slice& key) {
-  uint64_t index = block_offset >> base_lg_;
-  if (index < num_) {
-    uint32_t start = DecodeFixed32(offset_ + index * 4);
-    uint32_t limit = DecodeFixed32(offset_ + index * 4 + 4);
-    if (start <= limit && limit <= static_cast<size_t>(offset_ - data_)) {
-      Slice filter = Slice(data_ + start, limit - start);
-      return policy_->KeyMayMatch(key, filter);
-    } else if (start == limit) {
-      // Empty filters do not match any keys
-      return false;
-    }
-  }
-  return true;  // Errors are treated as potential matches
-}
-
-}  // namespace leveldb
diff --git a/assign5/openTok/Pods/leveldb-library/table/filter_block.h b/assign5/openTok/Pods/leveldb-library/table/filter_block.h
deleted file mode 100644
index 73b5399..0000000
--- a/assign5/openTok/Pods/leveldb-library/table/filter_block.h
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright (c) 2012 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-//
-// A filter block is stored near the end of a Table file.  It contains
-// filters (e.g., bloom filters) for all data blocks in the table combined
-// into a single filter block.
-
-#ifndef STORAGE_LEVELDB_TABLE_FILTER_BLOCK_H_
-#define STORAGE_LEVELDB_TABLE_FILTER_BLOCK_H_
-
-#include <stddef.h>
-#include <stdint.h>
-
-#include <string>
-#include <vector>
-
-#include "leveldb/slice.h"
-#include "util/hash.h"
-
-namespace leveldb {
-
-class FilterPolicy;
-
-// A FilterBlockBuilder is used to construct all of the filters for a
-// particular Table.  It generates a single string which is stored as
-// a special block in the Table.
-//
-// The sequence of calls to FilterBlockBuilder must match the regexp:
-//      (StartBlock AddKey*)* Finish
-class FilterBlockBuilder {
- public:
-  explicit FilterBlockBuilder(const FilterPolicy*);
-
-  FilterBlockBuilder(const FilterBlockBuilder&) = delete;
-  FilterBlockBuilder& operator=(const FilterBlockBuilder&) = delete;
-
-  void StartBlock(uint64_t block_offset);
-  void AddKey(const Slice& key);
-  Slice Finish();
-
- private:
-  void GenerateFilter();
-
-  const FilterPolicy* policy_;
-  std::string keys_;             // Flattened key contents
-  std::vector<size_t> start_;    // Starting index in keys_ of each key
-  std::string result_;           // Filter data computed so far
-  std::vector<Slice> tmp_keys_;  // policy_->CreateFilter() argument
-  std::vector<uint32_t> filter_offsets_;
-};
-
-class FilterBlockReader {
- public:
-  // REQUIRES: "contents" and *policy must stay live while *this is live.
-  FilterBlockReader(const FilterPolicy* policy, const Slice& contents);
-  bool KeyMayMatch(uint64_t block_offset, const Slice& key);
-
- private:
-  const FilterPolicy* policy_;
-  const char* data_;    // Pointer to filter data (at block-start)
-  const char* offset_;  // Pointer to beginning of offset array (at block-end)
-  size_t num_;          // Number of entries in offset array
-  size_t base_lg_;      // Encoding parameter (see kFilterBaseLg in .cc file)
-};
-
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_TABLE_FILTER_BLOCK_H_
diff --git a/assign5/openTok/Pods/leveldb-library/table/format.cc b/assign5/openTok/Pods/leveldb-library/table/format.cc
deleted file mode 100644
index e183977..0000000
--- a/assign5/openTok/Pods/leveldb-library/table/format.cc
+++ /dev/null
@@ -1,141 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#include "table/format.h"
-
-#include "leveldb/env.h"
-#include "port/port.h"
-#include "table/block.h"
-#include "util/coding.h"
-#include "util/crc32c.h"
-
-namespace leveldb {
-
-void BlockHandle::EncodeTo(std::string* dst) const {
-  // Sanity check that all fields have been set
-  assert(offset_ != ~static_cast<uint64_t>(0));
-  assert(size_ != ~static_cast<uint64_t>(0));
-  PutVarint64(dst, offset_);
-  PutVarint64(dst, size_);
-}
-
-Status BlockHandle::DecodeFrom(Slice* input) {
-  if (GetVarint64(input, &offset_) && GetVarint64(input, &size_)) {
-    return Status::OK();
-  } else {
-    return Status::Corruption("bad block handle");
-  }
-}
-
-void Footer::EncodeTo(std::string* dst) const {
-  const size_t original_size = dst->size();
-  metaindex_handle_.EncodeTo(dst);
-  index_handle_.EncodeTo(dst);
-  dst->resize(2 * BlockHandle::kMaxEncodedLength);  // Padding
-  PutFixed32(dst, static_cast<uint32_t>(kTableMagicNumber & 0xffffffffu));
-  PutFixed32(dst, static_cast<uint32_t>(kTableMagicNumber >> 32));
-  assert(dst->size() == original_size + kEncodedLength);
-  (void)original_size;  // Disable unused variable warning.
-}
-
-Status Footer::DecodeFrom(Slice* input) {
-  const char* magic_ptr = input->data() + kEncodedLength - 8;
-  const uint32_t magic_lo = DecodeFixed32(magic_ptr);
-  const uint32_t magic_hi = DecodeFixed32(magic_ptr + 4);
-  const uint64_t magic = ((static_cast<uint64_t>(magic_hi) << 32) |
-                          (static_cast<uint64_t>(magic_lo)));
-  if (magic != kTableMagicNumber) {
-    return Status::Corruption("not an sstable (bad magic number)");
-  }
-
-  Status result = metaindex_handle_.DecodeFrom(input);
-  if (result.ok()) {
-    result = index_handle_.DecodeFrom(input);
-  }
-  if (result.ok()) {
-    // We skip over any leftover data (just padding for now) in "input"
-    const char* end = magic_ptr + 8;
-    *input = Slice(end, input->data() + input->size() - end);
-  }
-  return result;
-}
-
-Status ReadBlock(RandomAccessFile* file, const ReadOptions& options,
-                 const BlockHandle& handle, BlockContents* result) {
-  result->data = Slice();
-  result->cachable = false;
-  result->heap_allocated = false;
-
-  // Read the block contents as well as the type/crc footer.
-  // See table_builder.cc for the code that built this structure.
-  size_t n = static_cast<size_t>(handle.size());
-  char* buf = new char[n + kBlockTrailerSize];
-  Slice contents;
-  Status s = file->Read(handle.offset(), n + kBlockTrailerSize, &contents, buf);
-  if (!s.ok()) {
-    delete[] buf;
-    return s;
-  }
-  if (contents.size() != n + kBlockTrailerSize) {
-    delete[] buf;
-    return Status::Corruption("truncated block read");
-  }
-
-  // Check the crc of the type and the block contents
-  const char* data = contents.data();  // Pointer to where Read put the data
-  if (options.verify_checksums) {
-    const uint32_t crc = crc32c::Unmask(DecodeFixed32(data + n + 1));
-    const uint32_t actual = crc32c::Value(data, n + 1);
-    if (actual != crc) {
-      delete[] buf;
-      s = Status::Corruption("block checksum mismatch");
-      return s;
-    }
-  }
-
-  switch (data[n]) {
-    case kNoCompression:
-      if (data != buf) {
-        // File implementation gave us pointer to some other data.
-        // Use it directly under the assumption that it will be live
-        // while the file is open.
-        delete[] buf;
-        result->data = Slice(data, n);
-        result->heap_allocated = false;
-        result->cachable = false;  // Do not double-cache
-      } else {
-        result->data = Slice(buf, n);
-        result->heap_allocated = true;
-        result->cachable = true;
-      }
-
-      // Ok
-      break;
-    case kSnappyCompression: {
-      size_t ulength = 0;
-      if (!port::Snappy_GetUncompressedLength(data, n, &ulength)) {
-        delete[] buf;
-        return Status::Corruption("corrupted compressed block contents");
-      }
-      char* ubuf = new char[ulength];
-      if (!port::Snappy_Uncompress(data, n, ubuf)) {
-        delete[] buf;
-        delete[] ubuf;
-        return Status::Corruption("corrupted compressed block contents");
-      }
-      delete[] buf;
-      result->data = Slice(ubuf, ulength);
-      result->heap_allocated = true;
-      result->cachable = true;
-      break;
-    }
-    default:
-      delete[] buf;
-      return Status::Corruption("bad block type");
-  }
-
-  return Status::OK();
-}
-
-}  // namespace leveldb
diff --git a/assign5/openTok/Pods/leveldb-library/table/format.h b/assign5/openTok/Pods/leveldb-library/table/format.h
deleted file mode 100644
index 2ad145c..0000000
--- a/assign5/openTok/Pods/leveldb-library/table/format.h
+++ /dev/null
@@ -1,100 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#ifndef STORAGE_LEVELDB_TABLE_FORMAT_H_
-#define STORAGE_LEVELDB_TABLE_FORMAT_H_
-
-#include <stdint.h>
-
-#include <string>
-
-#include "leveldb/slice.h"
-#include "leveldb/status.h"
-#include "leveldb/table_builder.h"
-
-namespace leveldb {
-
-class Block;
-class RandomAccessFile;
-struct ReadOptions;
-
-// BlockHandle is a pointer to the extent of a file that stores a data
-// block or a meta block.
-class BlockHandle {
- public:
-  // Maximum encoding length of a BlockHandle
-  enum { kMaxEncodedLength = 10 + 10 };
-
-  BlockHandle();
-
-  // The offset of the block in the file.
-  uint64_t offset() const { return offset_; }
-  void set_offset(uint64_t offset) { offset_ = offset; }
-
-  // The size of the stored block
-  uint64_t size() const { return size_; }
-  void set_size(uint64_t size) { size_ = size; }
-
-  void EncodeTo(std::string* dst) const;
-  Status DecodeFrom(Slice* input);
-
- private:
-  uint64_t offset_;
-  uint64_t size_;
-};
-
-// Footer encapsulates the fixed information stored at the tail
-// end of every table file.
-class Footer {
- public:
-  // Encoded length of a Footer.  Note that the serialization of a
-  // Footer will always occupy exactly this many bytes.  It consists
-  // of two block handles and a magic number.
-  enum { kEncodedLength = 2 * BlockHandle::kMaxEncodedLength + 8 };
-
-  Footer() {}
-
-  // The block handle for the metaindex block of the table
-  const BlockHandle& metaindex_handle() const { return metaindex_handle_; }
-  void set_metaindex_handle(const BlockHandle& h) { metaindex_handle_ = h; }
-
-  // The block handle for the index block of the table
-  const BlockHandle& index_handle() const { return index_handle_; }
-  void set_index_handle(const BlockHandle& h) { index_handle_ = h; }
-
-  void EncodeTo(std::string* dst) const;
-  Status DecodeFrom(Slice* input);
-
- private:
-  BlockHandle metaindex_handle_;
-  BlockHandle index_handle_;
-};
-
-// kTableMagicNumber was picked by running
-//    echo http://code.google.com/p/leveldb/ | sha1sum
-// and taking the leading 64 bits.
-static const uint64_t kTableMagicNumber = 0xdb4775248b80fb57ull;
-
-// 1-byte type + 32-bit crc
-static const size_t kBlockTrailerSize = 5;
-
-struct BlockContents {
-  Slice data;           // Actual contents of data
-  bool cachable;        // True iff data can be cached
-  bool heap_allocated;  // True iff caller should delete[] data.data()
-};
-
-// Read the block identified by "handle" from "file".  On failure
-// return non-OK.  On success fill *result and return OK.
-Status ReadBlock(RandomAccessFile* file, const ReadOptions& options,
-                 const BlockHandle& handle, BlockContents* result);
-
-// Implementation details follow.  Clients should ignore,
-
-inline BlockHandle::BlockHandle()
-    : offset_(~static_cast<uint64_t>(0)), size_(~static_cast<uint64_t>(0)) {}
-
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_TABLE_FORMAT_H_
diff --git a/assign5/openTok/Pods/leveldb-library/table/iterator.cc b/assign5/openTok/Pods/leveldb-library/table/iterator.cc
deleted file mode 100644
index dfef083..0000000
--- a/assign5/openTok/Pods/leveldb-library/table/iterator.cc
+++ /dev/null
@@ -1,76 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#include "leveldb/iterator.h"
-
-namespace leveldb {
-
-Iterator::Iterator() {
-  cleanup_head_.function = nullptr;
-  cleanup_head_.next = nullptr;
-}
-
-Iterator::~Iterator() {
-  if (!cleanup_head_.IsEmpty()) {
-    cleanup_head_.Run();
-    for (CleanupNode* node = cleanup_head_.next; node != nullptr;) {
-      node->Run();
-      CleanupNode* next_node = node->next;
-      delete node;
-      node = next_node;
-    }
-  }
-}
-
-void Iterator::RegisterCleanup(CleanupFunction func, void* arg1, void* arg2) {
-  assert(func != nullptr);
-  CleanupNode* node;
-  if (cleanup_head_.IsEmpty()) {
-    node = &cleanup_head_;
-  } else {
-    node = new CleanupNode();
-    node->next = cleanup_head_.next;
-    cleanup_head_.next = node;
-  }
-  node->function = func;
-  node->arg1 = arg1;
-  node->arg2 = arg2;
-}
-
-namespace {
-
-class EmptyIterator : public Iterator {
- public:
-  EmptyIterator(const Status& s) : status_(s) {}
-  ~EmptyIterator() override = default;
-
-  bool Valid() const override { return false; }
-  void Seek(const Slice& target) override {}
-  void SeekToFirst() override {}
-  void SeekToLast() override {}
-  void Next() override { assert(false); }
-  void Prev() override { assert(false); }
-  Slice key() const override {
-    assert(false);
-    return Slice();
-  }
-  Slice value() const override {
-    assert(false);
-    return Slice();
-  }
-  Status status() const override { return status_; }
-
- private:
-  Status status_;
-};
-
-}  // anonymous namespace
-
-Iterator* NewEmptyIterator() { return new EmptyIterator(Status::OK()); }
-
-Iterator* NewErrorIterator(const Status& status) {
-  return new EmptyIterator(status);
-}
-
-}  // namespace leveldb
diff --git a/assign5/openTok/Pods/leveldb-library/table/iterator_wrapper.h b/assign5/openTok/Pods/leveldb-library/table/iterator_wrapper.h
deleted file mode 100644
index c230572..0000000
--- a/assign5/openTok/Pods/leveldb-library/table/iterator_wrapper.h
+++ /dev/null
@@ -1,92 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#ifndef STORAGE_LEVELDB_TABLE_ITERATOR_WRAPPER_H_
-#define STORAGE_LEVELDB_TABLE_ITERATOR_WRAPPER_H_
-
-#include "leveldb/iterator.h"
-#include "leveldb/slice.h"
-
-namespace leveldb {
-
-// A internal wrapper class with an interface similar to Iterator that
-// caches the valid() and key() results for an underlying iterator.
-// This can help avoid virtual function calls and also gives better
-// cache locality.
-class IteratorWrapper {
- public:
-  IteratorWrapper() : iter_(nullptr), valid_(false) {}
-  explicit IteratorWrapper(Iterator* iter) : iter_(nullptr) { Set(iter); }
-  ~IteratorWrapper() { delete iter_; }
-  Iterator* iter() const { return iter_; }
-
-  // Takes ownership of "iter" and will delete it when destroyed, or
-  // when Set() is invoked again.
-  void Set(Iterator* iter) {
-    delete iter_;
-    iter_ = iter;
-    if (iter_ == nullptr) {
-      valid_ = false;
-    } else {
-      Update();
-    }
-  }
-
-  // Iterator interface methods
-  bool Valid() const { return valid_; }
-  Slice key() const {
-    assert(Valid());
-    return key_;
-  }
-  Slice value() const {
-    assert(Valid());
-    return iter_->value();
-  }
-  // Methods below require iter() != nullptr
-  Status status() const {
-    assert(iter_);
-    return iter_->status();
-  }
-  void Next() {
-    assert(iter_);
-    iter_->Next();
-    Update();
-  }
-  void Prev() {
-    assert(iter_);
-    iter_->Prev();
-    Update();
-  }
-  void Seek(const Slice& k) {
-    assert(iter_);
-    iter_->Seek(k);
-    Update();
-  }
-  void SeekToFirst() {
-    assert(iter_);
-    iter_->SeekToFirst();
-    Update();
-  }
-  void SeekToLast() {
-    assert(iter_);
-    iter_->SeekToLast();
-    Update();
-  }
-
- private:
-  void Update() {
-    valid_ = iter_->Valid();
-    if (valid_) {
-      key_ = iter_->key();
-    }
-  }
-
-  Iterator* iter_;
-  bool valid_;
-  Slice key_;
-};
-
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_TABLE_ITERATOR_WRAPPER_H_
diff --git a/assign5/openTok/Pods/leveldb-library/table/merger.cc b/assign5/openTok/Pods/leveldb-library/table/merger.cc
deleted file mode 100644
index 1bbc6cf..0000000
--- a/assign5/openTok/Pods/leveldb-library/table/merger.cc
+++ /dev/null
@@ -1,191 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#include "table/merger.h"
-
-#include "leveldb/comparator.h"
-#include "leveldb/iterator.h"
-#include "table/iterator_wrapper.h"
-
-namespace leveldb {
-
-namespace {
-class MergingIterator : public Iterator {
- public:
-  MergingIterator(const Comparator* comparator, Iterator** children, int n)
-      : comparator_(comparator),
-        children_(new IteratorWrapper[n]),
-        n_(n),
-        current_(nullptr),
-        direction_(kForward) {
-    for (int i = 0; i < n; i++) {
-      children_[i].Set(children[i]);
-    }
-  }
-
-  virtual ~MergingIterator() { delete[] children_; }
-
-  virtual bool Valid() const { return (current_ != nullptr); }
-
-  virtual void SeekToFirst() {
-    for (int i = 0; i < n_; i++) {
-      children_[i].SeekToFirst();
-    }
-    FindSmallest();
-    direction_ = kForward;
-  }
-
-  virtual void SeekToLast() {
-    for (int i = 0; i < n_; i++) {
-      children_[i].SeekToLast();
-    }
-    FindLargest();
-    direction_ = kReverse;
-  }
-
-  virtual void Seek(const Slice& target) {
-    for (int i = 0; i < n_; i++) {
-      children_[i].Seek(target);
-    }
-    FindSmallest();
-    direction_ = kForward;
-  }
-
-  virtual void Next() {
-    assert(Valid());
-
-    // Ensure that all children are positioned after key().
-    // If we are moving in the forward direction, it is already
-    // true for all of the non-current_ children since current_ is
-    // the smallest child and key() == current_->key().  Otherwise,
-    // we explicitly position the non-current_ children.
-    if (direction_ != kForward) {
-      for (int i = 0; i < n_; i++) {
-        IteratorWrapper* child = &children_[i];
-        if (child != current_) {
-          child->Seek(key());
-          if (child->Valid() &&
-              comparator_->Compare(key(), child->key()) == 0) {
-            child->Next();
-          }
-        }
-      }
-      direction_ = kForward;
-    }
-
-    current_->Next();
-    FindSmallest();
-  }
-
-  virtual void Prev() {
-    assert(Valid());
-
-    // Ensure that all children are positioned before key().
-    // If we are moving in the reverse direction, it is already
-    // true for all of the non-current_ children since current_ is
-    // the largest child and key() == current_->key().  Otherwise,
-    // we explicitly position the non-current_ children.
-    if (direction_ != kReverse) {
-      for (int i = 0; i < n_; i++) {
-        IteratorWrapper* child = &children_[i];
-        if (child != current_) {
-          child->Seek(key());
-          if (child->Valid()) {
-            // Child is at first entry >= key().  Step back one to be < key()
-            child->Prev();
-          } else {
-            // Child has no entries >= key().  Position at last entry.
-            child->SeekToLast();
-          }
-        }
-      }
-      direction_ = kReverse;
-    }
-
-    current_->Prev();
-    FindLargest();
-  }
-
-  virtual Slice key() const {
-    assert(Valid());
-    return current_->key();
-  }
-
-  virtual Slice value() const {
-    assert(Valid());
-    return current_->value();
-  }
-
-  virtual Status status() const {
-    Status status;
-    for (int i = 0; i < n_; i++) {
-      status = children_[i].status();
-      if (!status.ok()) {
-        break;
-      }
-    }
-    return status;
-  }
-
- private:
-  // Which direction is the iterator moving?
-  enum Direction { kForward, kReverse };
-
-  void FindSmallest();
-  void FindLargest();
-
-  // We might want to use a heap in case there are lots of children.
-  // For now we use a simple array since we expect a very small number
-  // of children in leveldb.
-  const Comparator* comparator_;
-  IteratorWrapper* children_;
-  int n_;
-  IteratorWrapper* current_;
-  Direction direction_;
-};
-
-void MergingIterator::FindSmallest() {
-  IteratorWrapper* smallest = nullptr;
-  for (int i = 0; i < n_; i++) {
-    IteratorWrapper* child = &children_[i];
-    if (child->Valid()) {
-      if (smallest == nullptr) {
-        smallest = child;
-      } else if (comparator_->Compare(child->key(), smallest->key()) < 0) {
-        smallest = child;
-      }
-    }
-  }
-  current_ = smallest;
-}
-
-void MergingIterator::FindLargest() {
-  IteratorWrapper* largest = nullptr;
-  for (int i = n_ - 1; i >= 0; i--) {
-    IteratorWrapper* child = &children_[i];
-    if (child->Valid()) {
-      if (largest == nullptr) {
-        largest = child;
-      } else if (comparator_->Compare(child->key(), largest->key()) > 0) {
-        largest = child;
-      }
-    }
-  }
-  current_ = largest;
-}
-}  // namespace
-
-Iterator* NewMergingIterator(const Comparator* comparator, Iterator** children,
-                             int n) {
-  assert(n >= 0);
-  if (n == 0) {
-    return NewEmptyIterator();
-  } else if (n == 1) {
-    return children[0];
-  } else {
-    return new MergingIterator(comparator, children, n);
-  }
-}
-
-}  // namespace leveldb
diff --git a/assign5/openTok/Pods/leveldb-library/table/merger.h b/assign5/openTok/Pods/leveldb-library/table/merger.h
deleted file mode 100644
index 41cedc5..0000000
--- a/assign5/openTok/Pods/leveldb-library/table/merger.h
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#ifndef STORAGE_LEVELDB_TABLE_MERGER_H_
-#define STORAGE_LEVELDB_TABLE_MERGER_H_
-
-namespace leveldb {
-
-class Comparator;
-class Iterator;
-
-// Return an iterator that provided the union of the data in
-// children[0,n-1].  Takes ownership of the child iterators and
-// will delete them when the result iterator is deleted.
-//
-// The result does no duplicate suppression.  I.e., if a particular
-// key is present in K child iterators, it will be yielded K times.
-//
-// REQUIRES: n >= 0
-Iterator* NewMergingIterator(const Comparator* comparator, Iterator** children,
-                             int n);
-
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_TABLE_MERGER_H_
diff --git a/assign5/openTok/Pods/leveldb-library/table/table.cc b/assign5/openTok/Pods/leveldb-library/table/table.cc
deleted file mode 100644
index b07bc88..0000000
--- a/assign5/openTok/Pods/leveldb-library/table/table.cc
+++ /dev/null
@@ -1,273 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#include "leveldb/table.h"
-
-#include "leveldb/cache.h"
-#include "leveldb/comparator.h"
-#include "leveldb/env.h"
-#include "leveldb/filter_policy.h"
-#include "leveldb/options.h"
-#include "table/block.h"
-#include "table/filter_block.h"
-#include "table/format.h"
-#include "table/two_level_iterator.h"
-#include "util/coding.h"
-
-namespace leveldb {
-
-struct Table::Rep {
-  ~Rep() {
-    delete filter;
-    delete[] filter_data;
-    delete index_block;
-  }
-
-  Options options;
-  Status status;
-  RandomAccessFile* file;
-  uint64_t cache_id;
-  FilterBlockReader* filter;
-  const char* filter_data;
-
-  BlockHandle metaindex_handle;  // Handle to metaindex_block: saved from footer
-  Block* index_block;
-};
-
-Status Table::Open(const Options& options, RandomAccessFile* file,
-                   uint64_t size, Table** table) {
-  *table = nullptr;
-  if (size < Footer::kEncodedLength) {
-    return Status::Corruption("file is too short to be an sstable");
-  }
-
-  char footer_space[Footer::kEncodedLength];
-  Slice footer_input;
-  Status s = file->Read(size - Footer::kEncodedLength, Footer::kEncodedLength,
-                        &footer_input, footer_space);
-  if (!s.ok()) return s;
-
-  Footer footer;
-  s = footer.DecodeFrom(&footer_input);
-  if (!s.ok()) return s;
-
-  // Read the index block
-  BlockContents index_block_contents;
-  if (s.ok()) {
-    ReadOptions opt;
-    if (options.paranoid_checks) {
-      opt.verify_checksums = true;
-    }
-    s = ReadBlock(file, opt, footer.index_handle(), &index_block_contents);
-  }
-
-  if (s.ok()) {
-    // We've successfully read the footer and the index block: we're
-    // ready to serve requests.
-    Block* index_block = new Block(index_block_contents);
-    Rep* rep = new Table::Rep;
-    rep->options = options;
-    rep->file = file;
-    rep->metaindex_handle = footer.metaindex_handle();
-    rep->index_block = index_block;
-    rep->cache_id = (options.block_cache ? options.block_cache->NewId() : 0);
-    rep->filter_data = nullptr;
-    rep->filter = nullptr;
-    *table = new Table(rep);
-    (*table)->ReadMeta(footer);
-  }
-
-  return s;
-}
-
-void Table::ReadMeta(const Footer& footer) {
-  if (rep_->options.filter_policy == nullptr) {
-    return;  // Do not need any metadata
-  }
-
-  // TODO(sanjay): Skip this if footer.metaindex_handle() size indicates
-  // it is an empty block.
-  ReadOptions opt;
-  if (rep_->options.paranoid_checks) {
-    opt.verify_checksums = true;
-  }
-  BlockContents contents;
-  if (!ReadBlock(rep_->file, opt, footer.metaindex_handle(), &contents).ok()) {
-    // Do not propagate errors since meta info is not needed for operation
-    return;
-  }
-  Block* meta = new Block(contents);
-
-  Iterator* iter = meta->NewIterator(BytewiseComparator());
-  std::string key = "filter.";
-  key.append(rep_->options.filter_policy->Name());
-  iter->Seek(key);
-  if (iter->Valid() && iter->key() == Slice(key)) {
-    ReadFilter(iter->value());
-  }
-  delete iter;
-  delete meta;
-}
-
-void Table::ReadFilter(const Slice& filter_handle_value) {
-  Slice v = filter_handle_value;
-  BlockHandle filter_handle;
-  if (!filter_handle.DecodeFrom(&v).ok()) {
-    return;
-  }
-
-  // We might want to unify with ReadBlock() if we start
-  // requiring checksum verification in Table::Open.
-  ReadOptions opt;
-  if (rep_->options.paranoid_checks) {
-    opt.verify_checksums = true;
-  }
-  BlockContents block;
-  if (!ReadBlock(rep_->file, opt, filter_handle, &block).ok()) {
-    return;
-  }
-  if (block.heap_allocated) {
-    rep_->filter_data = block.data.data();  // Will need to delete later
-  }
-  rep_->filter = new FilterBlockReader(rep_->options.filter_policy, block.data);
-}
-
-Table::~Table() { delete rep_; }
-
-static void DeleteBlock(void* arg, void* ignored) {
-  delete reinterpret_cast<Block*>(arg);
-}
-
-static void DeleteCachedBlock(const Slice& key, void* value) {
-  Block* block = reinterpret_cast<Block*>(value);
-  delete block;
-}
-
-static void ReleaseBlock(void* arg, void* h) {
-  Cache* cache = reinterpret_cast<Cache*>(arg);
-  Cache::Handle* handle = reinterpret_cast<Cache::Handle*>(h);
-  cache->Release(handle);
-}
-
-// Convert an index iterator value (i.e., an encoded BlockHandle)
-// into an iterator over the contents of the corresponding block.
-Iterator* Table::BlockReader(void* arg, const ReadOptions& options,
-                             const Slice& index_value) {
-  Table* table = reinterpret_cast<Table*>(arg);
-  Cache* block_cache = table->rep_->options.block_cache;
-  Block* block = nullptr;
-  Cache::Handle* cache_handle = nullptr;
-
-  BlockHandle handle;
-  Slice input = index_value;
-  Status s = handle.DecodeFrom(&input);
-  // We intentionally allow extra stuff in index_value so that we
-  // can add more features in the future.
-
-  if (s.ok()) {
-    BlockContents contents;
-    if (block_cache != nullptr) {
-      char cache_key_buffer[16];
-      EncodeFixed64(cache_key_buffer, table->rep_->cache_id);
-      EncodeFixed64(cache_key_buffer + 8, handle.offset());
-      Slice key(cache_key_buffer, sizeof(cache_key_buffer));
-      cache_handle = block_cache->Lookup(key);
-      if (cache_handle != nullptr) {
-        block = reinterpret_cast<Block*>(block_cache->Value(cache_handle));
-      } else {
-        s = ReadBlock(table->rep_->file, options, handle, &contents);
-        if (s.ok()) {
-          block = new Block(contents);
-          if (contents.cachable && options.fill_cache) {
-            cache_handle = block_cache->Insert(key, block, block->size(),
-                                               &DeleteCachedBlock);
-          }
-        }
-      }
-    } else {
-      s = ReadBlock(table->rep_->file, options, handle, &contents);
-      if (s.ok()) {
-        block = new Block(contents);
-      }
-    }
-  }
-
-  Iterator* iter;
-  if (block != nullptr) {
-    iter = block->NewIterator(table->rep_->options.comparator);
-    if (cache_handle == nullptr) {
-      iter->RegisterCleanup(&DeleteBlock, block, nullptr);
-    } else {
-      iter->RegisterCleanup(&ReleaseBlock, block_cache, cache_handle);
-    }
-  } else {
-    iter = NewErrorIterator(s);
-  }
-  return iter;
-}
-
-Iterator* Table::NewIterator(const ReadOptions& options) const {
-  return NewTwoLevelIterator(
-      rep_->index_block->NewIterator(rep_->options.comparator),
-      &Table::BlockReader, const_cast<Table*>(this), options);
-}
-
-Status Table::InternalGet(const ReadOptions& options, const Slice& k, void* arg,
-                          void (*handle_result)(void*, const Slice&,
-                                                const Slice&)) {
-  Status s;
-  Iterator* iiter = rep_->index_block->NewIterator(rep_->options.comparator);
-  iiter->Seek(k);
-  if (iiter->Valid()) {
-    Slice handle_value = iiter->value();
-    FilterBlockReader* filter = rep_->filter;
-    BlockHandle handle;
-    if (filter != nullptr && handle.DecodeFrom(&handle_value).ok() &&
-        !filter->KeyMayMatch(handle.offset(), k)) {
-      // Not found
-    } else {
-      Iterator* block_iter = BlockReader(this, options, iiter->value());
-      block_iter->Seek(k);
-      if (block_iter->Valid()) {
-        (*handle_result)(arg, block_iter->key(), block_iter->value());
-      }
-      s = block_iter->status();
-      delete block_iter;
-    }
-  }
-  if (s.ok()) {
-    s = iiter->status();
-  }
-  delete iiter;
-  return s;
-}
-
-uint64_t Table::ApproximateOffsetOf(const Slice& key) const {
-  Iterator* index_iter =
-      rep_->index_block->NewIterator(rep_->options.comparator);
-  index_iter->Seek(key);
-  uint64_t result;
-  if (index_iter->Valid()) {
-    BlockHandle handle;
-    Slice input = index_iter->value();
-    Status s = handle.DecodeFrom(&input);
-    if (s.ok()) {
-      result = handle.offset();
-    } else {
-      // Strange: we can't decode the block handle in the index block.
-      // We'll just return the offset of the metaindex block, which is
-      // close to the whole file size for this case.
-      result = rep_->metaindex_handle.offset();
-    }
-  } else {
-    // key is past the last key in the file.  Approximate the offset
-    // by returning the offset of the metaindex block (which is
-    // right near the end of the file).
-    result = rep_->metaindex_handle.offset();
-  }
-  delete index_iter;
-  return result;
-}
-
-}  // namespace leveldb
diff --git a/assign5/openTok/Pods/leveldb-library/table/table_builder.cc b/assign5/openTok/Pods/leveldb-library/table/table_builder.cc
deleted file mode 100644
index 278febf..0000000
--- a/assign5/openTok/Pods/leveldb-library/table/table_builder.cc
+++ /dev/null
@@ -1,265 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#include "leveldb/table_builder.h"
-
-#include <assert.h>
-
-#include "leveldb/comparator.h"
-#include "leveldb/env.h"
-#include "leveldb/filter_policy.h"
-#include "leveldb/options.h"
-#include "table/block_builder.h"
-#include "table/filter_block.h"
-#include "table/format.h"
-#include "util/coding.h"
-#include "util/crc32c.h"
-
-namespace leveldb {
-
-struct TableBuilder::Rep {
-  Rep(const Options& opt, WritableFile* f)
-      : options(opt),
-        index_block_options(opt),
-        file(f),
-        offset(0),
-        data_block(&options),
-        index_block(&index_block_options),
-        num_entries(0),
-        closed(false),
-        filter_block(opt.filter_policy == nullptr
-                         ? nullptr
-                         : new FilterBlockBuilder(opt.filter_policy)),
-        pending_index_entry(false) {
-    index_block_options.block_restart_interval = 1;
-  }
-
-  Options options;
-  Options index_block_options;
-  WritableFile* file;
-  uint64_t offset;
-  Status status;
-  BlockBuilder data_block;
-  BlockBuilder index_block;
-  std::string last_key;
-  int64_t num_entries;
-  bool closed;  // Either Finish() or Abandon() has been called.
-  FilterBlockBuilder* filter_block;
-
-  // We do not emit the index entry for a block until we have seen the
-  // first key for the next data block.  This allows us to use shorter
-  // keys in the index block.  For example, consider a block boundary
-  // between the keys "the quick brown fox" and "the who".  We can use
-  // "the r" as the key for the index block entry since it is >= all
-  // entries in the first block and < all entries in subsequent
-  // blocks.
-  //
-  // Invariant: r->pending_index_entry is true only if data_block is empty.
-  bool pending_index_entry;
-  BlockHandle pending_handle;  // Handle to add to index block
-
-  std::string compressed_output;
-};
-
-TableBuilder::TableBuilder(const Options& options, WritableFile* file)
-    : rep_(new Rep(options, file)) {
-  if (rep_->filter_block != nullptr) {
-    rep_->filter_block->StartBlock(0);
-  }
-}
-
-TableBuilder::~TableBuilder() {
-  assert(rep_->closed);  // Catch errors where caller forgot to call Finish()
-  delete rep_->filter_block;
-  delete rep_;
-}
-
-Status TableBuilder::ChangeOptions(const Options& options) {
-  // Note: if more fields are added to Options, update
-  // this function to catch changes that should not be allowed to
-  // change in the middle of building a Table.
-  if (options.comparator != rep_->options.comparator) {
-    return Status::InvalidArgument("changing comparator while building table");
-  }
-
-  // Note that any live BlockBuilders point to rep_->options and therefore
-  // will automatically pick up the updated options.
-  rep_->options = options;
-  rep_->index_block_options = options;
-  rep_->index_block_options.block_restart_interval = 1;
-  return Status::OK();
-}
-
-void TableBuilder::Add(const Slice& key, const Slice& value) {
-  Rep* r = rep_;
-  assert(!r->closed);
-  if (!ok()) return;
-  if (r->num_entries > 0) {
-    assert(r->options.comparator->Compare(key, Slice(r->last_key)) > 0);
-  }
-
-  if (r->pending_index_entry) {
-    assert(r->data_block.empty());
-    r->options.comparator->FindShortestSeparator(&r->last_key, key);
-    std::string handle_encoding;
-    r->pending_handle.EncodeTo(&handle_encoding);
-    r->index_block.Add(r->last_key, Slice(handle_encoding));
-    r->pending_index_entry = false;
-  }
-
-  if (r->filter_block != nullptr) {
-    r->filter_block->AddKey(key);
-  }
-
-  r->last_key.assign(key.data(), key.size());
-  r->num_entries++;
-  r->data_block.Add(key, value);
-
-  const size_t estimated_block_size = r->data_block.CurrentSizeEstimate();
-  if (estimated_block_size >= r->options.block_size) {
-    Flush();
-  }
-}
-
-void TableBuilder::Flush() {
-  Rep* r = rep_;
-  assert(!r->closed);
-  if (!ok()) return;
-  if (r->data_block.empty()) return;
-  assert(!r->pending_index_entry);
-  WriteBlock(&r->data_block, &r->pending_handle);
-  if (ok()) {
-    r->pending_index_entry = true;
-    r->status = r->file->Flush();
-  }
-  if (r->filter_block != nullptr) {
-    r->filter_block->StartBlock(r->offset);
-  }
-}
-
-void TableBuilder::WriteBlock(BlockBuilder* block, BlockHandle* handle) {
-  // File format contains a sequence of blocks where each block has:
-  //    block_data: uint8[n]
-  //    type: uint8
-  //    crc: uint32
-  assert(ok());
-  Rep* r = rep_;
-  Slice raw = block->Finish();
-
-  Slice block_contents;
-  CompressionType type = r->options.compression;
-  // TODO(postrelease): Support more compression options: zlib?
-  switch (type) {
-    case kNoCompression:
-      block_contents = raw;
-      break;
-
-    case kSnappyCompression: {
-      std::string* compressed = &r->compressed_output;
-      if (port::Snappy_Compress(raw.data(), raw.size(), compressed) &&
-          compressed->size() < raw.size() - (raw.size() / 8u)) {
-        block_contents = *compressed;
-      } else {
-        // Snappy not supported, or compressed less than 12.5%, so just
-        // store uncompressed form
-        block_contents = raw;
-        type = kNoCompression;
-      }
-      break;
-    }
-  }
-  WriteRawBlock(block_contents, type, handle);
-  r->compressed_output.clear();
-  block->Reset();
-}
-
-void TableBuilder::WriteRawBlock(const Slice& block_contents,
-                                 CompressionType type, BlockHandle* handle) {
-  Rep* r = rep_;
-  handle->set_offset(r->offset);
-  handle->set_size(block_contents.size());
-  r->status = r->file->Append(block_contents);
-  if (r->status.ok()) {
-    char trailer[kBlockTrailerSize];
-    trailer[0] = type;
-    uint32_t crc = crc32c::Value(block_contents.data(), block_contents.size());
-    crc = crc32c::Extend(crc, trailer, 1);  // Extend crc to cover block type
-    EncodeFixed32(trailer + 1, crc32c::Mask(crc));
-    r->status = r->file->Append(Slice(trailer, kBlockTrailerSize));
-    if (r->status.ok()) {
-      r->offset += block_contents.size() + kBlockTrailerSize;
-    }
-  }
-}
-
-Status TableBuilder::status() const { return rep_->status; }
-
-Status TableBuilder::Finish() {
-  Rep* r = rep_;
-  Flush();
-  assert(!r->closed);
-  r->closed = true;
-
-  BlockHandle filter_block_handle, metaindex_block_handle, index_block_handle;
-
-  // Write filter block
-  if (ok() && r->filter_block != nullptr) {
-    WriteRawBlock(r->filter_block->Finish(), kNoCompression,
-                  &filter_block_handle);
-  }
-
-  // Write metaindex block
-  if (ok()) {
-    BlockBuilder meta_index_block(&r->options);
-    if (r->filter_block != nullptr) {
-      // Add mapping from "filter.Name" to location of filter data
-      std::string key = "filter.";
-      key.append(r->options.filter_policy->Name());
-      std::string handle_encoding;
-      filter_block_handle.EncodeTo(&handle_encoding);
-      meta_index_block.Add(key, handle_encoding);
-    }
-
-    // TODO(postrelease): Add stats and other meta blocks
-    WriteBlock(&meta_index_block, &metaindex_block_handle);
-  }
-
-  // Write index block
-  if (ok()) {
-    if (r->pending_index_entry) {
-      r->options.comparator->FindShortSuccessor(&r->last_key);
-      std::string handle_encoding;
-      r->pending_handle.EncodeTo(&handle_encoding);
-      r->index_block.Add(r->last_key, Slice(handle_encoding));
-      r->pending_index_entry = false;
-    }
-    WriteBlock(&r->index_block, &index_block_handle);
-  }
-
-  // Write footer
-  if (ok()) {
-    Footer footer;
-    footer.set_metaindex_handle(metaindex_block_handle);
-    footer.set_index_handle(index_block_handle);
-    std::string footer_encoding;
-    footer.EncodeTo(&footer_encoding);
-    r->status = r->file->Append(footer_encoding);
-    if (r->status.ok()) {
-      r->offset += footer_encoding.size();
-    }
-  }
-  return r->status;
-}
-
-void TableBuilder::Abandon() {
-  Rep* r = rep_;
-  assert(!r->closed);
-  r->closed = true;
-}
-
-uint64_t TableBuilder::NumEntries() const { return rep_->num_entries; }
-
-uint64_t TableBuilder::FileSize() const { return rep_->offset; }
-
-}  // namespace leveldb
diff --git a/assign5/openTok/Pods/leveldb-library/table/two_level_iterator.cc b/assign5/openTok/Pods/leveldb-library/table/two_level_iterator.cc
deleted file mode 100644
index 5340a4d..0000000
--- a/assign5/openTok/Pods/leveldb-library/table/two_level_iterator.cc
+++ /dev/null
@@ -1,171 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#include "table/two_level_iterator.h"
-
-#include "leveldb/table.h"
-#include "table/block.h"
-#include "table/format.h"
-#include "table/iterator_wrapper.h"
-
-namespace leveldb {
-
-namespace {
-
-typedef Iterator* (*BlockFunction)(void*, const ReadOptions&, const Slice&);
-
-class TwoLevelIterator : public Iterator {
- public:
-  TwoLevelIterator(Iterator* index_iter, BlockFunction block_function,
-                   void* arg, const ReadOptions& options);
-
-  virtual ~TwoLevelIterator();
-
-  virtual void Seek(const Slice& target);
-  virtual void SeekToFirst();
-  virtual void SeekToLast();
-  virtual void Next();
-  virtual void Prev();
-
-  virtual bool Valid() const { return data_iter_.Valid(); }
-  virtual Slice key() const {
-    assert(Valid());
-    return data_iter_.key();
-  }
-  virtual Slice value() const {
-    assert(Valid());
-    return data_iter_.value();
-  }
-  virtual Status status() const {
-    // It'd be nice if status() returned a const Status& instead of a Status
-    if (!index_iter_.status().ok()) {
-      return index_iter_.status();
-    } else if (data_iter_.iter() != nullptr && !data_iter_.status().ok()) {
-      return data_iter_.status();
-    } else {
-      return status_;
-    }
-  }
-
- private:
-  void SaveError(const Status& s) {
-    if (status_.ok() && !s.ok()) status_ = s;
-  }
-  void SkipEmptyDataBlocksForward();
-  void SkipEmptyDataBlocksBackward();
-  void SetDataIterator(Iterator* data_iter);
-  void InitDataBlock();
-
-  BlockFunction block_function_;
-  void* arg_;
-  const ReadOptions options_;
-  Status status_;
-  IteratorWrapper index_iter_;
-  IteratorWrapper data_iter_;  // May be nullptr
-  // If data_iter_ is non-null, then "data_block_handle_" holds the
-  // "index_value" passed to block_function_ to create the data_iter_.
-  std::string data_block_handle_;
-};
-
-TwoLevelIterator::TwoLevelIterator(Iterator* index_iter,
-                                   BlockFunction block_function, void* arg,
-                                   const ReadOptions& options)
-    : block_function_(block_function),
-      arg_(arg),
-      options_(options),
-      index_iter_(index_iter),
-      data_iter_(nullptr) {}
-
-TwoLevelIterator::~TwoLevelIterator() {}
-
-void TwoLevelIterator::Seek(const Slice& target) {
-  index_iter_.Seek(target);
-  InitDataBlock();
-  if (data_iter_.iter() != nullptr) data_iter_.Seek(target);
-  SkipEmptyDataBlocksForward();
-}
-
-void TwoLevelIterator::SeekToFirst() {
-  index_iter_.SeekToFirst();
-  InitDataBlock();
-  if (data_iter_.iter() != nullptr) data_iter_.SeekToFirst();
-  SkipEmptyDataBlocksForward();
-}
-
-void TwoLevelIterator::SeekToLast() {
-  index_iter_.SeekToLast();
-  InitDataBlock();
-  if (data_iter_.iter() != nullptr) data_iter_.SeekToLast();
-  SkipEmptyDataBlocksBackward();
-}
-
-void TwoLevelIterator::Next() {
-  assert(Valid());
-  data_iter_.Next();
-  SkipEmptyDataBlocksForward();
-}
-
-void TwoLevelIterator::Prev() {
-  assert(Valid());
-  data_iter_.Prev();
-  SkipEmptyDataBlocksBackward();
-}
-
-void TwoLevelIterator::SkipEmptyDataBlocksForward() {
-  while (data_iter_.iter() == nullptr || !data_iter_.Valid()) {
-    // Move to next block
-    if (!index_iter_.Valid()) {
-      SetDataIterator(nullptr);
-      return;
-    }
-    index_iter_.Next();
-    InitDataBlock();
-    if (data_iter_.iter() != nullptr) data_iter_.SeekToFirst();
-  }
-}
-
-void TwoLevelIterator::SkipEmptyDataBlocksBackward() {
-  while (data_iter_.iter() == nullptr || !data_iter_.Valid()) {
-    // Move to next block
-    if (!index_iter_.Valid()) {
-      SetDataIterator(nullptr);
-      return;
-    }
-    index_iter_.Prev();
-    InitDataBlock();
-    if (data_iter_.iter() != nullptr) data_iter_.SeekToLast();
-  }
-}
-
-void TwoLevelIterator::SetDataIterator(Iterator* data_iter) {
-  if (data_iter_.iter() != nullptr) SaveError(data_iter_.status());
-  data_iter_.Set(data_iter);
-}
-
-void TwoLevelIterator::InitDataBlock() {
-  if (!index_iter_.Valid()) {
-    SetDataIterator(nullptr);
-  } else {
-    Slice handle = index_iter_.value();
-    if (data_iter_.iter() != nullptr &&
-        handle.compare(data_block_handle_) == 0) {
-      // data_iter_ is already constructed with this iterator, so
-      // no need to change anything
-    } else {
-      Iterator* iter = (*block_function_)(arg_, options_, handle);
-      data_block_handle_.assign(handle.data(), handle.size());
-      SetDataIterator(iter);
-    }
-  }
-}
-
-}  // namespace
-
-Iterator* NewTwoLevelIterator(Iterator* index_iter,
-                              BlockFunction block_function, void* arg,
-                              const ReadOptions& options) {
-  return new TwoLevelIterator(index_iter, block_function, arg, options);
-}
-
-}  // namespace leveldb
diff --git a/assign5/openTok/Pods/leveldb-library/table/two_level_iterator.h b/assign5/openTok/Pods/leveldb-library/table/two_level_iterator.h
deleted file mode 100644
index 81ffe80..0000000
--- a/assign5/openTok/Pods/leveldb-library/table/two_level_iterator.h
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#ifndef STORAGE_LEVELDB_TABLE_TWO_LEVEL_ITERATOR_H_
-#define STORAGE_LEVELDB_TABLE_TWO_LEVEL_ITERATOR_H_
-
-#include "leveldb/iterator.h"
-
-namespace leveldb {
-
-struct ReadOptions;
-
-// Return a new two level iterator.  A two-level iterator contains an
-// index iterator whose values point to a sequence of blocks where
-// each block is itself a sequence of key,value pairs.  The returned
-// two-level iterator yields the concatenation of all key/value pairs
-// in the sequence of blocks.  Takes ownership of "index_iter" and
-// will delete it when no longer needed.
-//
-// Uses a supplied function to convert an index_iter value into
-// an iterator over the contents of the corresponding block.
-Iterator* NewTwoLevelIterator(
-    Iterator* index_iter,
-    Iterator* (*block_function)(void* arg, const ReadOptions& options,
-                                const Slice& index_value),
-    void* arg, const ReadOptions& options);
-
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_TABLE_TWO_LEVEL_ITERATOR_H_
diff --git a/assign5/openTok/Pods/leveldb-library/util/arena.cc b/assign5/openTok/Pods/leveldb-library/util/arena.cc
deleted file mode 100644
index 46e3b2e..0000000
--- a/assign5/openTok/Pods/leveldb-library/util/arena.cc
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#include "util/arena.h"
-
-namespace leveldb {
-
-static const int kBlockSize = 4096;
-
-Arena::Arena()
-    : alloc_ptr_(nullptr), alloc_bytes_remaining_(0), memory_usage_(0) {}
-
-Arena::~Arena() {
-  for (size_t i = 0; i < blocks_.size(); i++) {
-    delete[] blocks_[i];
-  }
-}
-
-char* Arena::AllocateFallback(size_t bytes) {
-  if (bytes > kBlockSize / 4) {
-    // Object is more than a quarter of our block size.  Allocate it separately
-    // to avoid wasting too much space in leftover bytes.
-    char* result = AllocateNewBlock(bytes);
-    return result;
-  }
-
-  // We waste the remaining space in the current block.
-  alloc_ptr_ = AllocateNewBlock(kBlockSize);
-  alloc_bytes_remaining_ = kBlockSize;
-
-  char* result = alloc_ptr_;
-  alloc_ptr_ += bytes;
-  alloc_bytes_remaining_ -= bytes;
-  return result;
-}
-
-char* Arena::AllocateAligned(size_t bytes) {
-  const int align = (sizeof(void*) > 8) ? sizeof(void*) : 8;
-  static_assert((align & (align - 1)) == 0,
-                "Pointer size should be a power of 2");
-  size_t current_mod = reinterpret_cast<uintptr_t>(alloc_ptr_) & (align - 1);
-  size_t slop = (current_mod == 0 ? 0 : align - current_mod);
-  size_t needed = bytes + slop;
-  char* result;
-  if (needed <= alloc_bytes_remaining_) {
-    result = alloc_ptr_ + slop;
-    alloc_ptr_ += needed;
-    alloc_bytes_remaining_ -= needed;
-  } else {
-    // AllocateFallback always returned aligned memory
-    result = AllocateFallback(bytes);
-  }
-  assert((reinterpret_cast<uintptr_t>(result) & (align - 1)) == 0);
-  return result;
-}
-
-char* Arena::AllocateNewBlock(size_t block_bytes) {
-  char* result = new char[block_bytes];
-  blocks_.push_back(result);
-  memory_usage_.fetch_add(block_bytes + sizeof(char*),
-                          std::memory_order_relaxed);
-  return result;
-}
-
-}  // namespace leveldb
diff --git a/assign5/openTok/Pods/leveldb-library/util/arena.h b/assign5/openTok/Pods/leveldb-library/util/arena.h
deleted file mode 100644
index 68fc55d..0000000
--- a/assign5/openTok/Pods/leveldb-library/util/arena.h
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#ifndef STORAGE_LEVELDB_UTIL_ARENA_H_
-#define STORAGE_LEVELDB_UTIL_ARENA_H_
-
-#include <atomic>
-#include <cassert>
-#include <cstddef>
-#include <cstdint>
-#include <vector>
-
-namespace leveldb {
-
-class Arena {
- public:
-  Arena();
-
-  Arena(const Arena&) = delete;
-  Arena& operator=(const Arena&) = delete;
-
-  ~Arena();
-
-  // Return a pointer to a newly allocated memory block of "bytes" bytes.
-  char* Allocate(size_t bytes);
-
-  // Allocate memory with the normal alignment guarantees provided by malloc.
-  char* AllocateAligned(size_t bytes);
-
-  // Returns an estimate of the total memory usage of data allocated
-  // by the arena.
-  size_t MemoryUsage() const {
-    return memory_usage_.load(std::memory_order_relaxed);
-  }
-
- private:
-  char* AllocateFallback(size_t bytes);
-  char* AllocateNewBlock(size_t block_bytes);
-
-  // Allocation state
-  char* alloc_ptr_;
-  size_t alloc_bytes_remaining_;
-
-  // Array of new[] allocated memory blocks
-  std::vector<char*> blocks_;
-
-  // Total memory usage of the arena.
-  //
-  // TODO(costan): This member is accessed via atomics, but the others are
-  //               accessed without any locking. Is this OK?
-  std::atomic<size_t> memory_usage_;
-};
-
-inline char* Arena::Allocate(size_t bytes) {
-  // The semantics of what to return are a bit messy if we allow
-  // 0-byte allocations, so we disallow them here (we don't need
-  // them for our internal use).
-  assert(bytes > 0);
-  if (bytes <= alloc_bytes_remaining_) {
-    char* result = alloc_ptr_;
-    alloc_ptr_ += bytes;
-    alloc_bytes_remaining_ -= bytes;
-    return result;
-  }
-  return AllocateFallback(bytes);
-}
-
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_UTIL_ARENA_H_
diff --git a/assign5/openTok/Pods/leveldb-library/util/bloom.cc b/assign5/openTok/Pods/leveldb-library/util/bloom.cc
deleted file mode 100644
index 7f97464..0000000
--- a/assign5/openTok/Pods/leveldb-library/util/bloom.cc
+++ /dev/null
@@ -1,92 +0,0 @@
-// Copyright (c) 2012 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#include "leveldb/filter_policy.h"
-
-#include "leveldb/slice.h"
-#include "util/hash.h"
-
-namespace leveldb {
-
-namespace {
-static uint32_t BloomHash(const Slice& key) {
-  return Hash(key.data(), key.size(), 0xbc9f1d34);
-}
-
-class BloomFilterPolicy : public FilterPolicy {
- public:
-  explicit BloomFilterPolicy(int bits_per_key) : bits_per_key_(bits_per_key) {
-    // We intentionally round down to reduce probing cost a little bit
-    k_ = static_cast<size_t>(bits_per_key * 0.69);  // 0.69 =~ ln(2)
-    if (k_ < 1) k_ = 1;
-    if (k_ > 30) k_ = 30;
-  }
-
-  virtual const char* Name() const { return "leveldb.BuiltinBloomFilter2"; }
-
-  virtual void CreateFilter(const Slice* keys, int n, std::string* dst) const {
-    // Compute bloom filter size (in both bits and bytes)
-    size_t bits = n * bits_per_key_;
-
-    // For small n, we can see a very high false positive rate.  Fix it
-    // by enforcing a minimum bloom filter length.
-    if (bits < 64) bits = 64;
-
-    size_t bytes = (bits + 7) / 8;
-    bits = bytes * 8;
-
-    const size_t init_size = dst->size();
-    dst->resize(init_size + bytes, 0);
-    dst->push_back(static_cast<char>(k_));  // Remember # of probes in filter
-    char* array = &(*dst)[init_size];
-    for (int i = 0; i < n; i++) {
-      // Use double-hashing to generate a sequence of hash values.
-      // See analysis in [Kirsch,Mitzenmacher 2006].
-      uint32_t h = BloomHash(keys[i]);
-      const uint32_t delta = (h >> 17) | (h << 15);  // Rotate right 17 bits
-      for (size_t j = 0; j < k_; j++) {
-        const uint32_t bitpos = h % bits;
-        array[bitpos / 8] |= (1 << (bitpos % 8));
-        h += delta;
-      }
-    }
-  }
-
-  virtual bool KeyMayMatch(const Slice& key, const Slice& bloom_filter) const {
-    const size_t len = bloom_filter.size();
-    if (len < 2) return false;
-
-    const char* array = bloom_filter.data();
-    const size_t bits = (len - 1) * 8;
-
-    // Use the encoded k so that we can read filters generated by
-    // bloom filters created using different parameters.
-    const size_t k = array[len - 1];
-    if (k > 30) {
-      // Reserved for potentially new encodings for short bloom filters.
-      // Consider it a match.
-      return true;
-    }
-
-    uint32_t h = BloomHash(key);
-    const uint32_t delta = (h >> 17) | (h << 15);  // Rotate right 17 bits
-    for (size_t j = 0; j < k; j++) {
-      const uint32_t bitpos = h % bits;
-      if ((array[bitpos / 8] & (1 << (bitpos % 8))) == 0) return false;
-      h += delta;
-    }
-    return true;
-  }
-
- private:
-  size_t bits_per_key_;
-  size_t k_;
-};
-}  // namespace
-
-const FilterPolicy* NewBloomFilterPolicy(int bits_per_key) {
-  return new BloomFilterPolicy(bits_per_key);
-}
-
-}  // namespace leveldb
diff --git a/assign5/openTok/Pods/leveldb-library/util/cache.cc b/assign5/openTok/Pods/leveldb-library/util/cache.cc
deleted file mode 100644
index 0f801cc..0000000
--- a/assign5/openTok/Pods/leveldb-library/util/cache.cc
+++ /dev/null
@@ -1,400 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#include <assert.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "leveldb/cache.h"
-#include "port/port.h"
-#include "port/thread_annotations.h"
-#include "util/hash.h"
-#include "util/mutexlock.h"
-
-namespace leveldb {
-
-Cache::~Cache() {}
-
-namespace {
-
-// LRU cache implementation
-//
-// Cache entries have an "in_cache" boolean indicating whether the cache has a
-// reference on the entry.  The only ways that this can become false without the
-// entry being passed to its "deleter" are via Erase(), via Insert() when
-// an element with a duplicate key is inserted, or on destruction of the cache.
-//
-// The cache keeps two linked lists of items in the cache.  All items in the
-// cache are in one list or the other, and never both.  Items still referenced
-// by clients but erased from the cache are in neither list.  The lists are:
-// - in-use:  contains the items currently referenced by clients, in no
-//   particular order.  (This list is used for invariant checking.  If we
-//   removed the check, elements that would otherwise be on this list could be
-//   left as disconnected singleton lists.)
-// - LRU:  contains the items not currently referenced by clients, in LRU order
-// Elements are moved between these lists by the Ref() and Unref() methods,
-// when they detect an element in the cache acquiring or losing its only
-// external reference.
-
-// An entry is a variable length heap-allocated structure.  Entries
-// are kept in a circular doubly linked list ordered by access time.
-struct LRUHandle {
-  void* value;
-  void (*deleter)(const Slice&, void* value);
-  LRUHandle* next_hash;
-  LRUHandle* next;
-  LRUHandle* prev;
-  size_t charge;  // TODO(opt): Only allow uint32_t?
-  size_t key_length;
-  bool in_cache;     // Whether entry is in the cache.
-  uint32_t refs;     // References, including cache reference, if present.
-  uint32_t hash;     // Hash of key(); used for fast sharding and comparisons
-  char key_data[1];  // Beginning of key
-
-  Slice key() const {
-    // next_ is only equal to this if the LRU handle is the list head of an
-    // empty list. List heads never have meaningful keys.
-    assert(next != this);
-
-    return Slice(key_data, key_length);
-  }
-};
-
-// We provide our own simple hash table since it removes a whole bunch
-// of porting hacks and is also faster than some of the built-in hash
-// table implementations in some of the compiler/runtime combinations
-// we have tested.  E.g., readrandom speeds up by ~5% over the g++
-// 4.4.3's builtin hashtable.
-class HandleTable {
- public:
-  HandleTable() : length_(0), elems_(0), list_(nullptr) { Resize(); }
-  ~HandleTable() { delete[] list_; }
-
-  LRUHandle* Lookup(const Slice& key, uint32_t hash) {
-    return *FindPointer(key, hash);
-  }
-
-  LRUHandle* Insert(LRUHandle* h) {
-    LRUHandle** ptr = FindPointer(h->key(), h->hash);
-    LRUHandle* old = *ptr;
-    h->next_hash = (old == nullptr ? nullptr : old->next_hash);
-    *ptr = h;
-    if (old == nullptr) {
-      ++elems_;
-      if (elems_ > length_) {
-        // Since each cache entry is fairly large, we aim for a small
-        // average linked list length (<= 1).
-        Resize();
-      }
-    }
-    return old;
-  }
-
-  LRUHandle* Remove(const Slice& key, uint32_t hash) {
-    LRUHandle** ptr = FindPointer(key, hash);
-    LRUHandle* result = *ptr;
-    if (result != nullptr) {
-      *ptr = result->next_hash;
-      --elems_;
-    }
-    return result;
-  }
-
- private:
-  // The table consists of an array of buckets where each bucket is
-  // a linked list of cache entries that hash into the bucket.
-  uint32_t length_;
-  uint32_t elems_;
-  LRUHandle** list_;
-
-  // Return a pointer to slot that points to a cache entry that
-  // matches key/hash.  If there is no such cache entry, return a
-  // pointer to the trailing slot in the corresponding linked list.
-  LRUHandle** FindPointer(const Slice& key, uint32_t hash) {
-    LRUHandle** ptr = &list_[hash & (length_ - 1)];
-    while (*ptr != nullptr && ((*ptr)->hash != hash || key != (*ptr)->key())) {
-      ptr = &(*ptr)->next_hash;
-    }
-    return ptr;
-  }
-
-  void Resize() {
-    uint32_t new_length = 4;
-    while (new_length < elems_) {
-      new_length *= 2;
-    }
-    LRUHandle** new_list = new LRUHandle*[new_length];
-    memset(new_list, 0, sizeof(new_list[0]) * new_length);
-    uint32_t count = 0;
-    for (uint32_t i = 0; i < length_; i++) {
-      LRUHandle* h = list_[i];
-      while (h != nullptr) {
-        LRUHandle* next = h->next_hash;
-        uint32_t hash = h->hash;
-        LRUHandle** ptr = &new_list[hash & (new_length - 1)];
-        h->next_hash = *ptr;
-        *ptr = h;
-        h = next;
-        count++;
-      }
-    }
-    assert(elems_ == count);
-    delete[] list_;
-    list_ = new_list;
-    length_ = new_length;
-  }
-};
-
-// A single shard of sharded cache.
-class LRUCache {
- public:
-  LRUCache();
-  ~LRUCache();
-
-  // Separate from constructor so caller can easily make an array of LRUCache
-  void SetCapacity(size_t capacity) { capacity_ = capacity; }
-
-  // Like Cache methods, but with an extra "hash" parameter.
-  Cache::Handle* Insert(const Slice& key, uint32_t hash, void* value,
-                        size_t charge,
-                        void (*deleter)(const Slice& key, void* value));
-  Cache::Handle* Lookup(const Slice& key, uint32_t hash);
-  void Release(Cache::Handle* handle);
-  void Erase(const Slice& key, uint32_t hash);
-  void Prune();
-  size_t TotalCharge() const {
-    MutexLock l(&mutex_);
-    return usage_;
-  }
-
- private:
-  void LRU_Remove(LRUHandle* e);
-  void LRU_Append(LRUHandle* list, LRUHandle* e);
-  void Ref(LRUHandle* e);
-  void Unref(LRUHandle* e);
-  bool FinishErase(LRUHandle* e) EXCLUSIVE_LOCKS_REQUIRED(mutex_);
-
-  // Initialized before use.
-  size_t capacity_;
-
-  // mutex_ protects the following state.
-  mutable port::Mutex mutex_;
-  size_t usage_ GUARDED_BY(mutex_);
-
-  // Dummy head of LRU list.
-  // lru.prev is newest entry, lru.next is oldest entry.
-  // Entries have refs==1 and in_cache==true.
-  LRUHandle lru_ GUARDED_BY(mutex_);
-
-  // Dummy head of in-use list.
-  // Entries are in use by clients, and have refs >= 2 and in_cache==true.
-  LRUHandle in_use_ GUARDED_BY(mutex_);
-
-  HandleTable table_ GUARDED_BY(mutex_);
-};
-
-LRUCache::LRUCache() : capacity_(0), usage_(0) {
-  // Make empty circular linked lists.
-  lru_.next = &lru_;
-  lru_.prev = &lru_;
-  in_use_.next = &in_use_;
-  in_use_.prev = &in_use_;
-}
-
-LRUCache::~LRUCache() {
-  assert(in_use_.next == &in_use_);  // Error if caller has an unreleased handle
-  for (LRUHandle* e = lru_.next; e != &lru_;) {
-    LRUHandle* next = e->next;
-    assert(e->in_cache);
-    e->in_cache = false;
-    assert(e->refs == 1);  // Invariant of lru_ list.
-    Unref(e);
-    e = next;
-  }
-}
-
-void LRUCache::Ref(LRUHandle* e) {
-  if (e->refs == 1 && e->in_cache) {  // If on lru_ list, move to in_use_ list.
-    LRU_Remove(e);
-    LRU_Append(&in_use_, e);
-  }
-  e->refs++;
-}
-
-void LRUCache::Unref(LRUHandle* e) {
-  assert(e->refs > 0);
-  e->refs--;
-  if (e->refs == 0) {  // Deallocate.
-    assert(!e->in_cache);
-    (*e->deleter)(e->key(), e->value);
-    free(e);
-  } else if (e->in_cache && e->refs == 1) {
-    // No longer in use; move to lru_ list.
-    LRU_Remove(e);
-    LRU_Append(&lru_, e);
-  }
-}
-
-void LRUCache::LRU_Remove(LRUHandle* e) {
-  e->next->prev = e->prev;
-  e->prev->next = e->next;
-}
-
-void LRUCache::LRU_Append(LRUHandle* list, LRUHandle* e) {
-  // Make "e" newest entry by inserting just before *list
-  e->next = list;
-  e->prev = list->prev;
-  e->prev->next = e;
-  e->next->prev = e;
-}
-
-Cache::Handle* LRUCache::Lookup(const Slice& key, uint32_t hash) {
-  MutexLock l(&mutex_);
-  LRUHandle* e = table_.Lookup(key, hash);
-  if (e != nullptr) {
-    Ref(e);
-  }
-  return reinterpret_cast<Cache::Handle*>(e);
-}
-
-void LRUCache::Release(Cache::Handle* handle) {
-  MutexLock l(&mutex_);
-  Unref(reinterpret_cast<LRUHandle*>(handle));
-}
-
-Cache::Handle* LRUCache::Insert(const Slice& key, uint32_t hash, void* value,
-                                size_t charge,
-                                void (*deleter)(const Slice& key,
-                                                void* value)) {
-  MutexLock l(&mutex_);
-
-  LRUHandle* e =
-      reinterpret_cast<LRUHandle*>(malloc(sizeof(LRUHandle) - 1 + key.size()));
-  e->value = value;
-  e->deleter = deleter;
-  e->charge = charge;
-  e->key_length = key.size();
-  e->hash = hash;
-  e->in_cache = false;
-  e->refs = 1;  // for the returned handle.
-  memcpy(e->key_data, key.data(), key.size());
-
-  if (capacity_ > 0) {
-    e->refs++;  // for the cache's reference.
-    e->in_cache = true;
-    LRU_Append(&in_use_, e);
-    usage_ += charge;
-    FinishErase(table_.Insert(e));
-  } else {  // don't cache. (capacity_==0 is supported and turns off caching.)
-    // next is read by key() in an assert, so it must be initialized
-    e->next = nullptr;
-  }
-  while (usage_ > capacity_ && lru_.next != &lru_) {
-    LRUHandle* old = lru_.next;
-    assert(old->refs == 1);
-    bool erased = FinishErase(table_.Remove(old->key(), old->hash));
-    if (!erased) {  // to avoid unused variable when compiled NDEBUG
-      assert(erased);
-    }
-  }
-
-  return reinterpret_cast<Cache::Handle*>(e);
-}
-
-// If e != nullptr, finish removing *e from the cache; it has already been
-// removed from the hash table.  Return whether e != nullptr.
-bool LRUCache::FinishErase(LRUHandle* e) {
-  if (e != nullptr) {
-    assert(e->in_cache);
-    LRU_Remove(e);
-    e->in_cache = false;
-    usage_ -= e->charge;
-    Unref(e);
-  }
-  return e != nullptr;
-}
-
-void LRUCache::Erase(const Slice& key, uint32_t hash) {
-  MutexLock l(&mutex_);
-  FinishErase(table_.Remove(key, hash));
-}
-
-void LRUCache::Prune() {
-  MutexLock l(&mutex_);
-  while (lru_.next != &lru_) {
-    LRUHandle* e = lru_.next;
-    assert(e->refs == 1);
-    bool erased = FinishErase(table_.Remove(e->key(), e->hash));
-    if (!erased) {  // to avoid unused variable when compiled NDEBUG
-      assert(erased);
-    }
-  }
-}
-
-static const int kNumShardBits = 4;
-static const int kNumShards = 1 << kNumShardBits;
-
-class ShardedLRUCache : public Cache {
- private:
-  LRUCache shard_[kNumShards];
-  port::Mutex id_mutex_;
-  uint64_t last_id_;
-
-  static inline uint32_t HashSlice(const Slice& s) {
-    return Hash(s.data(), s.size(), 0);
-  }
-
-  static uint32_t Shard(uint32_t hash) { return hash >> (32 - kNumShardBits); }
-
- public:
-  explicit ShardedLRUCache(size_t capacity) : last_id_(0) {
-    const size_t per_shard = (capacity + (kNumShards - 1)) / kNumShards;
-    for (int s = 0; s < kNumShards; s++) {
-      shard_[s].SetCapacity(per_shard);
-    }
-  }
-  virtual ~ShardedLRUCache() {}
-  virtual Handle* Insert(const Slice& key, void* value, size_t charge,
-                         void (*deleter)(const Slice& key, void* value)) {
-    const uint32_t hash = HashSlice(key);
-    return shard_[Shard(hash)].Insert(key, hash, value, charge, deleter);
-  }
-  virtual Handle* Lookup(const Slice& key) {
-    const uint32_t hash = HashSlice(key);
-    return shard_[Shard(hash)].Lookup(key, hash);
-  }
-  virtual void Release(Handle* handle) {
-    LRUHandle* h = reinterpret_cast<LRUHandle*>(handle);
-    shard_[Shard(h->hash)].Release(handle);
-  }
-  virtual void Erase(const Slice& key) {
-    const uint32_t hash = HashSlice(key);
-    shard_[Shard(hash)].Erase(key, hash);
-  }
-  virtual void* Value(Handle* handle) {
-    return reinterpret_cast<LRUHandle*>(handle)->value;
-  }
-  virtual uint64_t NewId() {
-    MutexLock l(&id_mutex_);
-    return ++(last_id_);
-  }
-  virtual void Prune() {
-    for (int s = 0; s < kNumShards; s++) {
-      shard_[s].Prune();
-    }
-  }
-  virtual size_t TotalCharge() const {
-    size_t total = 0;
-    for (int s = 0; s < kNumShards; s++) {
-      total += shard_[s].TotalCharge();
-    }
-    return total;
-  }
-};
-
-}  // end anonymous namespace
-
-Cache* NewLRUCache(size_t capacity) { return new ShardedLRUCache(capacity); }
-
-}  // namespace leveldb
diff --git a/assign5/openTok/Pods/leveldb-library/util/coding.cc b/assign5/openTok/Pods/leveldb-library/util/coding.cc
deleted file mode 100644
index e2089df..0000000
--- a/assign5/openTok/Pods/leveldb-library/util/coding.cc
+++ /dev/null
@@ -1,192 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#include "util/coding.h"
-
-namespace leveldb {
-
-void EncodeFixed32(char* dst, uint32_t value) {
-  if (port::kLittleEndian) {
-    memcpy(dst, &value, sizeof(value));
-  } else {
-    dst[0] = value & 0xff;
-    dst[1] = (value >> 8) & 0xff;
-    dst[2] = (value >> 16) & 0xff;
-    dst[3] = (value >> 24) & 0xff;
-  }
-}
-
-void EncodeFixed64(char* dst, uint64_t value) {
-  if (port::kLittleEndian) {
-    memcpy(dst, &value, sizeof(value));
-  } else {
-    dst[0] = value & 0xff;
-    dst[1] = (value >> 8) & 0xff;
-    dst[2] = (value >> 16) & 0xff;
-    dst[3] = (value >> 24) & 0xff;
-    dst[4] = (value >> 32) & 0xff;
-    dst[5] = (value >> 40) & 0xff;
-    dst[6] = (value >> 48) & 0xff;
-    dst[7] = (value >> 56) & 0xff;
-  }
-}
-
-void PutFixed32(std::string* dst, uint32_t value) {
-  char buf[sizeof(value)];
-  EncodeFixed32(buf, value);
-  dst->append(buf, sizeof(buf));
-}
-
-void PutFixed64(std::string* dst, uint64_t value) {
-  char buf[sizeof(value)];
-  EncodeFixed64(buf, value);
-  dst->append(buf, sizeof(buf));
-}
-
-char* EncodeVarint32(char* dst, uint32_t v) {
-  // Operate on characters as unsigneds
-  unsigned char* ptr = reinterpret_cast<unsigned char*>(dst);
-  static const int B = 128;
-  if (v < (1 << 7)) {
-    *(ptr++) = v;
-  } else if (v < (1 << 14)) {
-    *(ptr++) = v | B;
-    *(ptr++) = v >> 7;
-  } else if (v < (1 << 21)) {
-    *(ptr++) = v | B;
-    *(ptr++) = (v >> 7) | B;
-    *(ptr++) = v >> 14;
-  } else if (v < (1 << 28)) {
-    *(ptr++) = v | B;
-    *(ptr++) = (v >> 7) | B;
-    *(ptr++) = (v >> 14) | B;
-    *(ptr++) = v >> 21;
-  } else {
-    *(ptr++) = v | B;
-    *(ptr++) = (v >> 7) | B;
-    *(ptr++) = (v >> 14) | B;
-    *(ptr++) = (v >> 21) | B;
-    *(ptr++) = v >> 28;
-  }
-  return reinterpret_cast<char*>(ptr);
-}
-
-void PutVarint32(std::string* dst, uint32_t v) {
-  char buf[5];
-  char* ptr = EncodeVarint32(buf, v);
-  dst->append(buf, ptr - buf);
-}
-
-char* EncodeVarint64(char* dst, uint64_t v) {
-  static const int B = 128;
-  unsigned char* ptr = reinterpret_cast<unsigned char*>(dst);
-  while (v >= B) {
-    *(ptr++) = v | B;
-    v >>= 7;
-  }
-  *(ptr++) = static_cast<unsigned char>(v);
-  return reinterpret_cast<char*>(ptr);
-}
-
-void PutVarint64(std::string* dst, uint64_t v) {
-  char buf[10];
-  char* ptr = EncodeVarint64(buf, v);
-  dst->append(buf, ptr - buf);
-}
-
-void PutLengthPrefixedSlice(std::string* dst, const Slice& value) {
-  PutVarint32(dst, value.size());
-  dst->append(value.data(), value.size());
-}
-
-int VarintLength(uint64_t v) {
-  int len = 1;
-  while (v >= 128) {
-    v >>= 7;
-    len++;
-  }
-  return len;
-}
-
-const char* GetVarint32PtrFallback(const char* p, const char* limit,
-                                   uint32_t* value) {
-  uint32_t result = 0;
-  for (uint32_t shift = 0; shift <= 28 && p < limit; shift += 7) {
-    uint32_t byte = *(reinterpret_cast<const unsigned char*>(p));
-    p++;
-    if (byte & 128) {
-      // More bytes are present
-      result |= ((byte & 127) << shift);
-    } else {
-      result |= (byte << shift);
-      *value = result;
-      return reinterpret_cast<const char*>(p);
-    }
-  }
-  return nullptr;
-}
-
-bool GetVarint32(Slice* input, uint32_t* value) {
-  const char* p = input->data();
-  const char* limit = p + input->size();
-  const char* q = GetVarint32Ptr(p, limit, value);
-  if (q == nullptr) {
-    return false;
-  } else {
-    *input = Slice(q, limit - q);
-    return true;
-  }
-}
-
-const char* GetVarint64Ptr(const char* p, const char* limit, uint64_t* value) {
-  uint64_t result = 0;
-  for (uint32_t shift = 0; shift <= 63 && p < limit; shift += 7) {
-    uint64_t byte = *(reinterpret_cast<const unsigned char*>(p));
-    p++;
-    if (byte & 128) {
-      // More bytes are present
-      result |= ((byte & 127) << shift);
-    } else {
-      result |= (byte << shift);
-      *value = result;
-      return reinterpret_cast<const char*>(p);
-    }
-  }
-  return nullptr;
-}
-
-bool GetVarint64(Slice* input, uint64_t* value) {
-  const char* p = input->data();
-  const char* limit = p + input->size();
-  const char* q = GetVarint64Ptr(p, limit, value);
-  if (q == nullptr) {
-    return false;
-  } else {
-    *input = Slice(q, limit - q);
-    return true;
-  }
-}
-
-const char* GetLengthPrefixedSlice(const char* p, const char* limit,
-                                   Slice* result) {
-  uint32_t len;
-  p = GetVarint32Ptr(p, limit, &len);
-  if (p == nullptr) return nullptr;
-  if (p + len > limit) return nullptr;
-  *result = Slice(p, len);
-  return p + len;
-}
-
-bool GetLengthPrefixedSlice(Slice* input, Slice* result) {
-  uint32_t len;
-  if (GetVarint32(input, &len) && input->size() >= len) {
-    *result = Slice(input->data(), len);
-    input->remove_prefix(len);
-    return true;
-  } else {
-    return false;
-  }
-}
-
-}  // namespace leveldb
diff --git a/assign5/openTok/Pods/leveldb-library/util/coding.h b/assign5/openTok/Pods/leveldb-library/util/coding.h
deleted file mode 100644
index d9eeaa3..0000000
--- a/assign5/openTok/Pods/leveldb-library/util/coding.h
+++ /dev/null
@@ -1,104 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-//
-// Endian-neutral encoding:
-// * Fixed-length numbers are encoded with least-significant byte first
-// * In addition we support variable length "varint" encoding
-// * Strings are encoded prefixed by their length in varint format
-
-#ifndef STORAGE_LEVELDB_UTIL_CODING_H_
-#define STORAGE_LEVELDB_UTIL_CODING_H_
-
-#include <stdint.h>
-#include <string.h>
-
-#include <string>
-
-#include "leveldb/slice.h"
-#include "port/port.h"
-
-namespace leveldb {
-
-// Standard Put... routines append to a string
-void PutFixed32(std::string* dst, uint32_t value);
-void PutFixed64(std::string* dst, uint64_t value);
-void PutVarint32(std::string* dst, uint32_t value);
-void PutVarint64(std::string* dst, uint64_t value);
-void PutLengthPrefixedSlice(std::string* dst, const Slice& value);
-
-// Standard Get... routines parse a value from the beginning of a Slice
-// and advance the slice past the parsed value.
-bool GetVarint32(Slice* input, uint32_t* value);
-bool GetVarint64(Slice* input, uint64_t* value);
-bool GetLengthPrefixedSlice(Slice* input, Slice* result);
-
-// Pointer-based variants of GetVarint...  These either store a value
-// in *v and return a pointer just past the parsed value, or return
-// nullptr on error.  These routines only look at bytes in the range
-// [p..limit-1]
-const char* GetVarint32Ptr(const char* p, const char* limit, uint32_t* v);
-const char* GetVarint64Ptr(const char* p, const char* limit, uint64_t* v);
-
-// Returns the length of the varint32 or varint64 encoding of "v"
-int VarintLength(uint64_t v);
-
-// Lower-level versions of Put... that write directly into a character buffer
-// REQUIRES: dst has enough space for the value being written
-void EncodeFixed32(char* dst, uint32_t value);
-void EncodeFixed64(char* dst, uint64_t value);
-
-// Lower-level versions of Put... that write directly into a character buffer
-// and return a pointer just past the last byte written.
-// REQUIRES: dst has enough space for the value being written
-char* EncodeVarint32(char* dst, uint32_t value);
-char* EncodeVarint64(char* dst, uint64_t value);
-
-// Lower-level versions of Get... that read directly from a character buffer
-// without any bounds checking.
-
-inline uint32_t DecodeFixed32(const char* ptr) {
-  if (port::kLittleEndian) {
-    // Load the raw bytes
-    uint32_t result;
-    memcpy(&result, ptr, sizeof(result));  // gcc optimizes this to a plain load
-    return result;
-  } else {
-    return ((static_cast<uint32_t>(static_cast<unsigned char>(ptr[0]))) |
-            (static_cast<uint32_t>(static_cast<unsigned char>(ptr[1])) << 8) |
-            (static_cast<uint32_t>(static_cast<unsigned char>(ptr[2])) << 16) |
-            (static_cast<uint32_t>(static_cast<unsigned char>(ptr[3])) << 24));
-  }
-}
-
-inline uint64_t DecodeFixed64(const char* ptr) {
-  if (port::kLittleEndian) {
-    // Load the raw bytes
-    uint64_t result;
-    memcpy(&result, ptr, sizeof(result));  // gcc optimizes this to a plain load
-    return result;
-  } else {
-    uint64_t lo = DecodeFixed32(ptr);
-    uint64_t hi = DecodeFixed32(ptr + 4);
-    return (hi << 32) | lo;
-  }
-}
-
-// Internal routine for use by fallback path of GetVarint32Ptr
-const char* GetVarint32PtrFallback(const char* p, const char* limit,
-                                   uint32_t* value);
-inline const char* GetVarint32Ptr(const char* p, const char* limit,
-                                  uint32_t* value) {
-  if (p < limit) {
-    uint32_t result = *(reinterpret_cast<const unsigned char*>(p));
-    if ((result & 128) == 0) {
-      *value = result;
-      return p + 1;
-    }
-  }
-  return GetVarint32PtrFallback(p, limit, value);
-}
-
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_UTIL_CODING_H_
diff --git a/assign5/openTok/Pods/leveldb-library/util/comparator.cc b/assign5/openTok/Pods/leveldb-library/util/comparator.cc
deleted file mode 100644
index 26d1eb3..0000000
--- a/assign5/openTok/Pods/leveldb-library/util/comparator.cc
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#include <algorithm>
-#include <cstdint>
-#include <string>
-
-#include "leveldb/comparator.h"
-#include "leveldb/slice.h"
-#include "util/logging.h"
-#include "util/no_destructor.h"
-
-namespace leveldb {
-
-Comparator::~Comparator() {}
-
-namespace {
-class BytewiseComparatorImpl : public Comparator {
- public:
-  BytewiseComparatorImpl() {}
-
-  virtual const char* Name() const { return "leveldb.BytewiseComparator"; }
-
-  virtual int Compare(const Slice& a, const Slice& b) const {
-    return a.compare(b);
-  }
-
-  virtual void FindShortestSeparator(std::string* start,
-                                     const Slice& limit) const {
-    // Find length of common prefix
-    size_t min_length = std::min(start->size(), limit.size());
-    size_t diff_index = 0;
-    while ((diff_index < min_length) &&
-           ((*start)[diff_index] == limit[diff_index])) {
-      diff_index++;
-    }
-
-    if (diff_index >= min_length) {
-      // Do not shorten if one string is a prefix of the other
-    } else {
-      uint8_t diff_byte = static_cast<uint8_t>((*start)[diff_index]);
-      if (diff_byte < static_cast<uint8_t>(0xff) &&
-          diff_byte + 1 < static_cast<uint8_t>(limit[diff_index])) {
-        (*start)[diff_index]++;
-        start->resize(diff_index + 1);
-        assert(Compare(*start, limit) < 0);
-      }
-    }
-  }
-
-  virtual void FindShortSuccessor(std::string* key) const {
-    // Find first character that can be incremented
-    size_t n = key->size();
-    for (size_t i = 0; i < n; i++) {
-      const uint8_t byte = (*key)[i];
-      if (byte != static_cast<uint8_t>(0xff)) {
-        (*key)[i] = byte + 1;
-        key->resize(i + 1);
-        return;
-      }
-    }
-    // *key is a run of 0xffs.  Leave it alone.
-  }
-};
-}  // namespace
-
-const Comparator* BytewiseComparator() {
-  static NoDestructor<BytewiseComparatorImpl> singleton;
-  return singleton.get();
-}
-
-}  // namespace leveldb
diff --git a/assign5/openTok/Pods/leveldb-library/util/crc32c.cc b/assign5/openTok/Pods/leveldb-library/util/crc32c.cc
deleted file mode 100644
index c2e61f7..0000000
--- a/assign5/openTok/Pods/leveldb-library/util/crc32c.cc
+++ /dev/null
@@ -1,380 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-//
-// A portable implementation of crc32c.
-
-#include "util/crc32c.h"
-
-#include <stddef.h>
-#include <stdint.h>
-
-#include "port/port.h"
-#include "util/coding.h"
-
-namespace leveldb {
-namespace crc32c {
-
-namespace {
-
-const uint32_t kByteExtensionTable[256] = {
-    0x00000000, 0xf26b8303, 0xe13b70f7, 0x1350f3f4, 0xc79a971f, 0x35f1141c,
-    0x26a1e7e8, 0xd4ca64eb, 0x8ad958cf, 0x78b2dbcc, 0x6be22838, 0x9989ab3b,
-    0x4d43cfd0, 0xbf284cd3, 0xac78bf27, 0x5e133c24, 0x105ec76f, 0xe235446c,
-    0xf165b798, 0x030e349b, 0xd7c45070, 0x25afd373, 0x36ff2087, 0xc494a384,
-    0x9a879fa0, 0x68ec1ca3, 0x7bbcef57, 0x89d76c54, 0x5d1d08bf, 0xaf768bbc,
-    0xbc267848, 0x4e4dfb4b, 0x20bd8ede, 0xd2d60ddd, 0xc186fe29, 0x33ed7d2a,
-    0xe72719c1, 0x154c9ac2, 0x061c6936, 0xf477ea35, 0xaa64d611, 0x580f5512,
-    0x4b5fa6e6, 0xb93425e5, 0x6dfe410e, 0x9f95c20d, 0x8cc531f9, 0x7eaeb2fa,
-    0x30e349b1, 0xc288cab2, 0xd1d83946, 0x23b3ba45, 0xf779deae, 0x05125dad,
-    0x1642ae59, 0xe4292d5a, 0xba3a117e, 0x4851927d, 0x5b016189, 0xa96ae28a,
-    0x7da08661, 0x8fcb0562, 0x9c9bf696, 0x6ef07595, 0x417b1dbc, 0xb3109ebf,
-    0xa0406d4b, 0x522bee48, 0x86e18aa3, 0x748a09a0, 0x67dafa54, 0x95b17957,
-    0xcba24573, 0x39c9c670, 0x2a993584, 0xd8f2b687, 0x0c38d26c, 0xfe53516f,
-    0xed03a29b, 0x1f682198, 0x5125dad3, 0xa34e59d0, 0xb01eaa24, 0x42752927,
-    0x96bf4dcc, 0x64d4cecf, 0x77843d3b, 0x85efbe38, 0xdbfc821c, 0x2997011f,
-    0x3ac7f2eb, 0xc8ac71e8, 0x1c661503, 0xee0d9600, 0xfd5d65f4, 0x0f36e6f7,
-    0x61c69362, 0x93ad1061, 0x80fde395, 0x72966096, 0xa65c047d, 0x5437877e,
-    0x4767748a, 0xb50cf789, 0xeb1fcbad, 0x197448ae, 0x0a24bb5a, 0xf84f3859,
-    0x2c855cb2, 0xdeeedfb1, 0xcdbe2c45, 0x3fd5af46, 0x7198540d, 0x83f3d70e,
-    0x90a324fa, 0x62c8a7f9, 0xb602c312, 0x44694011, 0x5739b3e5, 0xa55230e6,
-    0xfb410cc2, 0x092a8fc1, 0x1a7a7c35, 0xe811ff36, 0x3cdb9bdd, 0xceb018de,
-    0xdde0eb2a, 0x2f8b6829, 0x82f63b78, 0x709db87b, 0x63cd4b8f, 0x91a6c88c,
-    0x456cac67, 0xb7072f64, 0xa457dc90, 0x563c5f93, 0x082f63b7, 0xfa44e0b4,
-    0xe9141340, 0x1b7f9043, 0xcfb5f4a8, 0x3dde77ab, 0x2e8e845f, 0xdce5075c,
-    0x92a8fc17, 0x60c37f14, 0x73938ce0, 0x81f80fe3, 0x55326b08, 0xa759e80b,
-    0xb4091bff, 0x466298fc, 0x1871a4d8, 0xea1a27db, 0xf94ad42f, 0x0b21572c,
-    0xdfeb33c7, 0x2d80b0c4, 0x3ed04330, 0xccbbc033, 0xa24bb5a6, 0x502036a5,
-    0x4370c551, 0xb11b4652, 0x65d122b9, 0x97baa1ba, 0x84ea524e, 0x7681d14d,
-    0x2892ed69, 0xdaf96e6a, 0xc9a99d9e, 0x3bc21e9d, 0xef087a76, 0x1d63f975,
-    0x0e330a81, 0xfc588982, 0xb21572c9, 0x407ef1ca, 0x532e023e, 0xa145813d,
-    0x758fe5d6, 0x87e466d5, 0x94b49521, 0x66df1622, 0x38cc2a06, 0xcaa7a905,
-    0xd9f75af1, 0x2b9cd9f2, 0xff56bd19, 0x0d3d3e1a, 0x1e6dcdee, 0xec064eed,
-    0xc38d26c4, 0x31e6a5c7, 0x22b65633, 0xd0ddd530, 0x0417b1db, 0xf67c32d8,
-    0xe52cc12c, 0x1747422f, 0x49547e0b, 0xbb3ffd08, 0xa86f0efc, 0x5a048dff,
-    0x8ecee914, 0x7ca56a17, 0x6ff599e3, 0x9d9e1ae0, 0xd3d3e1ab, 0x21b862a8,
-    0x32e8915c, 0xc083125f, 0x144976b4, 0xe622f5b7, 0xf5720643, 0x07198540,
-    0x590ab964, 0xab613a67, 0xb831c993, 0x4a5a4a90, 0x9e902e7b, 0x6cfbad78,
-    0x7fab5e8c, 0x8dc0dd8f, 0xe330a81a, 0x115b2b19, 0x020bd8ed, 0xf0605bee,
-    0x24aa3f05, 0xd6c1bc06, 0xc5914ff2, 0x37faccf1, 0x69e9f0d5, 0x9b8273d6,
-    0x88d28022, 0x7ab90321, 0xae7367ca, 0x5c18e4c9, 0x4f48173d, 0xbd23943e,
-    0xf36e6f75, 0x0105ec76, 0x12551f82, 0xe03e9c81, 0x34f4f86a, 0xc69f7b69,
-    0xd5cf889d, 0x27a40b9e, 0x79b737ba, 0x8bdcb4b9, 0x988c474d, 0x6ae7c44e,
-    0xbe2da0a5, 0x4c4623a6, 0x5f16d052, 0xad7d5351};
-
-const uint32_t kStrideExtensionTable0[256] = {
-    0x00000000, 0x30d23865, 0x61a470ca, 0x517648af, 0xc348e194, 0xf39ad9f1,
-    0xa2ec915e, 0x923ea93b, 0x837db5d9, 0xb3af8dbc, 0xe2d9c513, 0xd20bfd76,
-    0x4035544d, 0x70e76c28, 0x21912487, 0x11431ce2, 0x03171d43, 0x33c52526,
-    0x62b36d89, 0x526155ec, 0xc05ffcd7, 0xf08dc4b2, 0xa1fb8c1d, 0x9129b478,
-    0x806aa89a, 0xb0b890ff, 0xe1ced850, 0xd11ce035, 0x4322490e, 0x73f0716b,
-    0x228639c4, 0x125401a1, 0x062e3a86, 0x36fc02e3, 0x678a4a4c, 0x57587229,
-    0xc566db12, 0xf5b4e377, 0xa4c2abd8, 0x941093bd, 0x85538f5f, 0xb581b73a,
-    0xe4f7ff95, 0xd425c7f0, 0x461b6ecb, 0x76c956ae, 0x27bf1e01, 0x176d2664,
-    0x053927c5, 0x35eb1fa0, 0x649d570f, 0x544f6f6a, 0xc671c651, 0xf6a3fe34,
-    0xa7d5b69b, 0x97078efe, 0x8644921c, 0xb696aa79, 0xe7e0e2d6, 0xd732dab3,
-    0x450c7388, 0x75de4bed, 0x24a80342, 0x147a3b27, 0x0c5c750c, 0x3c8e4d69,
-    0x6df805c6, 0x5d2a3da3, 0xcf149498, 0xffc6acfd, 0xaeb0e452, 0x9e62dc37,
-    0x8f21c0d5, 0xbff3f8b0, 0xee85b01f, 0xde57887a, 0x4c692141, 0x7cbb1924,
-    0x2dcd518b, 0x1d1f69ee, 0x0f4b684f, 0x3f99502a, 0x6eef1885, 0x5e3d20e0,
-    0xcc0389db, 0xfcd1b1be, 0xada7f911, 0x9d75c174, 0x8c36dd96, 0xbce4e5f3,
-    0xed92ad5c, 0xdd409539, 0x4f7e3c02, 0x7fac0467, 0x2eda4cc8, 0x1e0874ad,
-    0x0a724f8a, 0x3aa077ef, 0x6bd63f40, 0x5b040725, 0xc93aae1e, 0xf9e8967b,
-    0xa89eded4, 0x984ce6b1, 0x890ffa53, 0xb9ddc236, 0xe8ab8a99, 0xd879b2fc,
-    0x4a471bc7, 0x7a9523a2, 0x2be36b0d, 0x1b315368, 0x096552c9, 0x39b76aac,
-    0x68c12203, 0x58131a66, 0xca2db35d, 0xfaff8b38, 0xab89c397, 0x9b5bfbf2,
-    0x8a18e710, 0xbacadf75, 0xebbc97da, 0xdb6eafbf, 0x49500684, 0x79823ee1,
-    0x28f4764e, 0x18264e2b, 0x18b8ea18, 0x286ad27d, 0x791c9ad2, 0x49cea2b7,
-    0xdbf00b8c, 0xeb2233e9, 0xba547b46, 0x8a864323, 0x9bc55fc1, 0xab1767a4,
-    0xfa612f0b, 0xcab3176e, 0x588dbe55, 0x685f8630, 0x3929ce9f, 0x09fbf6fa,
-    0x1baff75b, 0x2b7dcf3e, 0x7a0b8791, 0x4ad9bff4, 0xd8e716cf, 0xe8352eaa,
-    0xb9436605, 0x89915e60, 0x98d24282, 0xa8007ae7, 0xf9763248, 0xc9a40a2d,
-    0x5b9aa316, 0x6b489b73, 0x3a3ed3dc, 0x0aecebb9, 0x1e96d09e, 0x2e44e8fb,
-    0x7f32a054, 0x4fe09831, 0xddde310a, 0xed0c096f, 0xbc7a41c0, 0x8ca879a5,
-    0x9deb6547, 0xad395d22, 0xfc4f158d, 0xcc9d2de8, 0x5ea384d3, 0x6e71bcb6,
-    0x3f07f419, 0x0fd5cc7c, 0x1d81cddd, 0x2d53f5b8, 0x7c25bd17, 0x4cf78572,
-    0xdec92c49, 0xee1b142c, 0xbf6d5c83, 0x8fbf64e6, 0x9efc7804, 0xae2e4061,
-    0xff5808ce, 0xcf8a30ab, 0x5db49990, 0x6d66a1f5, 0x3c10e95a, 0x0cc2d13f,
-    0x14e49f14, 0x2436a771, 0x7540efde, 0x4592d7bb, 0xd7ac7e80, 0xe77e46e5,
-    0xb6080e4a, 0x86da362f, 0x97992acd, 0xa74b12a8, 0xf63d5a07, 0xc6ef6262,
-    0x54d1cb59, 0x6403f33c, 0x3575bb93, 0x05a783f6, 0x17f38257, 0x2721ba32,
-    0x7657f29d, 0x4685caf8, 0xd4bb63c3, 0xe4695ba6, 0xb51f1309, 0x85cd2b6c,
-    0x948e378e, 0xa45c0feb, 0xf52a4744, 0xc5f87f21, 0x57c6d61a, 0x6714ee7f,
-    0x3662a6d0, 0x06b09eb5, 0x12caa592, 0x22189df7, 0x736ed558, 0x43bced3d,
-    0xd1824406, 0xe1507c63, 0xb02634cc, 0x80f40ca9, 0x91b7104b, 0xa165282e,
-    0xf0136081, 0xc0c158e4, 0x52fff1df, 0x622dc9ba, 0x335b8115, 0x0389b970,
-    0x11ddb8d1, 0x210f80b4, 0x7079c81b, 0x40abf07e, 0xd2955945, 0xe2476120,
-    0xb331298f, 0x83e311ea, 0x92a00d08, 0xa272356d, 0xf3047dc2, 0xc3d645a7,
-    0x51e8ec9c, 0x613ad4f9, 0x304c9c56, 0x009ea433};
-
-const uint32_t kStrideExtensionTable1[256] = {
-    0x00000000, 0x54075546, 0xa80eaa8c, 0xfc09ffca, 0x55f123e9, 0x01f676af,
-    0xfdff8965, 0xa9f8dc23, 0xabe247d2, 0xffe51294, 0x03eced5e, 0x57ebb818,
-    0xfe13643b, 0xaa14317d, 0x561dceb7, 0x021a9bf1, 0x5228f955, 0x062fac13,
-    0xfa2653d9, 0xae21069f, 0x07d9dabc, 0x53de8ffa, 0xafd77030, 0xfbd02576,
-    0xf9cabe87, 0xadcdebc1, 0x51c4140b, 0x05c3414d, 0xac3b9d6e, 0xf83cc828,
-    0x043537e2, 0x503262a4, 0xa451f2aa, 0xf056a7ec, 0x0c5f5826, 0x58580d60,
-    0xf1a0d143, 0xa5a78405, 0x59ae7bcf, 0x0da92e89, 0x0fb3b578, 0x5bb4e03e,
-    0xa7bd1ff4, 0xf3ba4ab2, 0x5a429691, 0x0e45c3d7, 0xf24c3c1d, 0xa64b695b,
-    0xf6790bff, 0xa27e5eb9, 0x5e77a173, 0x0a70f435, 0xa3882816, 0xf78f7d50,
-    0x0b86829a, 0x5f81d7dc, 0x5d9b4c2d, 0x099c196b, 0xf595e6a1, 0xa192b3e7,
-    0x086a6fc4, 0x5c6d3a82, 0xa064c548, 0xf463900e, 0x4d4f93a5, 0x1948c6e3,
-    0xe5413929, 0xb1466c6f, 0x18beb04c, 0x4cb9e50a, 0xb0b01ac0, 0xe4b74f86,
-    0xe6add477, 0xb2aa8131, 0x4ea37efb, 0x1aa42bbd, 0xb35cf79e, 0xe75ba2d8,
-    0x1b525d12, 0x4f550854, 0x1f676af0, 0x4b603fb6, 0xb769c07c, 0xe36e953a,
-    0x4a964919, 0x1e911c5f, 0xe298e395, 0xb69fb6d3, 0xb4852d22, 0xe0827864,
-    0x1c8b87ae, 0x488cd2e8, 0xe1740ecb, 0xb5735b8d, 0x497aa447, 0x1d7df101,
-    0xe91e610f, 0xbd193449, 0x4110cb83, 0x15179ec5, 0xbcef42e6, 0xe8e817a0,
-    0x14e1e86a, 0x40e6bd2c, 0x42fc26dd, 0x16fb739b, 0xeaf28c51, 0xbef5d917,
-    0x170d0534, 0x430a5072, 0xbf03afb8, 0xeb04fafe, 0xbb36985a, 0xef31cd1c,
-    0x133832d6, 0x473f6790, 0xeec7bbb3, 0xbac0eef5, 0x46c9113f, 0x12ce4479,
-    0x10d4df88, 0x44d38ace, 0xb8da7504, 0xecdd2042, 0x4525fc61, 0x1122a927,
-    0xed2b56ed, 0xb92c03ab, 0x9a9f274a, 0xce98720c, 0x32918dc6, 0x6696d880,
-    0xcf6e04a3, 0x9b6951e5, 0x6760ae2f, 0x3367fb69, 0x317d6098, 0x657a35de,
-    0x9973ca14, 0xcd749f52, 0x648c4371, 0x308b1637, 0xcc82e9fd, 0x9885bcbb,
-    0xc8b7de1f, 0x9cb08b59, 0x60b97493, 0x34be21d5, 0x9d46fdf6, 0xc941a8b0,
-    0x3548577a, 0x614f023c, 0x635599cd, 0x3752cc8b, 0xcb5b3341, 0x9f5c6607,
-    0x36a4ba24, 0x62a3ef62, 0x9eaa10a8, 0xcaad45ee, 0x3eced5e0, 0x6ac980a6,
-    0x96c07f6c, 0xc2c72a2a, 0x6b3ff609, 0x3f38a34f, 0xc3315c85, 0x973609c3,
-    0x952c9232, 0xc12bc774, 0x3d2238be, 0x69256df8, 0xc0ddb1db, 0x94dae49d,
-    0x68d31b57, 0x3cd44e11, 0x6ce62cb5, 0x38e179f3, 0xc4e88639, 0x90efd37f,
-    0x39170f5c, 0x6d105a1a, 0x9119a5d0, 0xc51ef096, 0xc7046b67, 0x93033e21,
-    0x6f0ac1eb, 0x3b0d94ad, 0x92f5488e, 0xc6f21dc8, 0x3afbe202, 0x6efcb744,
-    0xd7d0b4ef, 0x83d7e1a9, 0x7fde1e63, 0x2bd94b25, 0x82219706, 0xd626c240,
-    0x2a2f3d8a, 0x7e2868cc, 0x7c32f33d, 0x2835a67b, 0xd43c59b1, 0x803b0cf7,
-    0x29c3d0d4, 0x7dc48592, 0x81cd7a58, 0xd5ca2f1e, 0x85f84dba, 0xd1ff18fc,
-    0x2df6e736, 0x79f1b270, 0xd0096e53, 0x840e3b15, 0x7807c4df, 0x2c009199,
-    0x2e1a0a68, 0x7a1d5f2e, 0x8614a0e4, 0xd213f5a2, 0x7beb2981, 0x2fec7cc7,
-    0xd3e5830d, 0x87e2d64b, 0x73814645, 0x27861303, 0xdb8fecc9, 0x8f88b98f,
-    0x267065ac, 0x727730ea, 0x8e7ecf20, 0xda799a66, 0xd8630197, 0x8c6454d1,
-    0x706dab1b, 0x246afe5d, 0x8d92227e, 0xd9957738, 0x259c88f2, 0x719bddb4,
-    0x21a9bf10, 0x75aeea56, 0x89a7159c, 0xdda040da, 0x74589cf9, 0x205fc9bf,
-    0xdc563675, 0x88516333, 0x8a4bf8c2, 0xde4cad84, 0x2245524e, 0x76420708,
-    0xdfbadb2b, 0x8bbd8e6d, 0x77b471a7, 0x23b324e1};
-
-const uint32_t kStrideExtensionTable2[256] = {
-    0x00000000, 0x678efd01, 0xcf1dfa02, 0xa8930703, 0x9bd782f5, 0xfc597ff4,
-    0x54ca78f7, 0x334485f6, 0x3243731b, 0x55cd8e1a, 0xfd5e8919, 0x9ad07418,
-    0xa994f1ee, 0xce1a0cef, 0x66890bec, 0x0107f6ed, 0x6486e636, 0x03081b37,
-    0xab9b1c34, 0xcc15e135, 0xff5164c3, 0x98df99c2, 0x304c9ec1, 0x57c263c0,
-    0x56c5952d, 0x314b682c, 0x99d86f2f, 0xfe56922e, 0xcd1217d8, 0xaa9cead9,
-    0x020fedda, 0x658110db, 0xc90dcc6c, 0xae83316d, 0x0610366e, 0x619ecb6f,
-    0x52da4e99, 0x3554b398, 0x9dc7b49b, 0xfa49499a, 0xfb4ebf77, 0x9cc04276,
-    0x34534575, 0x53ddb874, 0x60993d82, 0x0717c083, 0xaf84c780, 0xc80a3a81,
-    0xad8b2a5a, 0xca05d75b, 0x6296d058, 0x05182d59, 0x365ca8af, 0x51d255ae,
-    0xf94152ad, 0x9ecfafac, 0x9fc85941, 0xf846a440, 0x50d5a343, 0x375b5e42,
-    0x041fdbb4, 0x639126b5, 0xcb0221b6, 0xac8cdcb7, 0x97f7ee29, 0xf0791328,
-    0x58ea142b, 0x3f64e92a, 0x0c206cdc, 0x6bae91dd, 0xc33d96de, 0xa4b36bdf,
-    0xa5b49d32, 0xc23a6033, 0x6aa96730, 0x0d279a31, 0x3e631fc7, 0x59ede2c6,
-    0xf17ee5c5, 0x96f018c4, 0xf371081f, 0x94fff51e, 0x3c6cf21d, 0x5be20f1c,
-    0x68a68aea, 0x0f2877eb, 0xa7bb70e8, 0xc0358de9, 0xc1327b04, 0xa6bc8605,
-    0x0e2f8106, 0x69a17c07, 0x5ae5f9f1, 0x3d6b04f0, 0x95f803f3, 0xf276fef2,
-    0x5efa2245, 0x3974df44, 0x91e7d847, 0xf6692546, 0xc52da0b0, 0xa2a35db1,
-    0x0a305ab2, 0x6dbea7b3, 0x6cb9515e, 0x0b37ac5f, 0xa3a4ab5c, 0xc42a565d,
-    0xf76ed3ab, 0x90e02eaa, 0x387329a9, 0x5ffdd4a8, 0x3a7cc473, 0x5df23972,
-    0xf5613e71, 0x92efc370, 0xa1ab4686, 0xc625bb87, 0x6eb6bc84, 0x09384185,
-    0x083fb768, 0x6fb14a69, 0xc7224d6a, 0xa0acb06b, 0x93e8359d, 0xf466c89c,
-    0x5cf5cf9f, 0x3b7b329e, 0x2a03aaa3, 0x4d8d57a2, 0xe51e50a1, 0x8290ada0,
-    0xb1d42856, 0xd65ad557, 0x7ec9d254, 0x19472f55, 0x1840d9b8, 0x7fce24b9,
-    0xd75d23ba, 0xb0d3debb, 0x83975b4d, 0xe419a64c, 0x4c8aa14f, 0x2b045c4e,
-    0x4e854c95, 0x290bb194, 0x8198b697, 0xe6164b96, 0xd552ce60, 0xb2dc3361,
-    0x1a4f3462, 0x7dc1c963, 0x7cc63f8e, 0x1b48c28f, 0xb3dbc58c, 0xd455388d,
-    0xe711bd7b, 0x809f407a, 0x280c4779, 0x4f82ba78, 0xe30e66cf, 0x84809bce,
-    0x2c139ccd, 0x4b9d61cc, 0x78d9e43a, 0x1f57193b, 0xb7c41e38, 0xd04ae339,
-    0xd14d15d4, 0xb6c3e8d5, 0x1e50efd6, 0x79de12d7, 0x4a9a9721, 0x2d146a20,
-    0x85876d23, 0xe2099022, 0x878880f9, 0xe0067df8, 0x48957afb, 0x2f1b87fa,
-    0x1c5f020c, 0x7bd1ff0d, 0xd342f80e, 0xb4cc050f, 0xb5cbf3e2, 0xd2450ee3,
-    0x7ad609e0, 0x1d58f4e1, 0x2e1c7117, 0x49928c16, 0xe1018b15, 0x868f7614,
-    0xbdf4448a, 0xda7ab98b, 0x72e9be88, 0x15674389, 0x2623c67f, 0x41ad3b7e,
-    0xe93e3c7d, 0x8eb0c17c, 0x8fb73791, 0xe839ca90, 0x40aacd93, 0x27243092,
-    0x1460b564, 0x73ee4865, 0xdb7d4f66, 0xbcf3b267, 0xd972a2bc, 0xbefc5fbd,
-    0x166f58be, 0x71e1a5bf, 0x42a52049, 0x252bdd48, 0x8db8da4b, 0xea36274a,
-    0xeb31d1a7, 0x8cbf2ca6, 0x242c2ba5, 0x43a2d6a4, 0x70e65352, 0x1768ae53,
-    0xbffba950, 0xd8755451, 0x74f988e6, 0x137775e7, 0xbbe472e4, 0xdc6a8fe5,
-    0xef2e0a13, 0x88a0f712, 0x2033f011, 0x47bd0d10, 0x46bafbfd, 0x213406fc,
-    0x89a701ff, 0xee29fcfe, 0xdd6d7908, 0xbae38409, 0x1270830a, 0x75fe7e0b,
-    0x107f6ed0, 0x77f193d1, 0xdf6294d2, 0xb8ec69d3, 0x8ba8ec25, 0xec261124,
-    0x44b51627, 0x233beb26, 0x223c1dcb, 0x45b2e0ca, 0xed21e7c9, 0x8aaf1ac8,
-    0xb9eb9f3e, 0xde65623f, 0x76f6653c, 0x1178983d};
-
-const uint32_t kStrideExtensionTable3[256] = {
-    0x00000000, 0xf20c0dfe, 0xe1f46d0d, 0x13f860f3, 0xc604aceb, 0x3408a115,
-    0x27f0c1e6, 0xd5fccc18, 0x89e52f27, 0x7be922d9, 0x6811422a, 0x9a1d4fd4,
-    0x4fe183cc, 0xbded8e32, 0xae15eec1, 0x5c19e33f, 0x162628bf, 0xe42a2541,
-    0xf7d245b2, 0x05de484c, 0xd0228454, 0x222e89aa, 0x31d6e959, 0xc3dae4a7,
-    0x9fc30798, 0x6dcf0a66, 0x7e376a95, 0x8c3b676b, 0x59c7ab73, 0xabcba68d,
-    0xb833c67e, 0x4a3fcb80, 0x2c4c517e, 0xde405c80, 0xcdb83c73, 0x3fb4318d,
-    0xea48fd95, 0x1844f06b, 0x0bbc9098, 0xf9b09d66, 0xa5a97e59, 0x57a573a7,
-    0x445d1354, 0xb6511eaa, 0x63add2b2, 0x91a1df4c, 0x8259bfbf, 0x7055b241,
-    0x3a6a79c1, 0xc866743f, 0xdb9e14cc, 0x29921932, 0xfc6ed52a, 0x0e62d8d4,
-    0x1d9ab827, 0xef96b5d9, 0xb38f56e6, 0x41835b18, 0x527b3beb, 0xa0773615,
-    0x758bfa0d, 0x8787f7f3, 0x947f9700, 0x66739afe, 0x5898a2fc, 0xaa94af02,
-    0xb96ccff1, 0x4b60c20f, 0x9e9c0e17, 0x6c9003e9, 0x7f68631a, 0x8d646ee4,
-    0xd17d8ddb, 0x23718025, 0x3089e0d6, 0xc285ed28, 0x17792130, 0xe5752cce,
-    0xf68d4c3d, 0x048141c3, 0x4ebe8a43, 0xbcb287bd, 0xaf4ae74e, 0x5d46eab0,
-    0x88ba26a8, 0x7ab62b56, 0x694e4ba5, 0x9b42465b, 0xc75ba564, 0x3557a89a,
-    0x26afc869, 0xd4a3c597, 0x015f098f, 0xf3530471, 0xe0ab6482, 0x12a7697c,
-    0x74d4f382, 0x86d8fe7c, 0x95209e8f, 0x672c9371, 0xb2d05f69, 0x40dc5297,
-    0x53243264, 0xa1283f9a, 0xfd31dca5, 0x0f3dd15b, 0x1cc5b1a8, 0xeec9bc56,
-    0x3b35704e, 0xc9397db0, 0xdac11d43, 0x28cd10bd, 0x62f2db3d, 0x90fed6c3,
-    0x8306b630, 0x710abbce, 0xa4f677d6, 0x56fa7a28, 0x45021adb, 0xb70e1725,
-    0xeb17f41a, 0x191bf9e4, 0x0ae39917, 0xf8ef94e9, 0x2d1358f1, 0xdf1f550f,
-    0xcce735fc, 0x3eeb3802, 0xb13145f8, 0x433d4806, 0x50c528f5, 0xa2c9250b,
-    0x7735e913, 0x8539e4ed, 0x96c1841e, 0x64cd89e0, 0x38d46adf, 0xcad86721,
-    0xd92007d2, 0x2b2c0a2c, 0xfed0c634, 0x0cdccbca, 0x1f24ab39, 0xed28a6c7,
-    0xa7176d47, 0x551b60b9, 0x46e3004a, 0xb4ef0db4, 0x6113c1ac, 0x931fcc52,
-    0x80e7aca1, 0x72eba15f, 0x2ef24260, 0xdcfe4f9e, 0xcf062f6d, 0x3d0a2293,
-    0xe8f6ee8b, 0x1afae375, 0x09028386, 0xfb0e8e78, 0x9d7d1486, 0x6f711978,
-    0x7c89798b, 0x8e857475, 0x5b79b86d, 0xa975b593, 0xba8dd560, 0x4881d89e,
-    0x14983ba1, 0xe694365f, 0xf56c56ac, 0x07605b52, 0xd29c974a, 0x20909ab4,
-    0x3368fa47, 0xc164f7b9, 0x8b5b3c39, 0x795731c7, 0x6aaf5134, 0x98a35cca,
-    0x4d5f90d2, 0xbf539d2c, 0xacabfddf, 0x5ea7f021, 0x02be131e, 0xf0b21ee0,
-    0xe34a7e13, 0x114673ed, 0xc4babff5, 0x36b6b20b, 0x254ed2f8, 0xd742df06,
-    0xe9a9e704, 0x1ba5eafa, 0x085d8a09, 0xfa5187f7, 0x2fad4bef, 0xdda14611,
-    0xce5926e2, 0x3c552b1c, 0x604cc823, 0x9240c5dd, 0x81b8a52e, 0x73b4a8d0,
-    0xa64864c8, 0x54446936, 0x47bc09c5, 0xb5b0043b, 0xff8fcfbb, 0x0d83c245,
-    0x1e7ba2b6, 0xec77af48, 0x398b6350, 0xcb876eae, 0xd87f0e5d, 0x2a7303a3,
-    0x766ae09c, 0x8466ed62, 0x979e8d91, 0x6592806f, 0xb06e4c77, 0x42624189,
-    0x519a217a, 0xa3962c84, 0xc5e5b67a, 0x37e9bb84, 0x2411db77, 0xd61dd689,
-    0x03e11a91, 0xf1ed176f, 0xe215779c, 0x10197a62, 0x4c00995d, 0xbe0c94a3,
-    0xadf4f450, 0x5ff8f9ae, 0x8a0435b6, 0x78083848, 0x6bf058bb, 0x99fc5545,
-    0xd3c39ec5, 0x21cf933b, 0x3237f3c8, 0xc03bfe36, 0x15c7322e, 0xe7cb3fd0,
-    0xf4335f23, 0x063f52dd, 0x5a26b1e2, 0xa82abc1c, 0xbbd2dcef, 0x49ded111,
-    0x9c221d09, 0x6e2e10f7, 0x7dd67004, 0x8fda7dfa};
-
-// CRCs are pre- and post- conditioned by xoring with all ones.
-static constexpr const uint32_t kCRC32Xor = static_cast<uint32_t>(0xffffffffU);
-
-// Reads a little-endian 32-bit integer from a 32-bit-aligned buffer.
-inline uint32_t ReadUint32LE(const uint8_t* buffer) {
-  return DecodeFixed32(reinterpret_cast<const char*>(buffer));
-}
-
-// Returns the smallest address >= the given address that is aligned to N bytes.
-//
-// N must be a power of two.
-template <int N>
-constexpr inline const uint8_t* RoundUp(const uint8_t* pointer) {
-  return reinterpret_cast<uint8_t*>(
-      (reinterpret_cast<uintptr_t>(pointer) + (N - 1)) &
-      ~static_cast<uintptr_t>(N - 1));
-}
-
-}  // namespace
-
-// Determine if the CPU running this program can accelerate the CRC32C
-// calculation.
-static bool CanAccelerateCRC32C() {
-  // port::AcceleretedCRC32C returns zero when unable to accelerate.
-  static const char kTestCRCBuffer[] = "TestCRCBuffer";
-  static const char kBufSize = sizeof(kTestCRCBuffer) - 1;
-  static const uint32_t kTestCRCValue = 0xdcbc59fa;
-
-  return port::AcceleratedCRC32C(0, kTestCRCBuffer, kBufSize) == kTestCRCValue;
-}
-
-uint32_t Extend(uint32_t crc, const char* data, size_t n) {
-  static bool accelerate = CanAccelerateCRC32C();
-  if (accelerate) {
-    return port::AcceleratedCRC32C(crc, data, n);
-  }
-
-  const uint8_t* p = reinterpret_cast<const uint8_t*>(data);
-  const uint8_t* e = p + n;
-  uint32_t l = crc ^ kCRC32Xor;
-
-// Process one byte at a time.
-#define STEP1                              \
-  do {                                     \
-    int c = (l & 0xff) ^ *p++;             \
-    l = kByteExtensionTable[c] ^ (l >> 8); \
-  } while (0)
-
-// Process one of the 4 strides of 4-byte data.
-#define STEP4(s)                                                               \
-  do {                                                                         \
-    crc##s = ReadUint32LE(p + s * 4) ^ kStrideExtensionTable3[crc##s & 0xff] ^ \
-             kStrideExtensionTable2[(crc##s >> 8) & 0xff] ^                    \
-             kStrideExtensionTable1[(crc##s >> 16) & 0xff] ^                   \
-             kStrideExtensionTable0[crc##s >> 24];                             \
-  } while (0)
-
-// Process a 16-byte swath of 4 strides, each of which has 4 bytes of data.
-#define STEP16 \
-  do {         \
-    STEP4(0);  \
-    STEP4(1);  \
-    STEP4(2);  \
-    STEP4(3);  \
-    p += 16;   \
-  } while (0)
-
-// Process 4 bytes that were already loaded into a word.
-#define STEP4W(w)                                   \
-  do {                                              \
-    w ^= l;                                         \
-    for (size_t i = 0; i < 4; ++i) {                \
-      w = (w >> 8) ^ kByteExtensionTable[w & 0xff]; \
-    }                                               \
-    l = w;                                          \
-  } while (0)
-
-  // Point x at first 4-byte aligned byte in the buffer. This might be past the
-  // end of the buffer.
-  const uint8_t* x = RoundUp<4>(p);
-  if (x <= e) {
-    // Process bytes p is 4-byte aligned.
-    while (p != x) {
-      STEP1;
-    }
-  }
-
-  if ((e - p) >= 16) {
-    // Load a 16-byte swath into the stride partial results.
-    uint32_t crc0 = ReadUint32LE(p + 0 * 4) ^ l;
-    uint32_t crc1 = ReadUint32LE(p + 1 * 4);
-    uint32_t crc2 = ReadUint32LE(p + 2 * 4);
-    uint32_t crc3 = ReadUint32LE(p + 3 * 4);
-    p += 16;
-
-    // It is possible to get better speeds (at least on x86) by interleaving
-    // prefetching 256 bytes ahead with processing 64 bytes at a time. See the
-    // portable implementation in https://github.com/google/crc32c/.
-
-    // Process one 16-byte swath at a time.
-    while ((e - p) >= 16) {
-      STEP16;
-    }
-
-    // Advance one word at a time as far as possible.
-    while ((e - p) >= 4) {
-      STEP4(0);
-      uint32_t tmp = crc0;
-      crc0 = crc1;
-      crc1 = crc2;
-      crc2 = crc3;
-      crc3 = tmp;
-      p += 4;
-    }
-
-    // Combine the 4 partial stride results.
-    l = 0;
-    STEP4W(crc0);
-    STEP4W(crc1);
-    STEP4W(crc2);
-    STEP4W(crc3);
-  }
-
-  // Process the last few bytes.
-  while (p != e) {
-    STEP1;
-  }
-#undef STEP4W
-#undef STEP16
-#undef STEP4
-#undef STEP1
-  return l ^ kCRC32Xor;
-}
-
-}  // namespace crc32c
-}  // namespace leveldb
diff --git a/assign5/openTok/Pods/leveldb-library/util/crc32c.h b/assign5/openTok/Pods/leveldb-library/util/crc32c.h
deleted file mode 100644
index 98fabb0..0000000
--- a/assign5/openTok/Pods/leveldb-library/util/crc32c.h
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#ifndef STORAGE_LEVELDB_UTIL_CRC32C_H_
-#define STORAGE_LEVELDB_UTIL_CRC32C_H_
-
-#include <stddef.h>
-#include <stdint.h>
-
-namespace leveldb {
-namespace crc32c {
-
-// Return the crc32c of concat(A, data[0,n-1]) where init_crc is the
-// crc32c of some string A.  Extend() is often used to maintain the
-// crc32c of a stream of data.
-uint32_t Extend(uint32_t init_crc, const char* data, size_t n);
-
-// Return the crc32c of data[0,n-1]
-inline uint32_t Value(const char* data, size_t n) { return Extend(0, data, n); }
-
-static const uint32_t kMaskDelta = 0xa282ead8ul;
-
-// Return a masked representation of crc.
-//
-// Motivation: it is problematic to compute the CRC of a string that
-// contains embedded CRCs.  Therefore we recommend that CRCs stored
-// somewhere (e.g., in files) should be masked before being stored.
-inline uint32_t Mask(uint32_t crc) {
-  // Rotate right by 15 bits and add a constant.
-  return ((crc >> 15) | (crc << 17)) + kMaskDelta;
-}
-
-// Return the crc whose masked representation is masked_crc.
-inline uint32_t Unmask(uint32_t masked_crc) {
-  uint32_t rot = masked_crc - kMaskDelta;
-  return ((rot >> 17) | (rot << 15));
-}
-
-}  // namespace crc32c
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_UTIL_CRC32C_H_
diff --git a/assign5/openTok/Pods/leveldb-library/util/env.cc b/assign5/openTok/Pods/leveldb-library/util/env.cc
deleted file mode 100644
index 6cd5f2e..0000000
--- a/assign5/openTok/Pods/leveldb-library/util/env.cc
+++ /dev/null
@@ -1,92 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#include "leveldb/env.h"
-
-namespace leveldb {
-
-Env::~Env() {}
-
-Status Env::NewAppendableFile(const std::string& fname, WritableFile** result) {
-  return Status::NotSupported("NewAppendableFile", fname);
-}
-
-SequentialFile::~SequentialFile() {}
-
-RandomAccessFile::~RandomAccessFile() {}
-
-WritableFile::~WritableFile() {}
-
-Logger::~Logger() {}
-
-FileLock::~FileLock() {}
-
-void Log(Logger* info_log, const char* format, ...) {
-  if (info_log != nullptr) {
-    va_list ap;
-    va_start(ap, format);
-    info_log->Logv(format, ap);
-    va_end(ap);
-  }
-}
-
-static Status DoWriteStringToFile(Env* env, const Slice& data,
-                                  const std::string& fname, bool should_sync) {
-  WritableFile* file;
-  Status s = env->NewWritableFile(fname, &file);
-  if (!s.ok()) {
-    return s;
-  }
-  s = file->Append(data);
-  if (s.ok() && should_sync) {
-    s = file->Sync();
-  }
-  if (s.ok()) {
-    s = file->Close();
-  }
-  delete file;  // Will auto-close if we did not close above
-  if (!s.ok()) {
-    env->DeleteFile(fname);
-  }
-  return s;
-}
-
-Status WriteStringToFile(Env* env, const Slice& data,
-                         const std::string& fname) {
-  return DoWriteStringToFile(env, data, fname, false);
-}
-
-Status WriteStringToFileSync(Env* env, const Slice& data,
-                             const std::string& fname) {
-  return DoWriteStringToFile(env, data, fname, true);
-}
-
-Status ReadFileToString(Env* env, const std::string& fname, std::string* data) {
-  data->clear();
-  SequentialFile* file;
-  Status s = env->NewSequentialFile(fname, &file);
-  if (!s.ok()) {
-    return s;
-  }
-  static const int kBufferSize = 8192;
-  char* space = new char[kBufferSize];
-  while (true) {
-    Slice fragment;
-    s = file->Read(kBufferSize, &fragment, space);
-    if (!s.ok()) {
-      break;
-    }
-    data->append(fragment.data(), fragment.size());
-    if (fragment.empty()) {
-      break;
-    }
-  }
-  delete[] space;
-  delete file;
-  return s;
-}
-
-EnvWrapper::~EnvWrapper() {}
-
-}  // namespace leveldb
diff --git a/assign5/openTok/Pods/leveldb-library/util/env_posix.cc b/assign5/openTok/Pods/leveldb-library/util/env_posix.cc
deleted file mode 100644
index 8c74f5a..0000000
--- a/assign5/openTok/Pods/leveldb-library/util/env_posix.cc
+++ /dev/null
@@ -1,876 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#include <dirent.h>
-#include <fcntl.h>
-#include <pthread.h>
-#include <sys/mman.h>
-#include <sys/resource.h>
-#include <sys/stat.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <unistd.h>
-
-#include <atomic>
-#include <cerrno>
-#include <cstddef>
-#include <cstdint>
-#include <cstdio>
-#include <cstdlib>
-#include <cstring>
-#include <limits>
-#include <queue>
-#include <set>
-#include <string>
-#include <thread>
-#include <type_traits>
-#include <utility>
-
-#include "leveldb/env.h"
-#include "leveldb/slice.h"
-#include "leveldb/status.h"
-#include "port/port.h"
-#include "port/thread_annotations.h"
-#include "util/env_posix_test_helper.h"
-#include "util/posix_logger.h"
-
-namespace leveldb {
-
-namespace {
-
-// Set by EnvPosixTestHelper::SetReadOnlyMMapLimit() and MaxOpenFiles().
-int g_open_read_only_file_limit = -1;
-
-// Up to 1000 mmap regions for 64-bit binaries; none for 32-bit.
-constexpr const int kDefaultMmapLimit = (sizeof(void*) >= 8) ? 1000 : 0;
-
-// Can be set using EnvPosixTestHelper::SetReadOnlyMMapLimit.
-int g_mmap_limit = kDefaultMmapLimit;
-
-constexpr const size_t kWritableFileBufferSize = 65536;
-
-Status PosixError(const std::string& context, int error_number) {
-  if (error_number == ENOENT) {
-    return Status::NotFound(context, std::strerror(error_number));
-  } else {
-    return Status::IOError(context, std::strerror(error_number));
-  }
-}
-
-// Helper class to limit resource usage to avoid exhaustion.
-// Currently used to limit read-only file descriptors and mmap file usage
-// so that we do not run out of file descriptors or virtual memory, or run into
-// kernel performance problems for very large databases.
-class Limiter {
- public:
-  // Limit maximum number of resources to |max_acquires|.
-  Limiter(int max_acquires) : acquires_allowed_(max_acquires) {}
-
-  Limiter(const Limiter&) = delete;
-  Limiter operator=(const Limiter&) = delete;
-
-  // If another resource is available, acquire it and return true.
-  // Else return false.
-  bool Acquire() {
-    int old_acquires_allowed =
-        acquires_allowed_.fetch_sub(1, std::memory_order_relaxed);
-
-    if (old_acquires_allowed > 0) return true;
-
-    acquires_allowed_.fetch_add(1, std::memory_order_relaxed);
-    return false;
-  }
-
-  // Release a resource acquired by a previous call to Acquire() that returned
-  // true.
-  void Release() { acquires_allowed_.fetch_add(1, std::memory_order_relaxed); }
-
- private:
-  // The number of available resources.
-  //
-  // This is a counter and is not tied to the invariants of any other class, so
-  // it can be operated on safely using std::memory_order_relaxed.
-  std::atomic<int> acquires_allowed_;
-};
-
-// Implements sequential read access in a file using read().
-//
-// Instances of this class are thread-friendly but not thread-safe, as required
-// by the SequentialFile API.
-class PosixSequentialFile final : public SequentialFile {
- public:
-  PosixSequentialFile(std::string filename, int fd)
-      : fd_(fd), filename_(filename) {}
-  ~PosixSequentialFile() override { close(fd_); }
-
-  Status Read(size_t n, Slice* result, char* scratch) override {
-    Status status;
-    while (true) {
-      ::ssize_t read_size = ::read(fd_, scratch, n);
-      if (read_size < 0) {  // Read error.
-        if (errno == EINTR) {
-          continue;  // Retry
-        }
-        status = PosixError(filename_, errno);
-        break;
-      }
-      *result = Slice(scratch, read_size);
-      break;
-    }
-    return status;
-  }
-
-  Status Skip(uint64_t n) override {
-    if (::lseek(fd_, n, SEEK_CUR) == static_cast<off_t>(-1)) {
-      return PosixError(filename_, errno);
-    }
-    return Status::OK();
-  }
-
- private:
-  const int fd_;
-  const std::string filename_;
-};
-
-// Implements random read access in a file using pread().
-//
-// Instances of this class are thread-safe, as required by the RandomAccessFile
-// API. Instances are immutable and Read() only calls thread-safe library
-// functions.
-class PosixRandomAccessFile final : public RandomAccessFile {
- public:
-  // The new instance takes ownership of |fd|. |fd_limiter| must outlive this
-  // instance, and will be used to determine if .
-  PosixRandomAccessFile(std::string filename, int fd, Limiter* fd_limiter)
-      : has_permanent_fd_(fd_limiter->Acquire()),
-        fd_(has_permanent_fd_ ? fd : -1),
-        fd_limiter_(fd_limiter),
-        filename_(std::move(filename)) {
-    if (!has_permanent_fd_) {
-      assert(fd_ == -1);
-      ::close(fd);  // The file will be opened on every read.
-    }
-  }
-
-  ~PosixRandomAccessFile() override {
-    if (has_permanent_fd_) {
-      assert(fd_ != -1);
-      ::close(fd_);
-      fd_limiter_->Release();
-    }
-  }
-
-  Status Read(uint64_t offset, size_t n, Slice* result,
-              char* scratch) const override {
-    int fd = fd_;
-    if (!has_permanent_fd_) {
-      fd = ::open(filename_.c_str(), O_RDONLY);
-      if (fd < 0) {
-        return PosixError(filename_, errno);
-      }
-    }
-
-    assert(fd != -1);
-
-    Status status;
-    ssize_t read_size = ::pread(fd, scratch, n, static_cast<off_t>(offset));
-    *result = Slice(scratch, (read_size < 0) ? 0 : read_size);
-    if (read_size < 0) {
-      // An error: return a non-ok status.
-      status = PosixError(filename_, errno);
-    }
-    if (!has_permanent_fd_) {
-      // Close the temporary file descriptor opened earlier.
-      assert(fd != fd_);
-      ::close(fd);
-    }
-    return status;
-  }
-
- private:
-  const bool has_permanent_fd_;  // If false, the file is opened on every read.
-  const int fd_;                 // -1 if has_permanent_fd_ is false.
-  Limiter* const fd_limiter_;
-  const std::string filename_;
-};
-
-// Implements random read access in a file using mmap().
-//
-// Instances of this class are thread-safe, as required by the RandomAccessFile
-// API. Instances are immutable and Read() only calls thread-safe library
-// functions.
-class PosixMmapReadableFile final : public RandomAccessFile {
- public:
-  // mmap_base[0, length-1] points to the memory-mapped contents of the file. It
-  // must be the result of a successful call to mmap(). This instances takes
-  // over the ownership of the region.
-  //
-  // |mmap_limiter| must outlive this instance. The caller must have already
-  // aquired the right to use one mmap region, which will be released when this
-  // instance is destroyed.
-  PosixMmapReadableFile(std::string filename, char* mmap_base, size_t length,
-                        Limiter* mmap_limiter)
-      : mmap_base_(mmap_base),
-        length_(length),
-        mmap_limiter_(mmap_limiter),
-        filename_(std::move(filename)) {}
-
-  ~PosixMmapReadableFile() override {
-    ::munmap(static_cast<void*>(mmap_base_), length_);
-    mmap_limiter_->Release();
-  }
-
-  Status Read(uint64_t offset, size_t n, Slice* result,
-              char* scratch) const override {
-    if (offset + n > length_) {
-      *result = Slice();
-      return PosixError(filename_, EINVAL);
-    }
-
-    *result = Slice(mmap_base_ + offset, n);
-    return Status::OK();
-  }
-
- private:
-  char* const mmap_base_;
-  const size_t length_;
-  Limiter* const mmap_limiter_;
-  const std::string filename_;
-};
-
-class PosixWritableFile final : public WritableFile {
- public:
-  PosixWritableFile(std::string filename, int fd)
-      : pos_(0),
-        fd_(fd),
-        is_manifest_(IsManifest(filename)),
-        filename_(std::move(filename)),
-        dirname_(Dirname(filename_)) {}
-
-  ~PosixWritableFile() override {
-    if (fd_ >= 0) {
-      // Ignoring any potential errors
-      Close();
-    }
-  }
-
-  Status Append(const Slice& data) override {
-    size_t write_size = data.size();
-    const char* write_data = data.data();
-
-    // Fit as much as possible into buffer.
-    size_t copy_size = std::min(write_size, kWritableFileBufferSize - pos_);
-    std::memcpy(buf_ + pos_, write_data, copy_size);
-    write_data += copy_size;
-    write_size -= copy_size;
-    pos_ += copy_size;
-    if (write_size == 0) {
-      return Status::OK();
-    }
-
-    // Can't fit in buffer, so need to do at least one write.
-    Status status = FlushBuffer();
-    if (!status.ok()) {
-      return status;
-    }
-
-    // Small writes go to buffer, large writes are written directly.
-    if (write_size < kWritableFileBufferSize) {
-      std::memcpy(buf_, write_data, write_size);
-      pos_ = write_size;
-      return Status::OK();
-    }
-    return WriteUnbuffered(write_data, write_size);
-  }
-
-  Status Close() override {
-    Status status = FlushBuffer();
-    const int close_result = ::close(fd_);
-    if (close_result < 0 && status.ok()) {
-      status = PosixError(filename_, errno);
-    }
-    fd_ = -1;
-    return status;
-  }
-
-  Status Flush() override { return FlushBuffer(); }
-
-  Status Sync() override {
-    // Ensure new files referred to by the manifest are in the filesystem.
-    //
-    // This needs to happen before the manifest file is flushed to disk, to
-    // avoid crashing in a state where the manifest refers to files that are not
-    // yet on disk.
-    Status status = SyncDirIfManifest();
-    if (!status.ok()) {
-      return status;
-    }
-
-    status = FlushBuffer();
-    if (!status.ok()) {
-      return status;
-    }
-
-    return SyncFd(fd_, filename_);
-  }
-
- private:
-  Status FlushBuffer() {
-    Status status = WriteUnbuffered(buf_, pos_);
-    pos_ = 0;
-    return status;
-  }
-
-  Status WriteUnbuffered(const char* data, size_t size) {
-    while (size > 0) {
-      ssize_t write_result = ::write(fd_, data, size);
-      if (write_result < 0) {
-        if (errno == EINTR) {
-          continue;  // Retry
-        }
-        return PosixError(filename_, errno);
-      }
-      data += write_result;
-      size -= write_result;
-    }
-    return Status::OK();
-  }
-
-  Status SyncDirIfManifest() {
-    Status status;
-    if (!is_manifest_) {
-      return status;
-    }
-
-    int fd = ::open(dirname_.c_str(), O_RDONLY);
-    if (fd < 0) {
-      status = PosixError(dirname_, errno);
-    } else {
-      status = SyncFd(fd, dirname_);
-      ::close(fd);
-    }
-    return status;
-  }
-
-  // Ensures that all the caches associated with the given file descriptor's
-  // data are flushed all the way to durable media, and can withstand power
-  // failures.
-  //
-  // The path argument is only used to populate the description string in the
-  // returned Status if an error occurs.
-  static Status SyncFd(int fd, const std::string& fd_path) {
-#if HAVE_FULLFSYNC
-    // On macOS and iOS, fsync() doesn't guarantee durability past power
-    // failures. fcntl(F_FULLFSYNC) is required for that purpose. Some
-    // filesystems don't support fcntl(F_FULLFSYNC), and require a fallback to
-    // fsync().
-    if (::fcntl(fd, F_FULLFSYNC) == 0) {
-      return Status::OK();
-    }
-#endif  // HAVE_FULLFSYNC
-
-#if HAVE_FDATASYNC
-    bool sync_success = ::fdatasync(fd) == 0;
-#else
-    bool sync_success = ::fsync(fd) == 0;
-#endif  // HAVE_FDATASYNC
-
-    if (sync_success) {
-      return Status::OK();
-    }
-    return PosixError(fd_path, errno);
-  }
-
-  // Returns the directory name in a path pointing to a file.
-  //
-  // Returns "." if the path does not contain any directory separator.
-  static std::string Dirname(const std::string& filename) {
-    std::string::size_type separator_pos = filename.rfind('/');
-    if (separator_pos == std::string::npos) {
-      return std::string(".");
-    }
-    // The filename component should not contain a path separator. If it does,
-    // the splitting was done incorrectly.
-    assert(filename.find('/', separator_pos + 1) == std::string::npos);
-
-    return filename.substr(0, separator_pos);
-  }
-
-  // Extracts the file name from a path pointing to a file.
-  //
-  // The returned Slice points to |filename|'s data buffer, so it is only valid
-  // while |filename| is alive and unchanged.
-  static Slice Basename(const std::string& filename) {
-    std::string::size_type separator_pos = filename.rfind('/');
-    if (separator_pos == std::string::npos) {
-      return Slice(filename);
-    }
-    // The filename component should not contain a path separator. If it does,
-    // the splitting was done incorrectly.
-    assert(filename.find('/', separator_pos + 1) == std::string::npos);
-
-    return Slice(filename.data() + separator_pos + 1,
-                 filename.length() - separator_pos - 1);
-  }
-
-  // True if the given file is a manifest file.
-  static bool IsManifest(const std::string& filename) {
-    return Basename(filename).starts_with("MANIFEST");
-  }
-
-  // buf_[0, pos_ - 1] contains data to be written to fd_.
-  char buf_[kWritableFileBufferSize];
-  size_t pos_;
-  int fd_;
-
-  const bool is_manifest_;  // True if the file's name starts with MANIFEST.
-  const std::string filename_;
-  const std::string dirname_;  // The directory of filename_.
-};
-
-int LockOrUnlock(int fd, bool lock) {
-  errno = 0;
-  struct ::flock file_lock_info;
-  std::memset(&file_lock_info, 0, sizeof(file_lock_info));
-  file_lock_info.l_type = (lock ? F_WRLCK : F_UNLCK);
-  file_lock_info.l_whence = SEEK_SET;
-  file_lock_info.l_start = 0;
-  file_lock_info.l_len = 0;  // Lock/unlock entire file.
-  return ::fcntl(fd, F_SETLK, &file_lock_info);
-}
-
-// Instances are thread-safe because they are immutable.
-class PosixFileLock : public FileLock {
- public:
-  PosixFileLock(int fd, std::string filename)
-      : fd_(fd), filename_(std::move(filename)) {}
-
-  int fd() const { return fd_; }
-  const std::string& filename() const { return filename_; }
-
- private:
-  const int fd_;
-  const std::string filename_;
-};
-
-// Tracks the files locked by PosixEnv::LockFile().
-//
-// We maintain a separate set instead of relying on fcntrl(F_SETLK) because
-// fcntl(F_SETLK) does not provide any protection against multiple uses from the
-// same process.
-//
-// Instances are thread-safe because all member data is guarded by a mutex.
-class PosixLockTable {
- public:
-  bool Insert(const std::string& fname) LOCKS_EXCLUDED(mu_) {
-    mu_.Lock();
-    bool succeeded = locked_files_.insert(fname).second;
-    mu_.Unlock();
-    return succeeded;
-  }
-  void Remove(const std::string& fname) LOCKS_EXCLUDED(mu_) {
-    mu_.Lock();
-    locked_files_.erase(fname);
-    mu_.Unlock();
-  }
-
- private:
-  port::Mutex mu_;
-  std::set<std::string> locked_files_ GUARDED_BY(mu_);
-};
-
-class PosixEnv : public Env {
- public:
-  PosixEnv();
-  ~PosixEnv() override {
-    static char msg[] = "PosixEnv singleton destroyed. Unsupported behavior!\n";
-    std::fwrite(msg, 1, sizeof(msg), stderr);
-    std::abort();
-  }
-
-  Status NewSequentialFile(const std::string& filename,
-                           SequentialFile** result) override {
-    int fd = ::open(filename.c_str(), O_RDONLY);
-    if (fd < 0) {
-      *result = nullptr;
-      return PosixError(filename, errno);
-    }
-
-    *result = new PosixSequentialFile(filename, fd);
-    return Status::OK();
-  }
-
-  Status NewRandomAccessFile(const std::string& filename,
-                             RandomAccessFile** result) override {
-    *result = nullptr;
-    int fd = ::open(filename.c_str(), O_RDONLY);
-    if (fd < 0) {
-      return PosixError(filename, errno);
-    }
-
-    if (!mmap_limiter_.Acquire()) {
-      *result = new PosixRandomAccessFile(filename, fd, &fd_limiter_);
-      return Status::OK();
-    }
-
-    uint64_t file_size;
-    Status status = GetFileSize(filename, &file_size);
-    if (status.ok()) {
-      void* mmap_base =
-          ::mmap(/*addr=*/nullptr, file_size, PROT_READ, MAP_SHARED, fd, 0);
-      if (mmap_base != MAP_FAILED) {
-        *result = new PosixMmapReadableFile(filename,
-                                            reinterpret_cast<char*>(mmap_base),
-                                            file_size, &mmap_limiter_);
-      } else {
-        status = PosixError(filename, errno);
-      }
-    }
-    ::close(fd);
-    if (!status.ok()) {
-      mmap_limiter_.Release();
-    }
-    return status;
-  }
-
-  Status NewWritableFile(const std::string& filename,
-                         WritableFile** result) override {
-    int fd = ::open(filename.c_str(), O_TRUNC | O_WRONLY | O_CREAT, 0644);
-    if (fd < 0) {
-      *result = nullptr;
-      return PosixError(filename, errno);
-    }
-
-    *result = new PosixWritableFile(filename, fd);
-    return Status::OK();
-  }
-
-  Status NewAppendableFile(const std::string& filename,
-                           WritableFile** result) override {
-    int fd = ::open(filename.c_str(), O_APPEND | O_WRONLY | O_CREAT, 0644);
-    if (fd < 0) {
-      *result = nullptr;
-      return PosixError(filename, errno);
-    }
-
-    *result = new PosixWritableFile(filename, fd);
-    return Status::OK();
-  }
-
-  bool FileExists(const std::string& filename) override {
-    return ::access(filename.c_str(), F_OK) == 0;
-  }
-
-  Status GetChildren(const std::string& directory_path,
-                     std::vector<std::string>* result) override {
-    result->clear();
-    ::DIR* dir = ::opendir(directory_path.c_str());
-    if (dir == nullptr) {
-      return PosixError(directory_path, errno);
-    }
-    struct ::dirent* entry;
-    while ((entry = ::readdir(dir)) != nullptr) {
-      result->emplace_back(entry->d_name);
-    }
-    ::closedir(dir);
-    return Status::OK();
-  }
-
-  Status DeleteFile(const std::string& filename) override {
-    if (::unlink(filename.c_str()) != 0) {
-      return PosixError(filename, errno);
-    }
-    return Status::OK();
-  }
-
-  Status CreateDir(const std::string& dirname) override {
-    if (::mkdir(dirname.c_str(), 0755) != 0) {
-      return PosixError(dirname, errno);
-    }
-    return Status::OK();
-  }
-
-  Status DeleteDir(const std::string& dirname) override {
-    if (::rmdir(dirname.c_str()) != 0) {
-      return PosixError(dirname, errno);
-    }
-    return Status::OK();
-  }
-
-  Status GetFileSize(const std::string& filename, uint64_t* size) override {
-    struct ::stat file_stat;
-    if (::stat(filename.c_str(), &file_stat) != 0) {
-      *size = 0;
-      return PosixError(filename, errno);
-    }
-    *size = file_stat.st_size;
-    return Status::OK();
-  }
-
-  Status RenameFile(const std::string& from, const std::string& to) override {
-    if (std::rename(from.c_str(), to.c_str()) != 0) {
-      return PosixError(from, errno);
-    }
-    return Status::OK();
-  }
-
-  Status LockFile(const std::string& filename, FileLock** lock) override {
-    *lock = nullptr;
-
-    int fd = ::open(filename.c_str(), O_RDWR | O_CREAT, 0644);
-    if (fd < 0) {
-      return PosixError(filename, errno);
-    }
-
-    if (!locks_.Insert(filename)) {
-      ::close(fd);
-      return Status::IOError("lock " + filename, "already held by process");
-    }
-
-    if (LockOrUnlock(fd, true) == -1) {
-      int lock_errno = errno;
-      ::close(fd);
-      locks_.Remove(filename);
-      return PosixError("lock " + filename, lock_errno);
-    }
-
-    *lock = new PosixFileLock(fd, filename);
-    return Status::OK();
-  }
-
-  Status UnlockFile(FileLock* lock) override {
-    PosixFileLock* posix_file_lock = static_cast<PosixFileLock*>(lock);
-    if (LockOrUnlock(posix_file_lock->fd(), false) == -1) {
-      return PosixError("unlock " + posix_file_lock->filename(), errno);
-    }
-    locks_.Remove(posix_file_lock->filename());
-    ::close(posix_file_lock->fd());
-    delete posix_file_lock;
-    return Status::OK();
-  }
-
-  void Schedule(void (*background_work_function)(void* background_work_arg),
-                void* background_work_arg) override;
-
-  void StartThread(void (*thread_main)(void* thread_main_arg),
-                   void* thread_main_arg) override;
-
-  Status GetTestDirectory(std::string* result) override {
-    const char* env = std::getenv("TEST_TMPDIR");
-    if (env && env[0] != '\0') {
-      *result = env;
-    } else {
-      char buf[100];
-      std::snprintf(buf, sizeof(buf), "/tmp/leveldbtest-%d",
-                    static_cast<int>(::geteuid()));
-      *result = buf;
-    }
-
-    // The CreateDir status is ignored because the directory may already exist.
-    CreateDir(*result);
-
-    return Status::OK();
-  }
-
-  Status NewLogger(const std::string& filename, Logger** result) override {
-    std::FILE* fp = std::fopen(filename.c_str(), "w");
-    if (fp == nullptr) {
-      *result = nullptr;
-      return PosixError(filename, errno);
-    } else {
-      *result = new PosixLogger(fp);
-      return Status::OK();
-    }
-  }
-
-  uint64_t NowMicros() override {
-    static constexpr uint64_t kUsecondsPerSecond = 1000000;
-    struct ::timeval tv;
-    ::gettimeofday(&tv, nullptr);
-    return static_cast<uint64_t>(tv.tv_sec) * kUsecondsPerSecond + tv.tv_usec;
-  }
-
-  void SleepForMicroseconds(int micros) override { ::usleep(micros); }
-
- private:
-  void BackgroundThreadMain();
-
-  static void BackgroundThreadEntryPoint(PosixEnv* env) {
-    env->BackgroundThreadMain();
-  }
-
-  // Stores the work item data in a Schedule() call.
-  //
-  // Instances are constructed on the thread calling Schedule() and used on the
-  // background thread.
-  //
-  // This structure is thread-safe beacuse it is immutable.
-  struct BackgroundWorkItem {
-    explicit BackgroundWorkItem(void (*function)(void* arg), void* arg)
-        : function(function), arg(arg) {}
-
-    void (*const function)(void*);
-    void* const arg;
-  };
-
-  port::Mutex background_work_mutex_;
-  port::CondVar background_work_cv_ GUARDED_BY(background_work_mutex_);
-  bool started_background_thread_ GUARDED_BY(background_work_mutex_);
-
-  std::queue<BackgroundWorkItem> background_work_queue_
-      GUARDED_BY(background_work_mutex_);
-
-  PosixLockTable locks_;  // Thread-safe.
-  Limiter mmap_limiter_;  // Thread-safe.
-  Limiter fd_limiter_;    // Thread-safe.
-};
-
-// Return the maximum number of concurrent mmaps.
-int MaxMmaps() { return g_mmap_limit; }
-
-// Return the maximum number of read-only files to keep open.
-int MaxOpenFiles() {
-  if (g_open_read_only_file_limit >= 0) {
-    return g_open_read_only_file_limit;
-  }
-  struct ::rlimit rlim;
-  if (::getrlimit(RLIMIT_NOFILE, &rlim)) {
-    // getrlimit failed, fallback to hard-coded default.
-    g_open_read_only_file_limit = 50;
-  } else if (rlim.rlim_cur == RLIM_INFINITY) {
-    g_open_read_only_file_limit = std::numeric_limits<int>::max();
-  } else {
-    // Allow use of 20% of available file descriptors for read-only files.
-    g_open_read_only_file_limit = rlim.rlim_cur / 5;
-  }
-  return g_open_read_only_file_limit;
-}
-
-}  // namespace
-
-PosixEnv::PosixEnv()
-    : background_work_cv_(&background_work_mutex_),
-      started_background_thread_(false),
-      mmap_limiter_(MaxMmaps()),
-      fd_limiter_(MaxOpenFiles()) {}
-
-void PosixEnv::Schedule(
-    void (*background_work_function)(void* background_work_arg),
-    void* background_work_arg) {
-  background_work_mutex_.Lock();
-
-  // Start the background thread, if we haven't done so already.
-  if (!started_background_thread_) {
-    started_background_thread_ = true;
-    std::thread background_thread(PosixEnv::BackgroundThreadEntryPoint, this);
-    background_thread.detach();
-  }
-
-  // If the queue is empty, the background thread may be waiting for work.
-  if (background_work_queue_.empty()) {
-    background_work_cv_.Signal();
-  }
-
-  background_work_queue_.emplace(background_work_function, background_work_arg);
-  background_work_mutex_.Unlock();
-}
-
-void PosixEnv::BackgroundThreadMain() {
-  while (true) {
-    background_work_mutex_.Lock();
-
-    // Wait until there is work to be done.
-    while (background_work_queue_.empty()) {
-      background_work_cv_.Wait();
-    }
-
-    assert(!background_work_queue_.empty());
-    auto background_work_function = background_work_queue_.front().function;
-    void* background_work_arg = background_work_queue_.front().arg;
-    background_work_queue_.pop();
-
-    background_work_mutex_.Unlock();
-    background_work_function(background_work_arg);
-  }
-}
-
-namespace {
-
-// Wraps an Env instance whose destructor is never created.
-//
-// Intended usage:
-//   using PlatformSingletonEnv = SingletonEnv<PlatformEnv>;
-//   void ConfigurePosixEnv(int param) {
-//     PlatformSingletonEnv::AssertEnvNotInitialized();
-//     // set global configuration flags.
-//   }
-//   Env* Env::Default() {
-//     static PlatformSingletonEnv default_env;
-//     return default_env.env();
-//   }
-template <typename EnvType>
-class SingletonEnv {
- public:
-  SingletonEnv() {
-#if !defined(NDEBUG)
-    env_initialized_.store(true, std::memory_order::memory_order_relaxed);
-#endif  // !defined(NDEBUG)
-    static_assert(sizeof(env_storage_) >= sizeof(EnvType),
-                  "env_storage_ will not fit the Env");
-    static_assert(alignof(decltype(env_storage_)) >= alignof(EnvType),
-                  "env_storage_ does not meet the Env's alignment needs");
-    new (&env_storage_) EnvType();
-  }
-  ~SingletonEnv() = default;
-
-  SingletonEnv(const SingletonEnv&) = delete;
-  SingletonEnv& operator=(const SingletonEnv&) = delete;
-
-  Env* env() { return reinterpret_cast<Env*>(&env_storage_); }
-
-  static void AssertEnvNotInitialized() {
-#if !defined(NDEBUG)
-    assert(!env_initialized_.load(std::memory_order::memory_order_relaxed));
-#endif  // !defined(NDEBUG)
-  }
-
- private:
-  typename std::aligned_storage<sizeof(EnvType), alignof(EnvType)>::type
-      env_storage_;
-#if !defined(NDEBUG)
-  static std::atomic<bool> env_initialized_;
-#endif  // !defined(NDEBUG)
-};
-
-#if !defined(NDEBUG)
-template <typename EnvType>
-std::atomic<bool> SingletonEnv<EnvType>::env_initialized_;
-#endif  // !defined(NDEBUG)
-
-using PosixDefaultEnv = SingletonEnv<PosixEnv>;
-
-}  // namespace
-
-void PosixEnv::StartThread(void (*thread_main)(void* thread_main_arg),
-                           void* thread_main_arg) {
-  std::thread new_thread(thread_main, thread_main_arg);
-  new_thread.detach();
-}
-
-void EnvPosixTestHelper::SetReadOnlyFDLimit(int limit) {
-  PosixDefaultEnv::AssertEnvNotInitialized();
-  g_open_read_only_file_limit = limit;
-}
-
-void EnvPosixTestHelper::SetReadOnlyMMapLimit(int limit) {
-  PosixDefaultEnv::AssertEnvNotInitialized();
-  g_mmap_limit = limit;
-}
-
-Env* Env::Default() {
-  static PosixDefaultEnv env_container;
-  return env_container.env();
-}
-
-}  // namespace leveldb
diff --git a/assign5/openTok/Pods/leveldb-library/util/env_posix_test_helper.h b/assign5/openTok/Pods/leveldb-library/util/env_posix_test_helper.h
deleted file mode 100644
index 0386960..0000000
--- a/assign5/openTok/Pods/leveldb-library/util/env_posix_test_helper.h
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2017 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#ifndef STORAGE_LEVELDB_UTIL_ENV_POSIX_TEST_HELPER_H_
-#define STORAGE_LEVELDB_UTIL_ENV_POSIX_TEST_HELPER_H_
-
-namespace leveldb {
-
-class EnvPosixTest;
-
-// A helper for the POSIX Env to facilitate testing.
-class EnvPosixTestHelper {
- private:
-  friend class EnvPosixTest;
-
-  // Set the maximum number of read-only files that will be opened.
-  // Must be called before creating an Env.
-  static void SetReadOnlyFDLimit(int limit);
-
-  // Set the maximum number of read-only files that will be mapped via mmap.
-  // Must be called before creating an Env.
-  static void SetReadOnlyMMapLimit(int limit);
-};
-
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_UTIL_ENV_POSIX_TEST_HELPER_H_
diff --git a/assign5/openTok/Pods/leveldb-library/util/env_windows_test_helper.h b/assign5/openTok/Pods/leveldb-library/util/env_windows_test_helper.h
deleted file mode 100644
index e6f6020..0000000
--- a/assign5/openTok/Pods/leveldb-library/util/env_windows_test_helper.h
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright 2018 (c) The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#ifndef STORAGE_LEVELDB_UTIL_ENV_WINDOWS_TEST_HELPER_H_
-#define STORAGE_LEVELDB_UTIL_ENV_WINDOWS_TEST_HELPER_H_
-
-namespace leveldb {
-
-class EnvWindowsTest;
-
-// A helper for the Windows Env to facilitate testing.
-class EnvWindowsTestHelper {
- private:
-  friend class CorruptionTest;
-  friend class EnvWindowsTest;
-
-  // Set the maximum number of read-only files that will be mapped via mmap.
-  // Must be called before creating an Env.
-  static void SetReadOnlyMMapLimit(int limit);
-};
-
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_UTIL_ENV_WINDOWS_TEST_HELPER_H_
diff --git a/assign5/openTok/Pods/leveldb-library/util/filter_policy.cc b/assign5/openTok/Pods/leveldb-library/util/filter_policy.cc
deleted file mode 100644
index 90fd754..0000000
--- a/assign5/openTok/Pods/leveldb-library/util/filter_policy.cc
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright (c) 2012 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#include "leveldb/filter_policy.h"
-
-namespace leveldb {
-
-FilterPolicy::~FilterPolicy() {}
-
-}  // namespace leveldb
diff --git a/assign5/openTok/Pods/leveldb-library/util/hash.cc b/assign5/openTok/Pods/leveldb-library/util/hash.cc
deleted file mode 100644
index 67dc134..0000000
--- a/assign5/openTok/Pods/leveldb-library/util/hash.cc
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#include "util/hash.h"
-
-#include <string.h>
-
-#include "util/coding.h"
-
-// The FALLTHROUGH_INTENDED macro can be used to annotate implicit fall-through
-// between switch labels. The real definition should be provided externally.
-// This one is a fallback version for unsupported compilers.
-#ifndef FALLTHROUGH_INTENDED
-#define FALLTHROUGH_INTENDED \
-  do {                       \
-  } while (0)
-#endif
-
-namespace leveldb {
-
-uint32_t Hash(const char* data, size_t n, uint32_t seed) {
-  // Similar to murmur hash
-  const uint32_t m = 0xc6a4a793;
-  const uint32_t r = 24;
-  const char* limit = data + n;
-  uint32_t h = seed ^ (n * m);
-
-  // Pick up four bytes at a time
-  while (data + 4 <= limit) {
-    uint32_t w = DecodeFixed32(data);
-    data += 4;
-    h += w;
-    h *= m;
-    h ^= (h >> 16);
-  }
-
-  // Pick up remaining bytes
-  switch (limit - data) {
-    case 3:
-      h += static_cast<unsigned char>(data[2]) << 16;
-      FALLTHROUGH_INTENDED;
-    case 2:
-      h += static_cast<unsigned char>(data[1]) << 8;
-      FALLTHROUGH_INTENDED;
-    case 1:
-      h += static_cast<unsigned char>(data[0]);
-      h *= m;
-      h ^= (h >> r);
-      break;
-  }
-  return h;
-}
-
-}  // namespace leveldb
diff --git a/assign5/openTok/Pods/leveldb-library/util/hash.h b/assign5/openTok/Pods/leveldb-library/util/hash.h
deleted file mode 100644
index 74bdb6e..0000000
--- a/assign5/openTok/Pods/leveldb-library/util/hash.h
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-//
-// Simple hash function used for internal data structures
-
-#ifndef STORAGE_LEVELDB_UTIL_HASH_H_
-#define STORAGE_LEVELDB_UTIL_HASH_H_
-
-#include <stddef.h>
-#include <stdint.h>
-
-namespace leveldb {
-
-uint32_t Hash(const char* data, size_t n, uint32_t seed);
-
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_UTIL_HASH_H_
diff --git a/assign5/openTok/Pods/leveldb-library/util/histogram.cc b/assign5/openTok/Pods/leveldb-library/util/histogram.cc
deleted file mode 100644
index 65092c8..0000000
--- a/assign5/openTok/Pods/leveldb-library/util/histogram.cc
+++ /dev/null
@@ -1,272 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#include "util/histogram.h"
-
-#include <math.h>
-#include <stdio.h>
-
-#include "port/port.h"
-
-namespace leveldb {
-
-const double Histogram::kBucketLimit[kNumBuckets] = {
-    1,
-    2,
-    3,
-    4,
-    5,
-    6,
-    7,
-    8,
-    9,
-    10,
-    12,
-    14,
-    16,
-    18,
-    20,
-    25,
-    30,
-    35,
-    40,
-    45,
-    50,
-    60,
-    70,
-    80,
-    90,
-    100,
-    120,
-    140,
-    160,
-    180,
-    200,
-    250,
-    300,
-    350,
-    400,
-    450,
-    500,
-    600,
-    700,
-    800,
-    900,
-    1000,
-    1200,
-    1400,
-    1600,
-    1800,
-    2000,
-    2500,
-    3000,
-    3500,
-    4000,
-    4500,
-    5000,
-    6000,
-    7000,
-    8000,
-    9000,
-    10000,
-    12000,
-    14000,
-    16000,
-    18000,
-    20000,
-    25000,
-    30000,
-    35000,
-    40000,
-    45000,
-    50000,
-    60000,
-    70000,
-    80000,
-    90000,
-    100000,
-    120000,
-    140000,
-    160000,
-    180000,
-    200000,
-    250000,
-    300000,
-    350000,
-    400000,
-    450000,
-    500000,
-    600000,
-    700000,
-    800000,
-    900000,
-    1000000,
-    1200000,
-    1400000,
-    1600000,
-    1800000,
-    2000000,
-    2500000,
-    3000000,
-    3500000,
-    4000000,
-    4500000,
-    5000000,
-    6000000,
-    7000000,
-    8000000,
-    9000000,
-    10000000,
-    12000000,
-    14000000,
-    16000000,
-    18000000,
-    20000000,
-    25000000,
-    30000000,
-    35000000,
-    40000000,
-    45000000,
-    50000000,
-    60000000,
-    70000000,
-    80000000,
-    90000000,
-    100000000,
-    120000000,
-    140000000,
-    160000000,
-    180000000,
-    200000000,
-    250000000,
-    300000000,
-    350000000,
-    400000000,
-    450000000,
-    500000000,
-    600000000,
-    700000000,
-    800000000,
-    900000000,
-    1000000000,
-    1200000000,
-    1400000000,
-    1600000000,
-    1800000000,
-    2000000000,
-    2500000000.0,
-    3000000000.0,
-    3500000000.0,
-    4000000000.0,
-    4500000000.0,
-    5000000000.0,
-    6000000000.0,
-    7000000000.0,
-    8000000000.0,
-    9000000000.0,
-    1e200,
-};
-
-void Histogram::Clear() {
-  min_ = kBucketLimit[kNumBuckets - 1];
-  max_ = 0;
-  num_ = 0;
-  sum_ = 0;
-  sum_squares_ = 0;
-  for (int i = 0; i < kNumBuckets; i++) {
-    buckets_[i] = 0;
-  }
-}
-
-void Histogram::Add(double value) {
-  // Linear search is fast enough for our usage in db_bench
-  int b = 0;
-  while (b < kNumBuckets - 1 && kBucketLimit[b] <= value) {
-    b++;
-  }
-  buckets_[b] += 1.0;
-  if (min_ > value) min_ = value;
-  if (max_ < value) max_ = value;
-  num_++;
-  sum_ += value;
-  sum_squares_ += (value * value);
-}
-
-void Histogram::Merge(const Histogram& other) {
-  if (other.min_ < min_) min_ = other.min_;
-  if (other.max_ > max_) max_ = other.max_;
-  num_ += other.num_;
-  sum_ += other.sum_;
-  sum_squares_ += other.sum_squares_;
-  for (int b = 0; b < kNumBuckets; b++) {
-    buckets_[b] += other.buckets_[b];
-  }
-}
-
-double Histogram::Median() const { return Percentile(50.0); }
-
-double Histogram::Percentile(double p) const {
-  double threshold = num_ * (p / 100.0);
-  double sum = 0;
-  for (int b = 0; b < kNumBuckets; b++) {
-    sum += buckets_[b];
-    if (sum >= threshold) {
-      // Scale linearly within this bucket
-      double left_point = (b == 0) ? 0 : kBucketLimit[b - 1];
-      double right_point = kBucketLimit[b];
-      double left_sum = sum - buckets_[b];
-      double right_sum = sum;
-      double pos = (threshold - left_sum) / (right_sum - left_sum);
-      double r = left_point + (right_point - left_point) * pos;
-      if (r < min_) r = min_;
-      if (r > max_) r = max_;
-      return r;
-    }
-  }
-  return max_;
-}
-
-double Histogram::Average() const {
-  if (num_ == 0.0) return 0;
-  return sum_ / num_;
-}
-
-double Histogram::StandardDeviation() const {
-  if (num_ == 0.0) return 0;
-  double variance = (sum_squares_ * num_ - sum_ * sum_) / (num_ * num_);
-  return sqrt(variance);
-}
-
-std::string Histogram::ToString() const {
-  std::string r;
-  char buf[200];
-  snprintf(buf, sizeof(buf), "Count: %.0f  Average: %.4f  StdDev: %.2f\n", num_,
-           Average(), StandardDeviation());
-  r.append(buf);
-  snprintf(buf, sizeof(buf), "Min: %.4f  Median: %.4f  Max: %.4f\n",
-           (num_ == 0.0 ? 0.0 : min_), Median(), max_);
-  r.append(buf);
-  r.append("------------------------------------------------------\n");
-  const double mult = 100.0 / num_;
-  double sum = 0;
-  for (int b = 0; b < kNumBuckets; b++) {
-    if (buckets_[b] <= 0.0) continue;
-    sum += buckets_[b];
-    snprintf(buf, sizeof(buf), "[ %7.0f, %7.0f ) %7.0f %7.3f%% %7.3f%% ",
-             ((b == 0) ? 0.0 : kBucketLimit[b - 1]),  // left
-             kBucketLimit[b],                         // right
-             buckets_[b],                             // count
-             mult * buckets_[b],                      // percentage
-             mult * sum);                             // cumulative percentage
-    r.append(buf);
-
-    // Add hash marks based on percentage; 20 marks for 100%.
-    int marks = static_cast<int>(20 * (buckets_[b] / num_) + 0.5);
-    r.append(marks, '#');
-    r.push_back('\n');
-  }
-  return r;
-}
-
-}  // namespace leveldb
diff --git a/assign5/openTok/Pods/leveldb-library/util/histogram.h b/assign5/openTok/Pods/leveldb-library/util/histogram.h
deleted file mode 100644
index 4da60fb..0000000
--- a/assign5/openTok/Pods/leveldb-library/util/histogram.h
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#ifndef STORAGE_LEVELDB_UTIL_HISTOGRAM_H_
-#define STORAGE_LEVELDB_UTIL_HISTOGRAM_H_
-
-#include <string>
-
-namespace leveldb {
-
-class Histogram {
- public:
-  Histogram() {}
-  ~Histogram() {}
-
-  void Clear();
-  void Add(double value);
-  void Merge(const Histogram& other);
-
-  std::string ToString() const;
-
- private:
-  enum { kNumBuckets = 154 };
-
-  double Median() const;
-  double Percentile(double p) const;
-  double Average() const;
-  double StandardDeviation() const;
-
-  static const double kBucketLimit[kNumBuckets];
-
-  double min_;
-  double max_;
-  double num_;
-  double sum_;
-  double sum_squares_;
-
-  double buckets_[kNumBuckets];
-};
-
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_UTIL_HISTOGRAM_H_
diff --git a/assign5/openTok/Pods/leveldb-library/util/logging.cc b/assign5/openTok/Pods/leveldb-library/util/logging.cc
deleted file mode 100644
index 1ad8f1c..0000000
--- a/assign5/openTok/Pods/leveldb-library/util/logging.cc
+++ /dev/null
@@ -1,85 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#include "util/logging.h"
-
-#include <errno.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <limits>
-
-#include "leveldb/env.h"
-#include "leveldb/slice.h"
-
-namespace leveldb {
-
-void AppendNumberTo(std::string* str, uint64_t num) {
-  char buf[30];
-  snprintf(buf, sizeof(buf), "%llu", (unsigned long long)num);
-  str->append(buf);
-}
-
-void AppendEscapedStringTo(std::string* str, const Slice& value) {
-  for (size_t i = 0; i < value.size(); i++) {
-    char c = value[i];
-    if (c >= ' ' && c <= '~') {
-      str->push_back(c);
-    } else {
-      char buf[10];
-      snprintf(buf, sizeof(buf), "\\x%02x",
-               static_cast<unsigned int>(c) & 0xff);
-      str->append(buf);
-    }
-  }
-}
-
-std::string NumberToString(uint64_t num) {
-  std::string r;
-  AppendNumberTo(&r, num);
-  return r;
-}
-
-std::string EscapeString(const Slice& value) {
-  std::string r;
-  AppendEscapedStringTo(&r, value);
-  return r;
-}
-
-bool ConsumeDecimalNumber(Slice* in, uint64_t* val) {
-  // Constants that will be optimized away.
-  constexpr const uint64_t kMaxUint64 = std::numeric_limits<uint64_t>::max();
-  constexpr const char kLastDigitOfMaxUint64 =
-      '0' + static_cast<char>(kMaxUint64 % 10);
-
-  uint64_t value = 0;
-
-  // reinterpret_cast-ing from char* to unsigned char* to avoid signedness.
-  const unsigned char* start =
-      reinterpret_cast<const unsigned char*>(in->data());
-
-  const unsigned char* end = start + in->size();
-  const unsigned char* current = start;
-  for (; current != end; ++current) {
-    const unsigned char ch = *current;
-    if (ch < '0' || ch > '9') break;
-
-    // Overflow check.
-    // kMaxUint64 / 10 is also constant and will be optimized away.
-    if (value > kMaxUint64 / 10 ||
-        (value == kMaxUint64 / 10 && ch > kLastDigitOfMaxUint64)) {
-      return false;
-    }
-
-    value = (value * 10) + (ch - '0');
-  }
-
-  *val = value;
-  const size_t digits_consumed = current - start;
-  in->remove_prefix(digits_consumed);
-  return digits_consumed != 0;
-}
-
-}  // namespace leveldb
diff --git a/assign5/openTok/Pods/leveldb-library/util/logging.h b/assign5/openTok/Pods/leveldb-library/util/logging.h
deleted file mode 100644
index 8ff2da8..0000000
--- a/assign5/openTok/Pods/leveldb-library/util/logging.h
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-//
-// Must not be included from any .h files to avoid polluting the namespace
-// with macros.
-
-#ifndef STORAGE_LEVELDB_UTIL_LOGGING_H_
-#define STORAGE_LEVELDB_UTIL_LOGGING_H_
-
-#include <stdint.h>
-#include <stdio.h>
-
-#include <string>
-
-#include "port/port.h"
-
-namespace leveldb {
-
-class Slice;
-class WritableFile;
-
-// Append a human-readable printout of "num" to *str
-void AppendNumberTo(std::string* str, uint64_t num);
-
-// Append a human-readable printout of "value" to *str.
-// Escapes any non-printable characters found in "value".
-void AppendEscapedStringTo(std::string* str, const Slice& value);
-
-// Return a human-readable printout of "num"
-std::string NumberToString(uint64_t num);
-
-// Return a human-readable version of "value".
-// Escapes any non-printable characters found in "value".
-std::string EscapeString(const Slice& value);
-
-// Parse a human-readable number from "*in" into *value.  On success,
-// advances "*in" past the consumed number and sets "*val" to the
-// numeric value.  Otherwise, returns false and leaves *in in an
-// unspecified state.
-bool ConsumeDecimalNumber(Slice* in, uint64_t* val);
-
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_UTIL_LOGGING_H_
diff --git a/assign5/openTok/Pods/leveldb-library/util/mutexlock.h b/assign5/openTok/Pods/leveldb-library/util/mutexlock.h
deleted file mode 100644
index 0cb2e25..0000000
--- a/assign5/openTok/Pods/leveldb-library/util/mutexlock.h
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#ifndef STORAGE_LEVELDB_UTIL_MUTEXLOCK_H_
-#define STORAGE_LEVELDB_UTIL_MUTEXLOCK_H_
-
-#include "port/port.h"
-#include "port/thread_annotations.h"
-
-namespace leveldb {
-
-// Helper class that locks a mutex on construction and unlocks the mutex when
-// the destructor of the MutexLock object is invoked.
-//
-// Typical usage:
-//
-//   void MyClass::MyMethod() {
-//     MutexLock l(&mu_);       // mu_ is an instance variable
-//     ... some complex code, possibly with multiple return paths ...
-//   }
-
-class SCOPED_LOCKABLE MutexLock {
- public:
-  explicit MutexLock(port::Mutex* mu) EXCLUSIVE_LOCK_FUNCTION(mu) : mu_(mu) {
-    this->mu_->Lock();
-  }
-  ~MutexLock() UNLOCK_FUNCTION() { this->mu_->Unlock(); }
-
-  MutexLock(const MutexLock&) = delete;
-  MutexLock& operator=(const MutexLock&) = delete;
-
- private:
-  port::Mutex* const mu_;
-};
-
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_UTIL_MUTEXLOCK_H_
diff --git a/assign5/openTok/Pods/leveldb-library/util/no_destructor.h b/assign5/openTok/Pods/leveldb-library/util/no_destructor.h
deleted file mode 100644
index a0d3b87..0000000
--- a/assign5/openTok/Pods/leveldb-library/util/no_destructor.h
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright (c) 2018 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#ifndef STORAGE_LEVELDB_UTIL_NO_DESTRUCTOR_H_
-#define STORAGE_LEVELDB_UTIL_NO_DESTRUCTOR_H_
-
-#include <type_traits>
-#include <utility>
-
-namespace leveldb {
-
-// Wraps an instance whose destructor is never called.
-//
-// This is intended for use with function-level static variables.
-template <typename InstanceType>
-class NoDestructor {
- public:
-  template <typename... ConstructorArgTypes>
-  explicit NoDestructor(ConstructorArgTypes&&... constructor_args) {
-    static_assert(sizeof(instance_storage_) >= sizeof(InstanceType),
-                  "instance_storage_ is not large enough to hold the instance");
-    static_assert(
-        alignof(decltype(instance_storage_)) >= alignof(InstanceType),
-        "instance_storage_ does not meet the instance's alignment requirement");
-    new (&instance_storage_)
-        InstanceType(std::forward<ConstructorArgTypes>(constructor_args)...);
-  }
-
-  ~NoDestructor() = default;
-
-  NoDestructor(const NoDestructor&) = delete;
-  NoDestructor& operator=(const NoDestructor&) = delete;
-
-  InstanceType* get() {
-    return reinterpret_cast<InstanceType*>(&instance_storage_);
-  }
-
- private:
-  typename std::aligned_storage<sizeof(InstanceType),
-                                alignof(InstanceType)>::type instance_storage_;
-};
-
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_UTIL_NO_DESTRUCTOR_H_
diff --git a/assign5/openTok/Pods/leveldb-library/util/options.cc b/assign5/openTok/Pods/leveldb-library/util/options.cc
deleted file mode 100644
index 62de5bf..0000000
--- a/assign5/openTok/Pods/leveldb-library/util/options.cc
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#include "leveldb/options.h"
-
-#include "leveldb/comparator.h"
-#include "leveldb/env.h"
-
-namespace leveldb {
-
-Options::Options() : comparator(BytewiseComparator()), env(Env::Default()) {}
-
-}  // namespace leveldb
diff --git a/assign5/openTok/Pods/leveldb-library/util/posix_logger.h b/assign5/openTok/Pods/leveldb-library/util/posix_logger.h
deleted file mode 100644
index 28e15d1..0000000
--- a/assign5/openTok/Pods/leveldb-library/util/posix_logger.h
+++ /dev/null
@@ -1,130 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-//
-// Logger implementation that can be shared by all environments
-// where enough posix functionality is available.
-
-#ifndef STORAGE_LEVELDB_UTIL_POSIX_LOGGER_H_
-#define STORAGE_LEVELDB_UTIL_POSIX_LOGGER_H_
-
-#include <sys/time.h>
-
-#include <cassert>
-#include <cstdarg>
-#include <cstdio>
-#include <ctime>
-#include <sstream>
-#include <thread>
-
-#include "leveldb/env.h"
-
-namespace leveldb {
-
-class PosixLogger final : public Logger {
- public:
-  // Creates a logger that writes to the given file.
-  //
-  // The PosixLogger instance takes ownership of the file handle.
-  explicit PosixLogger(std::FILE* fp) : fp_(fp) { assert(fp != nullptr); }
-
-  ~PosixLogger() override { std::fclose(fp_); }
-
-  void Logv(const char* format, va_list arguments) override {
-    // Record the time as close to the Logv() call as possible.
-    struct ::timeval now_timeval;
-    ::gettimeofday(&now_timeval, nullptr);
-    const std::time_t now_seconds = now_timeval.tv_sec;
-    struct std::tm now_components;
-    ::localtime_r(&now_seconds, &now_components);
-
-    // Record the thread ID.
-    constexpr const int kMaxThreadIdSize = 32;
-    std::ostringstream thread_stream;
-    thread_stream << std::this_thread::get_id();
-    std::string thread_id = thread_stream.str();
-    if (thread_id.size() > kMaxThreadIdSize) {
-      thread_id.resize(kMaxThreadIdSize);
-    }
-
-    // We first attempt to print into a stack-allocated buffer. If this attempt
-    // fails, we make a second attempt with a dynamically allocated buffer.
-    constexpr const int kStackBufferSize = 512;
-    char stack_buffer[kStackBufferSize];
-    static_assert(sizeof(stack_buffer) == static_cast<size_t>(kStackBufferSize),
-                  "sizeof(char) is expected to be 1 in C++");
-
-    int dynamic_buffer_size = 0;  // Computed in the first iteration.
-    for (int iteration = 0; iteration < 2; ++iteration) {
-      const int buffer_size =
-          (iteration == 0) ? kStackBufferSize : dynamic_buffer_size;
-      char* const buffer =
-          (iteration == 0) ? stack_buffer : new char[dynamic_buffer_size];
-
-      // Print the header into the buffer.
-      int buffer_offset = snprintf(
-          buffer, buffer_size, "%04d/%02d/%02d-%02d:%02d:%02d.%06d %s ",
-          now_components.tm_year + 1900, now_components.tm_mon + 1,
-          now_components.tm_mday, now_components.tm_hour, now_components.tm_min,
-          now_components.tm_sec, static_cast<int>(now_timeval.tv_usec),
-          thread_id.c_str());
-
-      // The header can be at most 28 characters (10 date + 15 time +
-      // 3 delimiters) plus the thread ID, which should fit comfortably into the
-      // static buffer.
-      assert(buffer_offset <= 28 + kMaxThreadIdSize);
-      static_assert(28 + kMaxThreadIdSize < kStackBufferSize,
-                    "stack-allocated buffer may not fit the message header");
-      assert(buffer_offset < buffer_size);
-
-      // Print the message into the buffer.
-      std::va_list arguments_copy;
-      va_copy(arguments_copy, arguments);
-      buffer_offset +=
-          std::vsnprintf(buffer + buffer_offset, buffer_size - buffer_offset,
-                         format, arguments_copy);
-      va_end(arguments_copy);
-
-      // The code below may append a newline at the end of the buffer, which
-      // requires an extra character.
-      if (buffer_offset >= buffer_size - 1) {
-        // The message did not fit into the buffer.
-        if (iteration == 0) {
-          // Re-run the loop and use a dynamically-allocated buffer. The buffer
-          // will be large enough for the log message, an extra newline and a
-          // null terminator.
-          dynamic_buffer_size = buffer_offset + 2;
-          continue;
-        }
-
-        // The dynamically-allocated buffer was incorrectly sized. This should
-        // not happen, assuming a correct implementation of (v)snprintf. Fail
-        // in tests, recover by truncating the log message in production.
-        assert(false);
-        buffer_offset = buffer_size - 1;
-      }
-
-      // Add a newline if necessary.
-      if (buffer[buffer_offset - 1] != '\n') {
-        buffer[buffer_offset] = '\n';
-        ++buffer_offset;
-      }
-
-      assert(buffer_offset <= buffer_size);
-      std::fwrite(buffer, 1, buffer_offset, fp_);
-      std::fflush(fp_);
-
-      if (iteration != 0) {
-        delete[] buffer;
-      }
-      break;
-    }
-  }
-
- private:
-  std::FILE* const fp_;
-};
-
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_UTIL_POSIX_LOGGER_H_
diff --git a/assign5/openTok/Pods/leveldb-library/util/random.h b/assign5/openTok/Pods/leveldb-library/util/random.h
deleted file mode 100644
index 76f7daf..0000000
--- a/assign5/openTok/Pods/leveldb-library/util/random.h
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#ifndef STORAGE_LEVELDB_UTIL_RANDOM_H_
-#define STORAGE_LEVELDB_UTIL_RANDOM_H_
-
-#include <stdint.h>
-
-namespace leveldb {
-
-// A very simple random number generator.  Not especially good at
-// generating truly random bits, but good enough for our needs in this
-// package.
-class Random {
- private:
-  uint32_t seed_;
-
- public:
-  explicit Random(uint32_t s) : seed_(s & 0x7fffffffu) {
-    // Avoid bad seeds.
-    if (seed_ == 0 || seed_ == 2147483647L) {
-      seed_ = 1;
-    }
-  }
-  uint32_t Next() {
-    static const uint32_t M = 2147483647L;  // 2^31-1
-    static const uint64_t A = 16807;        // bits 14, 8, 7, 5, 2, 1, 0
-    // We are computing
-    //       seed_ = (seed_ * A) % M,    where M = 2^31-1
-    //
-    // seed_ must not be zero or M, or else all subsequent computed values
-    // will be zero or M respectively.  For all other values, seed_ will end
-    // up cycling through every number in [1,M-1]
-    uint64_t product = seed_ * A;
-
-    // Compute (product % M) using the fact that ((x << 31) % M) == x.
-    seed_ = static_cast<uint32_t>((product >> 31) + (product & M));
-    // The first reduction may overflow by 1 bit, so we may need to
-    // repeat.  mod == M is not possible; using > allows the faster
-    // sign-bit-based test.
-    if (seed_ > M) {
-      seed_ -= M;
-    }
-    return seed_;
-  }
-  // Returns a uniformly distributed value in the range [0..n-1]
-  // REQUIRES: n > 0
-  uint32_t Uniform(int n) { return Next() % n; }
-
-  // Randomly returns true ~"1/n" of the time, and false otherwise.
-  // REQUIRES: n > 0
-  bool OneIn(int n) { return (Next() % n) == 0; }
-
-  // Skewed: pick "base" uniformly from range [0,max_log] and then
-  // return "base" random bits.  The effect is to pick a number in the
-  // range [0,2^max_log-1] with exponential bias towards smaller numbers.
-  uint32_t Skewed(int max_log) { return Uniform(1 << Uniform(max_log + 1)); }
-};
-
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_UTIL_RANDOM_H_
diff --git a/assign5/openTok/Pods/leveldb-library/util/status.cc b/assign5/openTok/Pods/leveldb-library/util/status.cc
deleted file mode 100644
index 6ca8da6..0000000
--- a/assign5/openTok/Pods/leveldb-library/util/status.cc
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#include "leveldb/status.h"
-
-#include <stdio.h>
-
-#include "port/port.h"
-
-namespace leveldb {
-
-const char* Status::CopyState(const char* state) {
-  uint32_t size;
-  memcpy(&size, state, sizeof(size));
-  char* result = new char[size + 5];
-  memcpy(result, state, size + 5);
-  return result;
-}
-
-Status::Status(Code code, const Slice& msg, const Slice& msg2) {
-  assert(code != kOk);
-  const uint32_t len1 = msg.size();
-  const uint32_t len2 = msg2.size();
-  const uint32_t size = len1 + (len2 ? (2 + len2) : 0);
-  char* result = new char[size + 5];
-  memcpy(result, &size, sizeof(size));
-  result[4] = static_cast<char>(code);
-  memcpy(result + 5, msg.data(), len1);
-  if (len2) {
-    result[5 + len1] = ':';
-    result[6 + len1] = ' ';
-    memcpy(result + 7 + len1, msg2.data(), len2);
-  }
-  state_ = result;
-}
-
-std::string Status::ToString() const {
-  if (state_ == nullptr) {
-    return "OK";
-  } else {
-    char tmp[30];
-    const char* type;
-    switch (code()) {
-      case kOk:
-        type = "OK";
-        break;
-      case kNotFound:
-        type = "NotFound: ";
-        break;
-      case kCorruption:
-        type = "Corruption: ";
-        break;
-      case kNotSupported:
-        type = "Not implemented: ";
-        break;
-      case kInvalidArgument:
-        type = "Invalid argument: ";
-        break;
-      case kIOError:
-        type = "IO error: ";
-        break;
-      default:
-        snprintf(tmp, sizeof(tmp),
-                 "Unknown code(%d): ", static_cast<int>(code()));
-        type = tmp;
-        break;
-    }
-    std::string result(type);
-    uint32_t length;
-    memcpy(&length, state_, sizeof(length));
-    result.append(state_ + 5, length);
-    return result;
-  }
-}
-
-}  // namespace leveldb
diff --git a/assign5/openTok/Pods/leveldb-library/util/testharness.cc b/assign5/openTok/Pods/leveldb-library/util/testharness.cc
deleted file mode 100644
index 318ecfa..0000000
--- a/assign5/openTok/Pods/leveldb-library/util/testharness.cc
+++ /dev/null
@@ -1,81 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#include "util/testharness.h"
-
-#include <stdlib.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-
-#include <string>
-#include <vector>
-
-#include "leveldb/env.h"
-
-namespace leveldb {
-namespace test {
-
-namespace {
-struct Test {
-  const char* base;
-  const char* name;
-  void (*func)();
-};
-std::vector<Test>* tests;
-}  // namespace
-
-bool RegisterTest(const char* base, const char* name, void (*func)()) {
-  if (tests == nullptr) {
-    tests = new std::vector<Test>;
-  }
-  Test t;
-  t.base = base;
-  t.name = name;
-  t.func = func;
-  tests->push_back(t);
-  return true;
-}
-
-int RunAllTests() {
-  const char* matcher = getenv("LEVELDB_TESTS");
-
-  int num = 0;
-  if (tests != nullptr) {
-    for (size_t i = 0; i < tests->size(); i++) {
-      const Test& t = (*tests)[i];
-      if (matcher != nullptr) {
-        std::string name = t.base;
-        name.push_back('.');
-        name.append(t.name);
-        if (strstr(name.c_str(), matcher) == nullptr) {
-          continue;
-        }
-      }
-      fprintf(stderr, "==== Test %s.%s\n", t.base, t.name);
-      (*t.func)();
-      ++num;
-    }
-  }
-  fprintf(stderr, "==== PASSED %d tests\n", num);
-  return 0;
-}
-
-std::string TmpDir() {
-  std::string dir;
-  Status s = Env::Default()->GetTestDirectory(&dir);
-  ASSERT_TRUE(s.ok()) << s.ToString();
-  return dir;
-}
-
-int RandomSeed() {
-  const char* env = getenv("TEST_RANDOM_SEED");
-  int result = (env != nullptr ? atoi(env) : 301);
-  if (result <= 0) {
-    result = 301;
-  }
-  return result;
-}
-
-}  // namespace test
-}  // namespace leveldb
diff --git a/assign5/openTok/Pods/leveldb-library/util/testharness.h b/assign5/openTok/Pods/leveldb-library/util/testharness.h
deleted file mode 100644
index 72cd162..0000000
--- a/assign5/openTok/Pods/leveldb-library/util/testharness.h
+++ /dev/null
@@ -1,141 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#ifndef STORAGE_LEVELDB_UTIL_TESTHARNESS_H_
-#define STORAGE_LEVELDB_UTIL_TESTHARNESS_H_
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <sstream>
-
-#include "leveldb/status.h"
-
-namespace leveldb {
-namespace test {
-
-// Run some of the tests registered by the TEST() macro.  If the
-// environment variable "LEVELDB_TESTS" is not set, runs all tests.
-// Otherwise, runs only the tests whose name contains the value of
-// "LEVELDB_TESTS" as a substring.  E.g., suppose the tests are:
-//    TEST(Foo, Hello) { ... }
-//    TEST(Foo, World) { ... }
-// LEVELDB_TESTS=Hello will run the first test
-// LEVELDB_TESTS=o     will run both tests
-// LEVELDB_TESTS=Junk  will run no tests
-//
-// Returns 0 if all tests pass.
-// Dies or returns a non-zero value if some test fails.
-int RunAllTests();
-
-// Return the directory to use for temporary storage.
-std::string TmpDir();
-
-// Return a randomization seed for this run.  Typically returns the
-// same number on repeated invocations of this binary, but automated
-// runs may be able to vary the seed.
-int RandomSeed();
-
-// An instance of Tester is allocated to hold temporary state during
-// the execution of an assertion.
-class Tester {
- private:
-  bool ok_;
-  const char* fname_;
-  int line_;
-  std::stringstream ss_;
-
- public:
-  Tester(const char* f, int l) : ok_(true), fname_(f), line_(l) {}
-
-  ~Tester() {
-    if (!ok_) {
-      fprintf(stderr, "%s:%d:%s\n", fname_, line_, ss_.str().c_str());
-      exit(1);
-    }
-  }
-
-  Tester& Is(bool b, const char* msg) {
-    if (!b) {
-      ss_ << " Assertion failure " << msg;
-      ok_ = false;
-    }
-    return *this;
-  }
-
-  Tester& IsOk(const Status& s) {
-    if (!s.ok()) {
-      ss_ << " " << s.ToString();
-      ok_ = false;
-    }
-    return *this;
-  }
-
-#define BINARY_OP(name, op)                          \
-  template <class X, class Y>                        \
-  Tester& name(const X& x, const Y& y) {             \
-    if (!(x op y)) {                                 \
-      ss_ << " failed: " << x << (" " #op " ") << y; \
-      ok_ = false;                                   \
-    }                                                \
-    return *this;                                    \
-  }
-
-  BINARY_OP(IsEq, ==)
-  BINARY_OP(IsNe, !=)
-  BINARY_OP(IsGe, >=)
-  BINARY_OP(IsGt, >)
-  BINARY_OP(IsLe, <=)
-  BINARY_OP(IsLt, <)
-#undef BINARY_OP
-
-  // Attach the specified value to the error message if an error has occurred
-  template <class V>
-  Tester& operator<<(const V& value) {
-    if (!ok_) {
-      ss_ << " " << value;
-    }
-    return *this;
-  }
-};
-
-#define ASSERT_TRUE(c) ::leveldb::test::Tester(__FILE__, __LINE__).Is((c), #c)
-#define ASSERT_OK(s) ::leveldb::test::Tester(__FILE__, __LINE__).IsOk((s))
-#define ASSERT_EQ(a, b) \
-  ::leveldb::test::Tester(__FILE__, __LINE__).IsEq((a), (b))
-#define ASSERT_NE(a, b) \
-  ::leveldb::test::Tester(__FILE__, __LINE__).IsNe((a), (b))
-#define ASSERT_GE(a, b) \
-  ::leveldb::test::Tester(__FILE__, __LINE__).IsGe((a), (b))
-#define ASSERT_GT(a, b) \
-  ::leveldb::test::Tester(__FILE__, __LINE__).IsGt((a), (b))
-#define ASSERT_LE(a, b) \
-  ::leveldb::test::Tester(__FILE__, __LINE__).IsLe((a), (b))
-#define ASSERT_LT(a, b) \
-  ::leveldb::test::Tester(__FILE__, __LINE__).IsLt((a), (b))
-
-#define TCONCAT(a, b) TCONCAT1(a, b)
-#define TCONCAT1(a, b) a##b
-
-#define TEST(base, name)                                              \
-  class TCONCAT(_Test_, name) : public base {                         \
-   public:                                                            \
-    void _Run();                                                      \
-    static void _RunIt() {                                            \
-      TCONCAT(_Test_, name) t;                                        \
-      t._Run();                                                       \
-    }                                                                 \
-  };                                                                  \
-  bool TCONCAT(_Test_ignored_, name) = ::leveldb::test::RegisterTest( \
-      #base, #name, &TCONCAT(_Test_, name)::_RunIt);                  \
-  void TCONCAT(_Test_, name)::_Run()
-
-// Register the specified test.  Typically not used directly, but
-// invoked via the macro expansion of TEST.
-bool RegisterTest(const char* base, const char* name, void (*func)());
-
-}  // namespace test
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_UTIL_TESTHARNESS_H_
diff --git a/assign5/openTok/Pods/leveldb-library/util/testutil.h b/assign5/openTok/Pods/leveldb-library/util/testutil.h
deleted file mode 100644
index bb4051b..0000000
--- a/assign5/openTok/Pods/leveldb-library/util/testutil.h
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-
-#ifndef STORAGE_LEVELDB_UTIL_TESTUTIL_H_
-#define STORAGE_LEVELDB_UTIL_TESTUTIL_H_
-
-#include "helpers/memenv/memenv.h"
-#include "leveldb/env.h"
-#include "leveldb/slice.h"
-#include "util/random.h"
-
-namespace leveldb {
-namespace test {
-
-// Store in *dst a random string of length "len" and return a Slice that
-// references the generated data.
-Slice RandomString(Random* rnd, int len, std::string* dst);
-
-// Return a random key with the specified length that may contain interesting
-// characters (e.g. \x00, \xff, etc.).
-std::string RandomKey(Random* rnd, int len);
-
-// Store in *dst a string of length "len" that will compress to
-// "N*compressed_fraction" bytes and return a Slice that references
-// the generated data.
-Slice CompressibleString(Random* rnd, double compressed_fraction, size_t len,
-                         std::string* dst);
-
-// A wrapper that allows injection of errors.
-class ErrorEnv : public EnvWrapper {
- public:
-  bool writable_file_error_;
-  int num_writable_file_errors_;
-
-  ErrorEnv()
-      : EnvWrapper(NewMemEnv(Env::Default())),
-        writable_file_error_(false),
-        num_writable_file_errors_(0) {}
-  ~ErrorEnv() override { delete target(); }
-
-  Status NewWritableFile(const std::string& fname,
-                         WritableFile** result) override {
-    if (writable_file_error_) {
-      ++num_writable_file_errors_;
-      *result = nullptr;
-      return Status::IOError(fname, "fake error");
-    }
-    return target()->NewWritableFile(fname, result);
-  }
-
-  Status NewAppendableFile(const std::string& fname,
-                           WritableFile** result) override {
-    if (writable_file_error_) {
-      ++num_writable_file_errors_;
-      *result = nullptr;
-      return Status::IOError(fname, "fake error");
-    }
-    return target()->NewAppendableFile(fname, result);
-  }
-};
-
-}  // namespace test
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_UTIL_TESTUTIL_H_
diff --git a/assign5/openTok/Pods/leveldb-library/util/windows_logger.h b/assign5/openTok/Pods/leveldb-library/util/windows_logger.h
deleted file mode 100644
index 9296063..0000000
--- a/assign5/openTok/Pods/leveldb-library/util/windows_logger.h
+++ /dev/null
@@ -1,124 +0,0 @@
-// Copyright (c) 2018 The LevelDB Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file. See the AUTHORS file for names of contributors.
-//
-// Logger implementation for the Windows platform.
-
-#ifndef STORAGE_LEVELDB_UTIL_WINDOWS_LOGGER_H_
-#define STORAGE_LEVELDB_UTIL_WINDOWS_LOGGER_H_
-
-#include <cassert>
-#include <cstdarg>
-#include <cstdio>
-#include <ctime>
-#include <sstream>
-#include <thread>
-
-#include "leveldb/env.h"
-
-namespace leveldb {
-
-class WindowsLogger final : public Logger {
- public:
-  // Creates a logger that writes to the given file.
-  //
-  // The PosixLogger instance takes ownership of the file handle.
-  explicit WindowsLogger(std::FILE* fp) : fp_(fp) { assert(fp != nullptr); }
-
-  ~WindowsLogger() override { std::fclose(fp_); }
-
-  void Logv(const char* format, va_list arguments) override {
-    // Record the time as close to the Logv() call as possible.
-    SYSTEMTIME now_components;
-    ::GetLocalTime(&now_components);
-
-    // Record the thread ID.
-    constexpr const int kMaxThreadIdSize = 32;
-    std::ostringstream thread_stream;
-    thread_stream << std::this_thread::get_id();
-    std::string thread_id = thread_stream.str();
-    if (thread_id.size() > kMaxThreadIdSize) {
-      thread_id.resize(kMaxThreadIdSize);
-    }
-
-    // We first attempt to print into a stack-allocated buffer. If this attempt
-    // fails, we make a second attempt with a dynamically allocated buffer.
-    constexpr const int kStackBufferSize = 512;
-    char stack_buffer[kStackBufferSize];
-    static_assert(sizeof(stack_buffer) == static_cast<size_t>(kStackBufferSize),
-                  "sizeof(char) is expected to be 1 in C++");
-
-    int dynamic_buffer_size = 0;  // Computed in the first iteration.
-    for (int iteration = 0; iteration < 2; ++iteration) {
-      const int buffer_size =
-          (iteration == 0) ? kStackBufferSize : dynamic_buffer_size;
-      char* const buffer =
-          (iteration == 0) ? stack_buffer : new char[dynamic_buffer_size];
-
-      // Print the header into the buffer.
-      int buffer_offset = snprintf(
-          buffer, buffer_size, "%04d/%02d/%02d-%02d:%02d:%02d.%06d %s ",
-          now_components.wYear, now_components.wMonth, now_components.wDay,
-          now_components.wHour, now_components.wMinute, now_components.wSecond,
-          static_cast<int>(now_components.wMilliseconds * 1000),
-          thread_id.c_str());
-
-      // The header can be at most 28 characters (10 date + 15 time +
-      // 3 delimiters) plus the thread ID, which should fit comfortably into the
-      // static buffer.
-      assert(buffer_offset <= 28 + kMaxThreadIdSize);
-      static_assert(28 + kMaxThreadIdSize < kStackBufferSize,
-                    "stack-allocated buffer may not fit the message header");
-      assert(buffer_offset < buffer_size);
-
-      // Print the message into the buffer.
-      std::va_list arguments_copy;
-      va_copy(arguments_copy, arguments);
-      buffer_offset +=
-          std::vsnprintf(buffer + buffer_offset, buffer_size - buffer_offset,
-                         format, arguments_copy);
-      va_end(arguments_copy);
-
-      // The code below may append a newline at the end of the buffer, which
-      // requires an extra character.
-      if (buffer_offset >= buffer_size - 1) {
-        // The message did not fit into the buffer.
-        if (iteration == 0) {
-          // Re-run the loop and use a dynamically-allocated buffer. The buffer
-          // will be large enough for the log message, an extra newline and a
-          // null terminator.
-          dynamic_buffer_size = buffer_offset + 2;
-          continue;
-        }
-
-        // The dynamically-allocated buffer was incorrectly sized. This should
-        // not happen, assuming a correct implementation of (v)snprintf. Fail
-        // in tests, recover by truncating the log message in production.
-        assert(false);
-        buffer_offset = buffer_size - 1;
-      }
-
-      // Add a newline if necessary.
-      if (buffer[buffer_offset - 1] != '\n') {
-        buffer[buffer_offset] = '\n';
-        ++buffer_offset;
-      }
-
-      assert(buffer_offset <= buffer_size);
-      std::fwrite(buffer, 1, buffer_offset, fp_);
-      std::fflush(fp_);
-
-      if (iteration != 0) {
-        delete[] buffer;
-      }
-      break;
-    }
-  }
-
- private:
-  std::FILE* const fp_;
-};
-
-}  // namespace leveldb
-
-#endif  // STORAGE_LEVELDB_UTIL_WINDOWS_LOGGER_H_
diff --git a/assign5/openTok/Pods/nanopb/LICENSE.txt b/assign5/openTok/Pods/nanopb/LICENSE.txt
deleted file mode 100644
index d11c9af..0000000
--- a/assign5/openTok/Pods/nanopb/LICENSE.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright (c) 2011 Petteri Aimonen <jpa at nanopb.mail.kapsi.fi>
-
-This software is provided 'as-is', without any express or 
-implied warranty. In no event will the authors be held liable 
-for any damages arising from the use of this software.
-
-Permission is granted to anyone to use this software for any 
-purpose, including commercial applications, and to alter it and 
-redistribute it freely, subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you 
-   must not claim that you wrote the original software. If you use 
-   this software in a product, an acknowledgment in the product 
-   documentation would be appreciated but is not required.
-
-2. Altered source versions must be plainly marked as such, and 
-   must not be misrepresented as being the original software.
-
-3. This notice may not be removed or altered from any source 
-   distribution.
diff --git a/assign5/openTok/Pods/nanopb/README.md b/assign5/openTok/Pods/nanopb/README.md
deleted file mode 100644
index 07860f0..0000000
--- a/assign5/openTok/Pods/nanopb/README.md
+++ /dev/null
@@ -1,71 +0,0 @@
-Nanopb - Protocol Buffers for Embedded Systems
-==============================================
-
-[![Build Status](https://travis-ci.org/nanopb/nanopb.svg?branch=master)](https://travis-ci.org/nanopb/nanopb)
-
-Nanopb is a small code-size Protocol Buffers implementation in ansi C. It is
-especially suitable for use in microcontrollers, but fits any memory
-restricted system.
-
-* **Homepage:** https://jpa.kapsi.fi/nanopb/
-* **Documentation:** https://jpa.kapsi.fi/nanopb/docs/
-* **Downloads:** https://jpa.kapsi.fi/nanopb/download/
-* **Forum:** https://groups.google.com/forum/#!forum/nanopb
-
-
-
-Using the nanopb library
-------------------------
-To use the nanopb library, you need to do two things:
-
-1. Compile your .proto files for nanopb, using protoc.
-2. Include pb_encode.c, pb_decode.c and pb_common.c in your project.
-
-The easiest way to get started is to study the project in "examples/simple".
-It contains a Makefile, which should work directly under most Linux systems.
-However, for any other kind of build system, see the manual steps in
-README.txt in that folder.
-
-
-
-Using the Protocol Buffers compiler (protoc)
---------------------------------------------
-The nanopb generator is implemented as a plugin for the Google's own protoc
-compiler. This has the advantage that there is no need to reimplement the
-basic parsing of .proto files. However, it does mean that you need the
-Google's protobuf library in order to run the generator.
-
-If you have downloaded a binary package for nanopb (either Windows, Linux or
-Mac OS X version), the 'protoc' binary is included in the 'generator-bin'
-folder. In this case, you are ready to go. Simply run this command:
-
-    generator-bin/protoc --nanopb_out=. myprotocol.proto
-
-However, if you are using a git checkout or a plain source distribution, you
-need to provide your own version of protoc and the Google's protobuf library.
-On Linux, the necessary packages are protobuf-compiler and python-protobuf.
-On Windows, you can either build Google's protobuf library from source or use
-one of the binary distributions of it. In either case, if you use a separate
-protoc, you need to manually give the path to nanopb generator:
-
-    protoc --plugin=protoc-gen-nanopb=nanopb/generator/protoc-gen-nanopb ...
-
-
-
-Running the tests
------------------
-If you want to perform further development of the nanopb core, or to verify
-its functionality using your compiler and platform, you'll want to run the
-test suite. The build rules for the test suite are implemented using Scons,
-so you need to have that installed. To run the tests:
-
-    cd tests
-    scons
-
-This will show the progress of various test cases. If the output does not
-end in an error, the test cases were successful.
-
-Note: Mac OS X by default aliases 'clang' as 'gcc', while not actually
-supporting the same command line options as gcc does. To run tests on
-Mac OS X, use: "scons CC=clang CXX=clang". Same way can be used to run
-tests with different compilers on any platform.
diff --git a/assign5/openTok/Pods/nanopb/pb.h b/assign5/openTok/Pods/nanopb/pb.h
deleted file mode 100644
index 174a84b..0000000
--- a/assign5/openTok/Pods/nanopb/pb.h
+++ /dev/null
@@ -1,593 +0,0 @@
-/* Common parts of the nanopb library. Most of these are quite low-level
- * stuff. For the high-level interface, see pb_encode.h and pb_decode.h.
- */
-
-#ifndef PB_H_INCLUDED
-#define PB_H_INCLUDED
-
-/*****************************************************************
- * Nanopb compilation time options. You can change these here by *
- * uncommenting the lines, or on the compiler command line.      *
- *****************************************************************/
-
-/* Enable support for dynamically allocated fields */
-/* #define PB_ENABLE_MALLOC 1 */
-
-/* Define this if your CPU / compiler combination does not support
- * unaligned memory access to packed structures. */
-/* #define PB_NO_PACKED_STRUCTS 1 */
-
-/* Increase the number of required fields that are tracked.
- * A compiler warning will tell if you need this. */
-/* #define PB_MAX_REQUIRED_FIELDS 256 */
-
-/* Add support for tag numbers > 255 and fields larger than 255 bytes. */
-/* #define PB_FIELD_16BIT 1 */
-
-/* Add support for tag numbers > 65536 and fields larger than 65536 bytes. */
-/* #define PB_FIELD_32BIT 1 */
-
-/* Disable support for error messages in order to save some code space. */
-/* #define PB_NO_ERRMSG 1 */
-
-/* Disable support for custom streams (support only memory buffers). */
-/* #define PB_BUFFER_ONLY 1 */
-
-/* Switch back to the old-style callback function signature.
- * This was the default until nanopb-0.2.1. */
-/* #define PB_OLD_CALLBACK_STYLE */
-
-
-/******************************************************************
- * You usually don't need to change anything below this line.     *
- * Feel free to look around and use the defined macros, though.   *
- ******************************************************************/
-
-
-/* Version of the nanopb library. Just in case you want to check it in
- * your own program. */
-#define NANOPB_VERSION nanopb-0.3.9.1
-
-/* Include all the system headers needed by nanopb. You will need the
- * definitions of the following:
- * - strlen, memcpy, memset functions
- * - [u]int_least8_t, uint_fast8_t, [u]int_least16_t, [u]int32_t, [u]int64_t
- * - size_t
- * - bool
- *
- * If you don't have the standard header files, you can instead provide
- * a custom header that defines or includes all this. In that case,
- * define PB_SYSTEM_HEADER to the path of this file.
- */
-#ifdef PB_SYSTEM_HEADER
-#include PB_SYSTEM_HEADER
-#else
-#include <stdint.h>
-#include <stddef.h>
-#include <stdbool.h>
-#include <string.h>
-
-#ifdef PB_ENABLE_MALLOC
-#include <stdlib.h>
-#endif
-#endif
-
-/* Macro for defining packed structures (compiler dependent).
- * This just reduces memory requirements, but is not required.
- */
-#if defined(PB_NO_PACKED_STRUCTS)
-    /* Disable struct packing */
-#   define PB_PACKED_STRUCT_START
-#   define PB_PACKED_STRUCT_END
-#   define pb_packed
-#elif defined(__GNUC__) || defined(__clang__)
-    /* For GCC and clang */
-#   define PB_PACKED_STRUCT_START
-#   define PB_PACKED_STRUCT_END
-#   define pb_packed __attribute__((packed))
-#elif defined(__ICCARM__) || defined(__CC_ARM)
-    /* For IAR ARM and Keil MDK-ARM compilers */
-#   define PB_PACKED_STRUCT_START _Pragma("pack(push, 1)")
-#   define PB_PACKED_STRUCT_END _Pragma("pack(pop)")
-#   define pb_packed
-#elif defined(_MSC_VER) && (_MSC_VER >= 1500)
-    /* For Microsoft Visual C++ */
-#   define PB_PACKED_STRUCT_START __pragma(pack(push, 1))
-#   define PB_PACKED_STRUCT_END __pragma(pack(pop))
-#   define pb_packed
-#else
-    /* Unknown compiler */
-#   define PB_PACKED_STRUCT_START
-#   define PB_PACKED_STRUCT_END
-#   define pb_packed
-#endif
-
-/* Handly macro for suppressing unreferenced-parameter compiler warnings. */
-#ifndef PB_UNUSED
-#define PB_UNUSED(x) (void)(x)
-#endif
-
-/* Compile-time assertion, used for checking compatible compilation options.
- * If this does not work properly on your compiler, use
- * #define PB_NO_STATIC_ASSERT to disable it.
- *
- * But before doing that, check carefully the error message / place where it
- * comes from to see if the error has a real cause. Unfortunately the error
- * message is not always very clear to read, but you can see the reason better
- * in the place where the PB_STATIC_ASSERT macro was called.
- */
-#ifndef PB_NO_STATIC_ASSERT
-#ifndef PB_STATIC_ASSERT
-#define PB_STATIC_ASSERT(COND,MSG) typedef char PB_STATIC_ASSERT_MSG(MSG, __LINE__, __COUNTER__)[(COND)?1:-1];
-#define PB_STATIC_ASSERT_MSG(MSG, LINE, COUNTER) PB_STATIC_ASSERT_MSG_(MSG, LINE, COUNTER)
-#define PB_STATIC_ASSERT_MSG_(MSG, LINE, COUNTER) pb_static_assertion_##MSG##LINE##COUNTER
-#endif
-#else
-#define PB_STATIC_ASSERT(COND,MSG)
-#endif
-
-/* Number of required fields to keep track of. */
-#ifndef PB_MAX_REQUIRED_FIELDS
-#define PB_MAX_REQUIRED_FIELDS 64
-#endif
-
-#if PB_MAX_REQUIRED_FIELDS < 64
-#error You should not lower PB_MAX_REQUIRED_FIELDS from the default value (64).
-#endif
-
-/* List of possible field types. These are used in the autogenerated code.
- * Least-significant 4 bits tell the scalar type
- * Most-significant 4 bits specify repeated/required/packed etc.
- */
-
-typedef uint_least8_t pb_type_t;
-
-/**** Field data types ****/
-
-/* Numeric types */
-#define PB_LTYPE_VARINT  0x00 /* int32, int64, enum, bool */
-#define PB_LTYPE_UVARINT 0x01 /* uint32, uint64 */
-#define PB_LTYPE_SVARINT 0x02 /* sint32, sint64 */
-#define PB_LTYPE_FIXED32 0x03 /* fixed32, sfixed32, float */
-#define PB_LTYPE_FIXED64 0x04 /* fixed64, sfixed64, double */
-
-/* Marker for last packable field type. */
-#define PB_LTYPE_LAST_PACKABLE 0x04
-
-/* Byte array with pre-allocated buffer.
- * data_size is the length of the allocated PB_BYTES_ARRAY structure. */
-#define PB_LTYPE_BYTES 0x05
-
-/* String with pre-allocated buffer.
- * data_size is the maximum length. */
-#define PB_LTYPE_STRING 0x06
-
-/* Submessage
- * submsg_fields is pointer to field descriptions */
-#define PB_LTYPE_SUBMESSAGE 0x07
-
-/* Extension pseudo-field
- * The field contains a pointer to pb_extension_t */
-#define PB_LTYPE_EXTENSION 0x08
-
-/* Byte array with inline, pre-allocated byffer.
- * data_size is the length of the inline, allocated buffer.
- * This differs from PB_LTYPE_BYTES by defining the element as
- * pb_byte_t[data_size] rather than pb_bytes_array_t. */
-#define PB_LTYPE_FIXED_LENGTH_BYTES 0x09
-
-/* Number of declared LTYPES */
-#define PB_LTYPES_COUNT 0x0A
-#define PB_LTYPE_MASK 0x0F
-
-/**** Field repetition rules ****/
-
-#define PB_HTYPE_REQUIRED 0x00
-#define PB_HTYPE_OPTIONAL 0x10
-#define PB_HTYPE_REPEATED 0x20
-#define PB_HTYPE_ONEOF    0x30
-#define PB_HTYPE_MASK     0x30
-
-/**** Field allocation types ****/
- 
-#define PB_ATYPE_STATIC   0x00
-#define PB_ATYPE_POINTER  0x80
-#define PB_ATYPE_CALLBACK 0x40
-#define PB_ATYPE_MASK     0xC0
-
-#define PB_ATYPE(x) ((x) & PB_ATYPE_MASK)
-#define PB_HTYPE(x) ((x) & PB_HTYPE_MASK)
-#define PB_LTYPE(x) ((x) & PB_LTYPE_MASK)
-
-/* Data type used for storing sizes of struct fields
- * and array counts.
- */
-#if defined(PB_FIELD_32BIT)
-    typedef uint32_t pb_size_t;
-    typedef int32_t pb_ssize_t;
-#elif defined(PB_FIELD_16BIT)
-    typedef uint_least16_t pb_size_t;
-    typedef int_least16_t pb_ssize_t;
-#else
-    typedef uint_least8_t pb_size_t;
-    typedef int_least8_t pb_ssize_t;
-#endif
-#define PB_SIZE_MAX ((pb_size_t)-1)
-
-/* Data type for storing encoded data and other byte streams.
- * This typedef exists to support platforms where uint8_t does not exist.
- * You can regard it as equivalent on uint8_t on other platforms.
- */
-typedef uint_least8_t pb_byte_t;
-
-/* This structure is used in auto-generated constants
- * to specify struct fields.
- * You can change field sizes if you need structures
- * larger than 256 bytes or field tags larger than 256.
- * The compiler should complain if your .proto has such
- * structures. Fix that by defining PB_FIELD_16BIT or
- * PB_FIELD_32BIT.
- */
-PB_PACKED_STRUCT_START
-typedef struct pb_field_s pb_field_t;
-struct pb_field_s {
-    pb_size_t tag;
-    pb_type_t type;
-    pb_size_t data_offset; /* Offset of field data, relative to previous field. */
-    pb_ssize_t size_offset; /* Offset of array size or has-boolean, relative to data */
-    pb_size_t data_size; /* Data size in bytes for a single item */
-    pb_size_t array_size; /* Maximum number of entries in array */
-    
-    /* Field definitions for submessage
-     * OR default value for all other non-array, non-callback types
-     * If null, then field will zeroed. */
-    const void *ptr;
-} pb_packed;
-PB_PACKED_STRUCT_END
-
-/* Make sure that the standard integer types are of the expected sizes.
- * Otherwise fixed32/fixed64 fields can break.
- *
- * If you get errors here, it probably means that your stdint.h is not
- * correct for your platform.
- */
-#ifndef PB_WITHOUT_64BIT
-PB_STATIC_ASSERT(sizeof(int64_t) == 2 * sizeof(int32_t), INT64_T_WRONG_SIZE)
-PB_STATIC_ASSERT(sizeof(uint64_t) == 2 * sizeof(uint32_t), UINT64_T_WRONG_SIZE)
-#endif
-
-/* This structure is used for 'bytes' arrays.
- * It has the number of bytes in the beginning, and after that an array.
- * Note that actual structs used will have a different length of bytes array.
- */
-#define PB_BYTES_ARRAY_T(n) struct { pb_size_t size; pb_byte_t bytes[n]; }
-#define PB_BYTES_ARRAY_T_ALLOCSIZE(n) ((size_t)n + offsetof(pb_bytes_array_t, bytes))
-
-struct pb_bytes_array_s {
-    pb_size_t size;
-    pb_byte_t bytes[1];
-};
-typedef struct pb_bytes_array_s pb_bytes_array_t;
-
-/* This structure is used for giving the callback function.
- * It is stored in the message structure and filled in by the method that
- * calls pb_decode.
- *
- * The decoding callback will be given a limited-length stream
- * If the wire type was string, the length is the length of the string.
- * If the wire type was a varint/fixed32/fixed64, the length is the length
- * of the actual value.
- * The function may be called multiple times (especially for repeated types,
- * but also otherwise if the message happens to contain the field multiple
- * times.)
- *
- * The encoding callback will receive the actual output stream.
- * It should write all the data in one call, including the field tag and
- * wire type. It can write multiple fields.
- *
- * The callback can be null if you want to skip a field.
- */
-typedef struct pb_istream_s pb_istream_t;
-typedef struct pb_ostream_s pb_ostream_t;
-typedef struct pb_callback_s pb_callback_t;
-struct pb_callback_s {
-#ifdef PB_OLD_CALLBACK_STYLE
-    /* Deprecated since nanopb-0.2.1 */
-    union {
-        bool (*decode)(pb_istream_t *stream, const pb_field_t *field, void *arg);
-        bool (*encode)(pb_ostream_t *stream, const pb_field_t *field, const void *arg);
-    } funcs;
-#else
-    /* New function signature, which allows modifying arg contents in callback. */
-    union {
-        bool (*decode)(pb_istream_t *stream, const pb_field_t *field, void **arg);
-        bool (*encode)(pb_ostream_t *stream, const pb_field_t *field, void * const *arg);
-    } funcs;
-#endif    
-    
-    /* Free arg for use by callback */
-    void *arg;
-};
-
-/* Wire types. Library user needs these only in encoder callbacks. */
-typedef enum {
-    PB_WT_VARINT = 0,
-    PB_WT_64BIT  = 1,
-    PB_WT_STRING = 2,
-    PB_WT_32BIT  = 5
-} pb_wire_type_t;
-
-/* Structure for defining the handling of unknown/extension fields.
- * Usually the pb_extension_type_t structure is automatically generated,
- * while the pb_extension_t structure is created by the user. However,
- * if you want to catch all unknown fields, you can also create a custom
- * pb_extension_type_t with your own callback.
- */
-typedef struct pb_extension_type_s pb_extension_type_t;
-typedef struct pb_extension_s pb_extension_t;
-struct pb_extension_type_s {
-    /* Called for each unknown field in the message.
-     * If you handle the field, read off all of its data and return true.
-     * If you do not handle the field, do not read anything and return true.
-     * If you run into an error, return false.
-     * Set to NULL for default handler.
-     */
-    bool (*decode)(pb_istream_t *stream, pb_extension_t *extension,
-                   uint32_t tag, pb_wire_type_t wire_type);
-    
-    /* Called once after all regular fields have been encoded.
-     * If you have something to write, do so and return true.
-     * If you do not have anything to write, just return true.
-     * If you run into an error, return false.
-     * Set to NULL for default handler.
-     */
-    bool (*encode)(pb_ostream_t *stream, const pb_extension_t *extension);
-    
-    /* Free field for use by the callback. */
-    const void *arg;
-};
-
-struct pb_extension_s {
-    /* Type describing the extension field. Usually you'll initialize
-     * this to a pointer to the automatically generated structure. */
-    const pb_extension_type_t *type;
-    
-    /* Destination for the decoded data. This must match the datatype
-     * of the extension field. */
-    void *dest;
-    
-    /* Pointer to the next extension handler, or NULL.
-     * If this extension does not match a field, the next handler is
-     * automatically called. */
-    pb_extension_t *next;
-
-    /* The decoder sets this to true if the extension was found.
-     * Ignored for encoding. */
-    bool found;
-};
-
-/* Memory allocation functions to use. You can define pb_realloc and
- * pb_free to custom functions if you want. */
-#ifdef PB_ENABLE_MALLOC
-#   ifndef pb_realloc
-#       define pb_realloc(ptr, size) realloc(ptr, size)
-#   endif
-#   ifndef pb_free
-#       define pb_free(ptr) free(ptr)
-#   endif
-#endif
-
-/* This is used to inform about need to regenerate .pb.h/.pb.c files. */
-#define PB_PROTO_HEADER_VERSION 30
-
-/* These macros are used to declare pb_field_t's in the constant array. */
-/* Size of a structure member, in bytes. */
-#define pb_membersize(st, m) (sizeof ((st*)0)->m)
-/* Number of entries in an array. */
-#define pb_arraysize(st, m) (pb_membersize(st, m) / pb_membersize(st, m[0]))
-/* Delta from start of one member to the start of another member. */
-#define pb_delta(st, m1, m2) ((int)offsetof(st, m1) - (int)offsetof(st, m2))
-/* Marks the end of the field list */
-#define PB_LAST_FIELD {0,(pb_type_t) 0,0,0,0,0,0}
-
-/* Macros for filling in the data_offset field */
-/* data_offset for first field in a message */
-#define PB_DATAOFFSET_FIRST(st, m1, m2) (offsetof(st, m1))
-/* data_offset for subsequent fields */
-#define PB_DATAOFFSET_OTHER(st, m1, m2) (offsetof(st, m1) - offsetof(st, m2) - pb_membersize(st, m2))
-/* data offset for subsequent fields inside an union (oneof) */
-#define PB_DATAOFFSET_UNION(st, m1, m2) (PB_SIZE_MAX)
-/* Choose first/other based on m1 == m2 (deprecated, remains for backwards compatibility) */
-#define PB_DATAOFFSET_CHOOSE(st, m1, m2) (int)(offsetof(st, m1) == offsetof(st, m2) \
-                                  ? PB_DATAOFFSET_FIRST(st, m1, m2) \
-                                  : PB_DATAOFFSET_OTHER(st, m1, m2))
-
-/* Required fields are the simplest. They just have delta (padding) from
- * previous field end, and the size of the field. Pointer is used for
- * submessages and default values.
- */
-#define PB_REQUIRED_STATIC(tag, st, m, fd, ltype, ptr) \
-    {tag, PB_ATYPE_STATIC | PB_HTYPE_REQUIRED | ltype, \
-    fd, 0, pb_membersize(st, m), 0, ptr}
-
-/* Optional fields add the delta to the has_ variable. */
-#define PB_OPTIONAL_STATIC(tag, st, m, fd, ltype, ptr) \
-    {tag, PB_ATYPE_STATIC | PB_HTYPE_OPTIONAL | ltype, \
-    fd, \
-    pb_delta(st, has_ ## m, m), \
-    pb_membersize(st, m), 0, ptr}
-
-#define PB_SINGULAR_STATIC(tag, st, m, fd, ltype, ptr) \
-    {tag, PB_ATYPE_STATIC | PB_HTYPE_OPTIONAL | ltype, \
-    fd, 0, pb_membersize(st, m), 0, ptr}
-
-/* Repeated fields have a _count field and also the maximum number of entries. */
-#define PB_REPEATED_STATIC(tag, st, m, fd, ltype, ptr) \
-    {tag, PB_ATYPE_STATIC | PB_HTYPE_REPEATED | ltype, \
-    fd, \
-    pb_delta(st, m ## _count, m), \
-    pb_membersize(st, m[0]), \
-    pb_arraysize(st, m), ptr}
-
-/* Allocated fields carry the size of the actual data, not the pointer */
-#define PB_REQUIRED_POINTER(tag, st, m, fd, ltype, ptr) \
-    {tag, PB_ATYPE_POINTER | PB_HTYPE_REQUIRED | ltype, \
-    fd, 0, pb_membersize(st, m[0]), 0, ptr}
-
-/* Optional fields don't need a has_ variable, as information would be redundant */
-#define PB_OPTIONAL_POINTER(tag, st, m, fd, ltype, ptr) \
-    {tag, PB_ATYPE_POINTER | PB_HTYPE_OPTIONAL | ltype, \
-    fd, 0, pb_membersize(st, m[0]), 0, ptr}
-
-/* Same as optional fields*/
-#define PB_SINGULAR_POINTER(tag, st, m, fd, ltype, ptr) \
-    {tag, PB_ATYPE_POINTER | PB_HTYPE_OPTIONAL | ltype, \
-    fd, 0, pb_membersize(st, m[0]), 0, ptr}
-
-/* Repeated fields have a _count field and a pointer to array of pointers */
-#define PB_REPEATED_POINTER(tag, st, m, fd, ltype, ptr) \
-    {tag, PB_ATYPE_POINTER | PB_HTYPE_REPEATED | ltype, \
-    fd, pb_delta(st, m ## _count, m), \
-    pb_membersize(st, m[0]), 0, ptr}
-
-/* Callbacks are much like required fields except with special datatype. */
-#define PB_REQUIRED_CALLBACK(tag, st, m, fd, ltype, ptr) \
-    {tag, PB_ATYPE_CALLBACK | PB_HTYPE_REQUIRED | ltype, \
-    fd, 0, pb_membersize(st, m), 0, ptr}
-
-#define PB_OPTIONAL_CALLBACK(tag, st, m, fd, ltype, ptr) \
-    {tag, PB_ATYPE_CALLBACK | PB_HTYPE_OPTIONAL | ltype, \
-    fd, 0, pb_membersize(st, m), 0, ptr}
-
-#define PB_SINGULAR_CALLBACK(tag, st, m, fd, ltype, ptr) \
-    {tag, PB_ATYPE_CALLBACK | PB_HTYPE_OPTIONAL | ltype, \
-    fd, 0, pb_membersize(st, m), 0, ptr}
-    
-#define PB_REPEATED_CALLBACK(tag, st, m, fd, ltype, ptr) \
-    {tag, PB_ATYPE_CALLBACK | PB_HTYPE_REPEATED | ltype, \
-    fd, 0, pb_membersize(st, m), 0, ptr}
-
-/* Optional extensions don't have the has_ field, as that would be redundant.
- * Furthermore, the combination of OPTIONAL without has_ field is used
- * for indicating proto3 style fields. Extensions exist in proto2 mode only,
- * so they should be encoded according to proto2 rules. To avoid the conflict,
- * extensions are marked as REQUIRED instead.
- */
-#define PB_OPTEXT_STATIC(tag, st, m, fd, ltype, ptr) \
-    {tag, PB_ATYPE_STATIC | PB_HTYPE_REQUIRED | ltype, \
-    0, \
-    0, \
-    pb_membersize(st, m), 0, ptr}
-
-#define PB_OPTEXT_POINTER(tag, st, m, fd, ltype, ptr) \
-    PB_OPTIONAL_POINTER(tag, st, m, fd, ltype, ptr)
-
-#define PB_OPTEXT_CALLBACK(tag, st, m, fd, ltype, ptr) \
-    PB_OPTIONAL_CALLBACK(tag, st, m, fd, ltype, ptr)
-
-/* The mapping from protobuf types to LTYPEs is done using these macros. */
-#define PB_LTYPE_MAP_BOOL               PB_LTYPE_VARINT
-#define PB_LTYPE_MAP_BYTES              PB_LTYPE_BYTES
-#define PB_LTYPE_MAP_DOUBLE             PB_LTYPE_FIXED64
-#define PB_LTYPE_MAP_ENUM               PB_LTYPE_VARINT
-#define PB_LTYPE_MAP_UENUM              PB_LTYPE_UVARINT
-#define PB_LTYPE_MAP_FIXED32            PB_LTYPE_FIXED32
-#define PB_LTYPE_MAP_FIXED64            PB_LTYPE_FIXED64
-#define PB_LTYPE_MAP_FLOAT              PB_LTYPE_FIXED32
-#define PB_LTYPE_MAP_INT32              PB_LTYPE_VARINT
-#define PB_LTYPE_MAP_INT64              PB_LTYPE_VARINT
-#define PB_LTYPE_MAP_MESSAGE            PB_LTYPE_SUBMESSAGE
-#define PB_LTYPE_MAP_SFIXED32           PB_LTYPE_FIXED32
-#define PB_LTYPE_MAP_SFIXED64           PB_LTYPE_FIXED64
-#define PB_LTYPE_MAP_SINT32             PB_LTYPE_SVARINT
-#define PB_LTYPE_MAP_SINT64             PB_LTYPE_SVARINT
-#define PB_LTYPE_MAP_STRING             PB_LTYPE_STRING
-#define PB_LTYPE_MAP_UINT32             PB_LTYPE_UVARINT
-#define PB_LTYPE_MAP_UINT64             PB_LTYPE_UVARINT
-#define PB_LTYPE_MAP_EXTENSION          PB_LTYPE_EXTENSION
-#define PB_LTYPE_MAP_FIXED_LENGTH_BYTES PB_LTYPE_FIXED_LENGTH_BYTES
-
-/* This is the actual macro used in field descriptions.
- * It takes these arguments:
- * - Field tag number
- * - Field type:   BOOL, BYTES, DOUBLE, ENUM, UENUM, FIXED32, FIXED64,
- *                 FLOAT, INT32, INT64, MESSAGE, SFIXED32, SFIXED64
- *                 SINT32, SINT64, STRING, UINT32, UINT64 or EXTENSION
- * - Field rules:  REQUIRED, OPTIONAL or REPEATED
- * - Allocation:   STATIC, CALLBACK or POINTER
- * - Placement: FIRST or OTHER, depending on if this is the first field in structure.
- * - Message name
- * - Field name
- * - Previous field name (or field name again for first field)
- * - Pointer to default value or submsg fields.
- */
-
-#define PB_FIELD(tag, type, rules, allocation, placement, message, field, prevfield, ptr) \
-        PB_ ## rules ## _ ## allocation(tag, message, field, \
-        PB_DATAOFFSET_ ## placement(message, field, prevfield), \
-        PB_LTYPE_MAP_ ## type, ptr)
-
-/* Field description for repeated static fixed count fields.*/
-#define PB_REPEATED_FIXED_COUNT(tag, type, placement, message, field, prevfield, ptr) \
-    {tag, PB_ATYPE_STATIC | PB_HTYPE_REPEATED | PB_LTYPE_MAP_ ## type, \
-    PB_DATAOFFSET_ ## placement(message, field, prevfield), \
-    0, \
-    pb_membersize(message, field[0]), \
-    pb_arraysize(message, field), ptr}
-
-/* Field description for oneof fields. This requires taking into account the
- * union name also, that's why a separate set of macros is needed.
- */
-#define PB_ONEOF_STATIC(u, tag, st, m, fd, ltype, ptr) \
-    {tag, PB_ATYPE_STATIC | PB_HTYPE_ONEOF | ltype, \
-    fd, pb_delta(st, which_ ## u, u.m), \
-    pb_membersize(st, u.m), 0, ptr}
-
-#define PB_ONEOF_POINTER(u, tag, st, m, fd, ltype, ptr) \
-    {tag, PB_ATYPE_POINTER | PB_HTYPE_ONEOF | ltype, \
-    fd, pb_delta(st, which_ ## u, u.m), \
-    pb_membersize(st, u.m[0]), 0, ptr}
-
-#define PB_ONEOF_FIELD(union_name, tag, type, rules, allocation, placement, message, field, prevfield, ptr) \
-        PB_ONEOF_ ## allocation(union_name, tag, message, field, \
-        PB_DATAOFFSET_ ## placement(message, union_name.field, prevfield), \
-        PB_LTYPE_MAP_ ## type, ptr)
-
-#define PB_ANONYMOUS_ONEOF_STATIC(u, tag, st, m, fd, ltype, ptr) \
-    {tag, PB_ATYPE_STATIC | PB_HTYPE_ONEOF | ltype, \
-    fd, pb_delta(st, which_ ## u, m), \
-    pb_membersize(st, m), 0, ptr}
-
-#define PB_ANONYMOUS_ONEOF_POINTER(u, tag, st, m, fd, ltype, ptr) \
-    {tag, PB_ATYPE_POINTER | PB_HTYPE_ONEOF | ltype, \
-    fd, pb_delta(st, which_ ## u, m), \
-    pb_membersize(st, m[0]), 0, ptr}
-
-#define PB_ANONYMOUS_ONEOF_FIELD(union_name, tag, type, rules, allocation, placement, message, field, prevfield, ptr) \
-        PB_ANONYMOUS_ONEOF_ ## allocation(union_name, tag, message, field, \
-        PB_DATAOFFSET_ ## placement(message, field, prevfield), \
-        PB_LTYPE_MAP_ ## type, ptr)
-
-/* These macros are used for giving out error messages.
- * They are mostly a debugging aid; the main error information
- * is the true/false return value from functions.
- * Some code space can be saved by disabling the error
- * messages if not used.
- *
- * PB_SET_ERROR() sets the error message if none has been set yet.
- *                msg must be a constant string literal.
- * PB_GET_ERROR() always returns a pointer to a string.
- * PB_RETURN_ERROR() sets the error and returns false from current
- *                   function.
- */
-#ifdef PB_NO_ERRMSG
-#define PB_SET_ERROR(stream, msg) PB_UNUSED(stream)
-#define PB_GET_ERROR(stream) "(errmsg disabled)"
-#else
-#define PB_SET_ERROR(stream, msg) (stream->errmsg = (stream)->errmsg ? (stream)->errmsg : (msg))
-#define PB_GET_ERROR(stream) ((stream)->errmsg ? (stream)->errmsg : "(none)")
-#endif
-
-#define PB_RETURN_ERROR(stream, msg) return PB_SET_ERROR(stream, msg), false
-
-#endif
diff --git a/assign5/openTok/Pods/nanopb/pb_common.c b/assign5/openTok/Pods/nanopb/pb_common.c
deleted file mode 100644
index 4fb7186..0000000
--- a/assign5/openTok/Pods/nanopb/pb_common.c
+++ /dev/null
@@ -1,97 +0,0 @@
-/* pb_common.c: Common support functions for pb_encode.c and pb_decode.c.
- *
- * 2014 Petteri Aimonen <jpa@kapsi.fi>
- */
-
-#include "pb_common.h"
-
-bool pb_field_iter_begin(pb_field_iter_t *iter, const pb_field_t *fields, void *dest_struct)
-{
-    iter->start = fields;
-    iter->pos = fields;
-    iter->required_field_index = 0;
-    iter->dest_struct = dest_struct;
-    iter->pData = (char*)dest_struct + iter->pos->data_offset;
-    iter->pSize = (char*)iter->pData + iter->pos->size_offset;
-    
-    return (iter->pos->tag != 0);
-}
-
-bool pb_field_iter_next(pb_field_iter_t *iter)
-{
-    const pb_field_t *prev_field = iter->pos;
-
-    if (prev_field->tag == 0)
-    {
-        /* Handle empty message types, where the first field is already the terminator.
-         * In other cases, the iter->pos never points to the terminator. */
-        return false;
-    }
-    
-    iter->pos++;
-    
-    if (iter->pos->tag == 0)
-    {
-        /* Wrapped back to beginning, reinitialize */
-        (void)pb_field_iter_begin(iter, iter->start, iter->dest_struct);
-        return false;
-    }
-    else
-    {
-        /* Increment the pointers based on previous field size */
-        size_t prev_size = prev_field->data_size;
-    
-        if (PB_HTYPE(prev_field->type) == PB_HTYPE_ONEOF &&
-            PB_HTYPE(iter->pos->type) == PB_HTYPE_ONEOF &&
-            iter->pos->data_offset == PB_SIZE_MAX)
-        {
-            /* Don't advance pointers inside unions */
-            return true;
-        }
-        else if (PB_ATYPE(prev_field->type) == PB_ATYPE_STATIC &&
-                 PB_HTYPE(prev_field->type) == PB_HTYPE_REPEATED)
-        {
-            /* In static arrays, the data_size tells the size of a single entry and
-             * array_size is the number of entries */
-            prev_size *= prev_field->array_size;
-        }
-        else if (PB_ATYPE(prev_field->type) == PB_ATYPE_POINTER)
-        {
-            /* Pointer fields always have a constant size in the main structure.
-             * The data_size only applies to the dynamically allocated area. */
-            prev_size = sizeof(void*);
-        }
-
-        if (PB_HTYPE(prev_field->type) == PB_HTYPE_REQUIRED)
-        {
-            /* Count the required fields, in order to check their presence in the
-             * decoder. */
-            iter->required_field_index++;
-        }
-    
-        iter->pData = (char*)iter->pData + prev_size + iter->pos->data_offset;
-        iter->pSize = (char*)iter->pData + iter->pos->size_offset;
-        return true;
-    }
-}
-
-bool pb_field_iter_find(pb_field_iter_t *iter, uint32_t tag)
-{
-    const pb_field_t *start = iter->pos;
-    
-    do {
-        if (iter->pos->tag == tag &&
-            PB_LTYPE(iter->pos->type) != PB_LTYPE_EXTENSION)
-        {
-            /* Found the wanted field */
-            return true;
-        }
-        
-        (void)pb_field_iter_next(iter);
-    } while (iter->pos != start);
-    
-    /* Searched all the way back to start, and found nothing. */
-    return false;
-}
-
-
diff --git a/assign5/openTok/Pods/nanopb/pb_common.h b/assign5/openTok/Pods/nanopb/pb_common.h
deleted file mode 100644
index 60b3d37..0000000
--- a/assign5/openTok/Pods/nanopb/pb_common.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* pb_common.h: Common support functions for pb_encode.c and pb_decode.c.
- * These functions are rarely needed by applications directly.
- */
-
-#ifndef PB_COMMON_H_INCLUDED
-#define PB_COMMON_H_INCLUDED
-
-#include "pb.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Iterator for pb_field_t list */
-struct pb_field_iter_s {
-    const pb_field_t *start;       /* Start of the pb_field_t array */
-    const pb_field_t *pos;         /* Current position of the iterator */
-    unsigned required_field_index; /* Zero-based index that counts only the required fields */
-    void *dest_struct;             /* Pointer to start of the structure */
-    void *pData;                   /* Pointer to current field value */
-    void *pSize;                   /* Pointer to count/has field */
-};
-typedef struct pb_field_iter_s pb_field_iter_t;
-
-/* Initialize the field iterator structure to beginning.
- * Returns false if the message type is empty. */
-bool pb_field_iter_begin(pb_field_iter_t *iter, const pb_field_t *fields, void *dest_struct);
-
-/* Advance the iterator to the next field.
- * Returns false when the iterator wraps back to the first field. */
-bool pb_field_iter_next(pb_field_iter_t *iter);
-
-/* Advance the iterator until it points at a field with the given tag.
- * Returns false if no such field exists. */
-bool pb_field_iter_find(pb_field_iter_t *iter, uint32_t tag);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif
-
diff --git a/assign5/openTok/Pods/nanopb/pb_decode.c b/assign5/openTok/Pods/nanopb/pb_decode.c
deleted file mode 100644
index 4b80e81..0000000
--- a/assign5/openTok/Pods/nanopb/pb_decode.c
+++ /dev/null
@@ -1,1508 +0,0 @@
-/* pb_decode.c -- decode a protobuf using minimal resources
- *
- * 2011 Petteri Aimonen <jpa@kapsi.fi>
- */
-
-/* Use the GCC warn_unused_result attribute to check that all return values
- * are propagated correctly. On other compilers and gcc before 3.4.0 just
- * ignore the annotation.
- */
-#if !defined(__GNUC__) || ( __GNUC__ < 3) || (__GNUC__ == 3 && __GNUC_MINOR__ < 4)
-    #define checkreturn
-#else
-    #define checkreturn __attribute__((warn_unused_result))
-#endif
-
-#include "pb.h"
-#include "pb_decode.h"
-#include "pb_common.h"
-
-/**************************************
- * Declarations internal to this file *
- **************************************/
-
-typedef bool (*pb_decoder_t)(pb_istream_t *stream, const pb_field_t *field, void *dest) checkreturn;
-
-static bool checkreturn buf_read(pb_istream_t *stream, pb_byte_t *buf, size_t count);
-static bool checkreturn read_raw_value(pb_istream_t *stream, pb_wire_type_t wire_type, pb_byte_t *buf, size_t *size);
-static bool checkreturn decode_static_field(pb_istream_t *stream, pb_wire_type_t wire_type, pb_field_iter_t *iter);
-static bool checkreturn decode_callback_field(pb_istream_t *stream, pb_wire_type_t wire_type, pb_field_iter_t *iter);
-static bool checkreturn decode_field(pb_istream_t *stream, pb_wire_type_t wire_type, pb_field_iter_t *iter);
-static void iter_from_extension(pb_field_iter_t *iter, pb_extension_t *extension);
-static bool checkreturn default_extension_decoder(pb_istream_t *stream, pb_extension_t *extension, uint32_t tag, pb_wire_type_t wire_type);
-static bool checkreturn decode_extension(pb_istream_t *stream, uint32_t tag, pb_wire_type_t wire_type, pb_field_iter_t *iter);
-static bool checkreturn find_extension_field(pb_field_iter_t *iter);
-static void pb_field_set_to_default(pb_field_iter_t *iter);
-static void pb_message_set_to_defaults(const pb_field_t fields[], void *dest_struct);
-static bool checkreturn pb_dec_varint(pb_istream_t *stream, const pb_field_t *field, void *dest);
-static bool checkreturn pb_decode_varint32_eof(pb_istream_t *stream, uint32_t *dest, bool *eof);
-static bool checkreturn pb_dec_uvarint(pb_istream_t *stream, const pb_field_t *field, void *dest);
-static bool checkreturn pb_dec_svarint(pb_istream_t *stream, const pb_field_t *field, void *dest);
-static bool checkreturn pb_dec_fixed32(pb_istream_t *stream, const pb_field_t *field, void *dest);
-static bool checkreturn pb_dec_fixed64(pb_istream_t *stream, const pb_field_t *field, void *dest);
-static bool checkreturn pb_dec_bytes(pb_istream_t *stream, const pb_field_t *field, void *dest);
-static bool checkreturn pb_dec_string(pb_istream_t *stream, const pb_field_t *field, void *dest);
-static bool checkreturn pb_dec_submessage(pb_istream_t *stream, const pb_field_t *field, void *dest);
-static bool checkreturn pb_dec_fixed_length_bytes(pb_istream_t *stream, const pb_field_t *field, void *dest);
-static bool checkreturn pb_skip_varint(pb_istream_t *stream);
-static bool checkreturn pb_skip_string(pb_istream_t *stream);
-
-#ifdef PB_ENABLE_MALLOC
-static bool checkreturn allocate_field(pb_istream_t *stream, void *pData, size_t data_size, size_t array_size);
-static bool checkreturn pb_release_union_field(pb_istream_t *stream, pb_field_iter_t *iter);
-static void pb_release_single_field(const pb_field_iter_t *iter);
-#endif
-
-#ifdef PB_WITHOUT_64BIT
-#define pb_int64_t int32_t
-#define pb_uint64_t uint32_t
-#else
-#define pb_int64_t int64_t
-#define pb_uint64_t uint64_t
-#endif
-
-/* --- Function pointers to field decoders ---
- * Order in the array must match pb_action_t LTYPE numbering.
- */
-static const pb_decoder_t PB_DECODERS[PB_LTYPES_COUNT] = {
-    &pb_dec_varint,
-    &pb_dec_uvarint,
-    &pb_dec_svarint,
-    &pb_dec_fixed32,
-    &pb_dec_fixed64,
-    
-    &pb_dec_bytes,
-    &pb_dec_string,
-    &pb_dec_submessage,
-    NULL, /* extensions */
-    &pb_dec_fixed_length_bytes
-};
-
-/*******************************
- * pb_istream_t implementation *
- *******************************/
-
-static bool checkreturn buf_read(pb_istream_t *stream, pb_byte_t *buf, size_t count)
-{
-    size_t i;
-    const pb_byte_t *source = (const pb_byte_t*)stream->state;
-    stream->state = (pb_byte_t*)stream->state + count;
-    
-    if (buf != NULL)
-    {
-        for (i = 0; i < count; i++)
-            buf[i] = source[i];
-    }
-    
-    return true;
-}
-
-bool checkreturn pb_read(pb_istream_t *stream, pb_byte_t *buf, size_t count)
-{
-#ifndef PB_BUFFER_ONLY
-	if (buf == NULL && stream->callback != buf_read)
-	{
-		/* Skip input bytes */
-		pb_byte_t tmp[16];
-		while (count > 16)
-		{
-			if (!pb_read(stream, tmp, 16))
-				return false;
-			
-			count -= 16;
-		}
-		
-		return pb_read(stream, tmp, count);
-	}
-#endif
-
-    if (stream->bytes_left < count)
-        PB_RETURN_ERROR(stream, "end-of-stream");
-    
-#ifndef PB_BUFFER_ONLY
-    if (!stream->callback(stream, buf, count))
-        PB_RETURN_ERROR(stream, "io error");
-#else
-    if (!buf_read(stream, buf, count))
-        return false;
-#endif
-    
-    stream->bytes_left -= count;
-    return true;
-}
-
-/* Read a single byte from input stream. buf may not be NULL.
- * This is an optimization for the varint decoding. */
-static bool checkreturn pb_readbyte(pb_istream_t *stream, pb_byte_t *buf)
-{
-    if (stream->bytes_left == 0)
-        PB_RETURN_ERROR(stream, "end-of-stream");
-
-#ifndef PB_BUFFER_ONLY
-    if (!stream->callback(stream, buf, 1))
-        PB_RETURN_ERROR(stream, "io error");
-#else
-    *buf = *(const pb_byte_t*)stream->state;
-    stream->state = (pb_byte_t*)stream->state + 1;
-#endif
-
-    stream->bytes_left--;
-    
-    return true;    
-}
-
-pb_istream_t pb_istream_from_buffer(const pb_byte_t *buf, size_t bufsize)
-{
-    pb_istream_t stream;
-    /* Cast away the const from buf without a compiler error.  We are
-     * careful to use it only in a const manner in the callbacks.
-     */
-    union {
-        void *state;
-        const void *c_state;
-    } state;
-#ifdef PB_BUFFER_ONLY
-    stream.callback = NULL;
-#else
-    stream.callback = &buf_read;
-#endif
-    state.c_state = buf;
-    stream.state = state.state;
-    stream.bytes_left = bufsize;
-#ifndef PB_NO_ERRMSG
-    stream.errmsg = NULL;
-#endif
-    return stream;
-}
-
-/********************
- * Helper functions *
- ********************/
-
-static bool checkreturn pb_decode_varint32_eof(pb_istream_t *stream, uint32_t *dest, bool *eof)
-{
-    pb_byte_t byte;
-    uint32_t result;
-    
-    if (!pb_readbyte(stream, &byte))
-    {
-        if (stream->bytes_left == 0)
-        {
-            if (eof)
-            {
-                *eof = true;
-            }
-        }
-
-        return false;
-    }
-    
-    if ((byte & 0x80) == 0)
-    {
-        /* Quick case, 1 byte value */
-        result = byte;
-    }
-    else
-    {
-        /* Multibyte case */
-        uint_fast8_t bitpos = 7;
-        result = byte & 0x7F;
-        
-        do
-        {
-            if (!pb_readbyte(stream, &byte))
-                return false;
-            
-            if (bitpos >= 32)
-            {
-                /* Note: The varint could have trailing 0x80 bytes, or 0xFF for negative. */
-                uint8_t sign_extension = (bitpos < 63) ? 0xFF : 0x01;
-                
-                if ((byte & 0x7F) != 0x00 && ((result >> 31) == 0 || byte != sign_extension))
-                {
-                    PB_RETURN_ERROR(stream, "varint overflow");
-                }
-            }
-            else
-            {
-                result |= (uint32_t)(byte & 0x7F) << bitpos;
-            }
-            bitpos = (uint_fast8_t)(bitpos + 7);
-        } while (byte & 0x80);
-        
-        if (bitpos == 35 && (byte & 0x70) != 0)
-        {
-            /* The last byte was at bitpos=28, so only bottom 4 bits fit. */
-            PB_RETURN_ERROR(stream, "varint overflow");
-        }
-   }
-   
-   *dest = result;
-   return true;
-}
-
-bool checkreturn pb_decode_varint32(pb_istream_t *stream, uint32_t *dest)
-{
-    return pb_decode_varint32_eof(stream, dest, NULL);
-}
-
-#ifndef PB_WITHOUT_64BIT
-bool checkreturn pb_decode_varint(pb_istream_t *stream, uint64_t *dest)
-{
-    pb_byte_t byte;
-    uint_fast8_t bitpos = 0;
-    uint64_t result = 0;
-    
-    do
-    {
-        if (bitpos >= 64)
-            PB_RETURN_ERROR(stream, "varint overflow");
-        
-        if (!pb_readbyte(stream, &byte))
-            return false;
-
-        result |= (uint64_t)(byte & 0x7F) << bitpos;
-        bitpos = (uint_fast8_t)(bitpos + 7);
-    } while (byte & 0x80);
-    
-    *dest = result;
-    return true;
-}
-#endif
-
-bool checkreturn pb_skip_varint(pb_istream_t *stream)
-{
-    pb_byte_t byte;
-    do
-    {
-        if (!pb_read(stream, &byte, 1))
-            return false;
-    } while (byte & 0x80);
-    return true;
-}
-
-bool checkreturn pb_skip_string(pb_istream_t *stream)
-{
-    uint32_t length;
-    if (!pb_decode_varint32(stream, &length))
-        return false;
-    
-    return pb_read(stream, NULL, length);
-}
-
-bool checkreturn pb_decode_tag(pb_istream_t *stream, pb_wire_type_t *wire_type, uint32_t *tag, bool *eof)
-{
-    uint32_t temp;
-    *eof = false;
-    *wire_type = (pb_wire_type_t) 0;
-    *tag = 0;
-    
-    if (!pb_decode_varint32_eof(stream, &temp, eof))
-    {
-        return false;
-    }
-    
-    if (temp == 0)
-    {
-        *eof = true; /* Special feature: allow 0-terminated messages. */
-        return false;
-    }
-    
-    *tag = temp >> 3;
-    *wire_type = (pb_wire_type_t)(temp & 7);
-    return true;
-}
-
-bool checkreturn pb_skip_field(pb_istream_t *stream, pb_wire_type_t wire_type)
-{
-    switch (wire_type)
-    {
-        case PB_WT_VARINT: return pb_skip_varint(stream);
-        case PB_WT_64BIT: return pb_read(stream, NULL, 8);
-        case PB_WT_STRING: return pb_skip_string(stream);
-        case PB_WT_32BIT: return pb_read(stream, NULL, 4);
-        default: PB_RETURN_ERROR(stream, "invalid wire_type");
-    }
-}
-
-/* Read a raw value to buffer, for the purpose of passing it to callback as
- * a substream. Size is maximum size on call, and actual size on return.
- */
-static bool checkreturn read_raw_value(pb_istream_t *stream, pb_wire_type_t wire_type, pb_byte_t *buf, size_t *size)
-{
-    size_t max_size = *size;
-    switch (wire_type)
-    {
-        case PB_WT_VARINT:
-            *size = 0;
-            do
-            {
-                (*size)++;
-                if (*size > max_size) return false;
-                if (!pb_read(stream, buf, 1)) return false;
-            } while (*buf++ & 0x80);
-            return true;
-            
-        case PB_WT_64BIT:
-            *size = 8;
-            return pb_read(stream, buf, 8);
-        
-        case PB_WT_32BIT:
-            *size = 4;
-            return pb_read(stream, buf, 4);
-        
-        case PB_WT_STRING:
-            /* Calling read_raw_value with a PB_WT_STRING is an error.
-             * Explicitly handle this case and fallthrough to default to avoid
-             * compiler warnings.
-             */
-
-        default: PB_RETURN_ERROR(stream, "invalid wire_type");
-    }
-}
-
-/* Decode string length from stream and return a substream with limited length.
- * Remember to close the substream using pb_close_string_substream().
- */
-bool checkreturn pb_make_string_substream(pb_istream_t *stream, pb_istream_t *substream)
-{
-    uint32_t size;
-    if (!pb_decode_varint32(stream, &size))
-        return false;
-    
-    *substream = *stream;
-    if (substream->bytes_left < size)
-        PB_RETURN_ERROR(stream, "parent stream too short");
-    
-    substream->bytes_left = size;
-    stream->bytes_left -= size;
-    return true;
-}
-
-bool checkreturn pb_close_string_substream(pb_istream_t *stream, pb_istream_t *substream)
-{
-    if (substream->bytes_left) {
-        if (!pb_read(substream, NULL, substream->bytes_left))
-            return false;
-    }
-
-    stream->state = substream->state;
-
-#ifndef PB_NO_ERRMSG
-    stream->errmsg = substream->errmsg;
-#endif
-    return true;
-}
-
-/*************************
- * Decode a single field *
- *************************/
-
-static bool checkreturn decode_static_field(pb_istream_t *stream, pb_wire_type_t wire_type, pb_field_iter_t *iter)
-{
-    pb_type_t type;
-    pb_decoder_t func;
-    
-    type = iter->pos->type;
-    func = PB_DECODERS[PB_LTYPE(type)];
-
-    switch (PB_HTYPE(type))
-    {
-        case PB_HTYPE_REQUIRED:
-            return func(stream, iter->pos, iter->pData);
-            
-        case PB_HTYPE_OPTIONAL:
-            if (iter->pSize != iter->pData)
-                *(bool*)iter->pSize = true;
-            return func(stream, iter->pos, iter->pData);
-    
-        case PB_HTYPE_REPEATED:
-            if (wire_type == PB_WT_STRING
-                && PB_LTYPE(type) <= PB_LTYPE_LAST_PACKABLE)
-            {
-                /* Packed array */
-                bool status = true;
-                pb_size_t *size = (pb_size_t*)iter->pSize;
-
-                pb_istream_t substream;
-                if (!pb_make_string_substream(stream, &substream))
-                    return false;
-
-                while (substream.bytes_left > 0 && *size < iter->pos->array_size)
-                {
-                    void *pItem = (char*)iter->pData + iter->pos->data_size * (*size);
-                    if (!func(&substream, iter->pos, pItem))
-                    {
-                        status = false;
-                        break;
-                    }
-                    (*size)++;
-                }
-
-                if (substream.bytes_left != 0)
-                    PB_RETURN_ERROR(stream, "array overflow");
-                if (!pb_close_string_substream(stream, &substream))
-                    return false;
-
-                return status;
-            }
-            else
-            {
-                /* Repeated field */
-                pb_size_t *size = (pb_size_t*)iter->pSize;
-                char *pItem = (char*)iter->pData + iter->pos->data_size * (*size);
-
-                if ((*size)++ >= iter->pos->array_size)
-                    PB_RETURN_ERROR(stream, "array overflow");
-
-                return func(stream, iter->pos, pItem);
-            }
-
-        case PB_HTYPE_ONEOF:
-            *(pb_size_t*)iter->pSize = iter->pos->tag;
-            if (PB_LTYPE(type) == PB_LTYPE_SUBMESSAGE)
-            {
-                /* We memset to zero so that any callbacks are set to NULL.
-                 * Then set any default values. */
-                memset(iter->pData, 0, iter->pos->data_size);
-                pb_message_set_to_defaults((const pb_field_t*)iter->pos->ptr, iter->pData);
-            }
-            return func(stream, iter->pos, iter->pData);
-
-        default:
-            PB_RETURN_ERROR(stream, "invalid field type");
-    }
-}
-
-#ifdef PB_ENABLE_MALLOC
-/* Allocate storage for the field and store the pointer at iter->pData.
- * array_size is the number of entries to reserve in an array.
- * Zero size is not allowed, use pb_free() for releasing.
- */
-static bool checkreturn allocate_field(pb_istream_t *stream, void *pData, size_t data_size, size_t array_size)
-{    
-    void *ptr = *(void**)pData;
-    
-    if (data_size == 0 || array_size == 0)
-        PB_RETURN_ERROR(stream, "invalid size");
-    
-    /* Check for multiplication overflows.
-     * This code avoids the costly division if the sizes are small enough.
-     * Multiplication is safe as long as only half of bits are set
-     * in either multiplicand.
-     */
-    {
-        const size_t check_limit = (size_t)1 << (sizeof(size_t) * 4);
-        if (data_size >= check_limit || array_size >= check_limit)
-        {
-            const size_t size_max = (size_t)-1;
-            if (size_max / array_size < data_size)
-            {
-                PB_RETURN_ERROR(stream, "size too large");
-            }
-        }
-    }
-    
-    /* Allocate new or expand previous allocation */
-    /* Note: on failure the old pointer will remain in the structure,
-     * the message must be freed by caller also on error return. */
-    ptr = pb_realloc(ptr, array_size * data_size);
-    if (ptr == NULL)
-        PB_RETURN_ERROR(stream, "realloc failed");
-    
-    *(void**)pData = ptr;
-    return true;
-}
-
-/* Clear a newly allocated item in case it contains a pointer, or is a submessage. */
-static void initialize_pointer_field(void *pItem, pb_field_iter_t *iter)
-{
-    if (PB_LTYPE(iter->pos->type) == PB_LTYPE_STRING ||
-        PB_LTYPE(iter->pos->type) == PB_LTYPE_BYTES)
-    {
-        *(void**)pItem = NULL;
-    }
-    else if (PB_LTYPE(iter->pos->type) == PB_LTYPE_SUBMESSAGE)
-    {
-        /* We memset to zero so that any callbacks are set to NULL.
-         * Then set any default values. */
-        memset(pItem, 0, iter->pos->data_size);
-        pb_message_set_to_defaults((const pb_field_t *) iter->pos->ptr, pItem);
-    }
-}
-#endif
-
-static bool checkreturn decode_pointer_field(pb_istream_t *stream, pb_wire_type_t wire_type, pb_field_iter_t *iter)
-{
-#ifndef PB_ENABLE_MALLOC
-    PB_UNUSED(wire_type);
-    PB_UNUSED(iter);
-    PB_RETURN_ERROR(stream, "no malloc support");
-#else
-    pb_type_t type;
-    pb_decoder_t func;
-    
-    type = iter->pos->type;
-    func = PB_DECODERS[PB_LTYPE(type)];
-    
-    switch (PB_HTYPE(type))
-    {
-        case PB_HTYPE_REQUIRED:
-        case PB_HTYPE_OPTIONAL:
-        case PB_HTYPE_ONEOF:
-            if (PB_LTYPE(type) == PB_LTYPE_SUBMESSAGE &&
-                *(void**)iter->pData != NULL)
-            {
-                /* Duplicate field, have to release the old allocation first. */
-                pb_release_single_field(iter);
-            }
-        
-            if (PB_HTYPE(type) == PB_HTYPE_ONEOF)
-            {
-                *(pb_size_t*)iter->pSize = iter->pos->tag;
-            }
-
-            if (PB_LTYPE(type) == PB_LTYPE_STRING ||
-                PB_LTYPE(type) == PB_LTYPE_BYTES)
-            {
-                return func(stream, iter->pos, iter->pData);
-            }
-            else
-            {
-                if (!allocate_field(stream, iter->pData, iter->pos->data_size, 1))
-                    return false;
-                
-                initialize_pointer_field(*(void**)iter->pData, iter);
-                return func(stream, iter->pos, *(void**)iter->pData);
-            }
-    
-        case PB_HTYPE_REPEATED:
-            if (wire_type == PB_WT_STRING
-                && PB_LTYPE(type) <= PB_LTYPE_LAST_PACKABLE)
-            {
-                /* Packed array, multiple items come in at once. */
-                bool status = true;
-                pb_size_t *size = (pb_size_t*)iter->pSize;
-                size_t allocated_size = *size;
-                void *pItem;
-                pb_istream_t substream;
-                
-                if (!pb_make_string_substream(stream, &substream))
-                    return false;
-                
-                while (substream.bytes_left)
-                {
-                    if ((size_t)*size + 1 > allocated_size)
-                    {
-                        /* Allocate more storage. This tries to guess the
-                         * number of remaining entries. Round the division
-                         * upwards. */
-                        allocated_size += (substream.bytes_left - 1) / iter->pos->data_size + 1;
-                        
-                        if (!allocate_field(&substream, iter->pData, iter->pos->data_size, allocated_size))
-                        {
-                            status = false;
-                            break;
-                        }
-                    }
-
-                    /* Decode the array entry */
-                    pItem = *(char**)iter->pData + iter->pos->data_size * (*size);
-                    initialize_pointer_field(pItem, iter);
-                    if (!func(&substream, iter->pos, pItem))
-                    {
-                        status = false;
-                        break;
-                    }
-                    
-                    if (*size == PB_SIZE_MAX)
-                    {
-#ifndef PB_NO_ERRMSG
-                        stream->errmsg = "too many array entries";
-#endif
-                        status = false;
-                        break;
-                    }
-                    
-                    (*size)++;
-                }
-                if (!pb_close_string_substream(stream, &substream))
-                    return false;
-                
-                return status;
-            }
-            else
-            {
-                /* Normal repeated field, i.e. only one item at a time. */
-                pb_size_t *size = (pb_size_t*)iter->pSize;
-                void *pItem;
-                
-                if (*size == PB_SIZE_MAX)
-                    PB_RETURN_ERROR(stream, "too many array entries");
-                
-                (*size)++;
-                if (!allocate_field(stream, iter->pData, iter->pos->data_size, *size))
-                    return false;
-            
-                pItem = *(char**)iter->pData + iter->pos->data_size * (*size - 1);
-                initialize_pointer_field(pItem, iter);
-                return func(stream, iter->pos, pItem);
-            }
-
-        default:
-            PB_RETURN_ERROR(stream, "invalid field type");
-    }
-#endif
-}
-
-static bool checkreturn decode_callback_field(pb_istream_t *stream, pb_wire_type_t wire_type, pb_field_iter_t *iter)
-{
-    pb_callback_t *pCallback = (pb_callback_t*)iter->pData;
-    
-#ifdef PB_OLD_CALLBACK_STYLE
-    void *arg = pCallback->arg;
-#else
-    void **arg = &(pCallback->arg);
-#endif
-    
-    if (pCallback == NULL || pCallback->funcs.decode == NULL)
-        return pb_skip_field(stream, wire_type);
-    
-    if (wire_type == PB_WT_STRING)
-    {
-        pb_istream_t substream;
-        
-        if (!pb_make_string_substream(stream, &substream))
-            return false;
-        
-        do
-        {
-            if (!pCallback->funcs.decode(&substream, iter->pos, arg))
-                PB_RETURN_ERROR(stream, "callback failed");
-        } while (substream.bytes_left);
-        
-        if (!pb_close_string_substream(stream, &substream))
-            return false;
-
-        return true;
-    }
-    else
-    {
-        /* Copy the single scalar value to stack.
-         * This is required so that we can limit the stream length,
-         * which in turn allows to use same callback for packed and
-         * not-packed fields. */
-        pb_istream_t substream;
-        pb_byte_t buffer[10];
-        size_t size = sizeof(buffer);
-        
-        if (!read_raw_value(stream, wire_type, buffer, &size))
-            return false;
-        substream = pb_istream_from_buffer(buffer, size);
-        
-        return pCallback->funcs.decode(&substream, iter->pos, arg);
-    }
-}
-
-static bool checkreturn decode_field(pb_istream_t *stream, pb_wire_type_t wire_type, pb_field_iter_t *iter)
-{
-#ifdef PB_ENABLE_MALLOC
-    /* When decoding an oneof field, check if there is old data that must be
-     * released first. */
-    if (PB_HTYPE(iter->pos->type) == PB_HTYPE_ONEOF)
-    {
-        if (!pb_release_union_field(stream, iter))
-            return false;
-    }
-#endif
-
-    switch (PB_ATYPE(iter->pos->type))
-    {
-        case PB_ATYPE_STATIC:
-            return decode_static_field(stream, wire_type, iter);
-        
-        case PB_ATYPE_POINTER:
-            return decode_pointer_field(stream, wire_type, iter);
-        
-        case PB_ATYPE_CALLBACK:
-            return decode_callback_field(stream, wire_type, iter);
-        
-        default:
-            PB_RETURN_ERROR(stream, "invalid field type");
-    }
-}
-
-static void iter_from_extension(pb_field_iter_t *iter, pb_extension_t *extension)
-{
-    /* Fake a field iterator for the extension field.
-     * It is not actually safe to advance this iterator, but decode_field
-     * will not even try to. */
-    const pb_field_t *field = (const pb_field_t*)extension->type->arg;
-    (void)pb_field_iter_begin(iter, field, extension->dest);
-    iter->pData = extension->dest;
-    iter->pSize = &extension->found;
-    
-    if (PB_ATYPE(field->type) == PB_ATYPE_POINTER)
-    {
-        /* For pointer extensions, the pointer is stored directly
-         * in the extension structure. This avoids having an extra
-         * indirection. */
-        iter->pData = &extension->dest;
-    }
-}
-
-/* Default handler for extension fields. Expects a pb_field_t structure
- * in extension->type->arg. */
-static bool checkreturn default_extension_decoder(pb_istream_t *stream,
-    pb_extension_t *extension, uint32_t tag, pb_wire_type_t wire_type)
-{
-    const pb_field_t *field = (const pb_field_t*)extension->type->arg;
-    pb_field_iter_t iter;
-    
-    if (field->tag != tag)
-        return true;
-    
-    iter_from_extension(&iter, extension);
-    extension->found = true;
-    return decode_field(stream, wire_type, &iter);
-}
-
-/* Try to decode an unknown field as an extension field. Tries each extension
- * decoder in turn, until one of them handles the field or loop ends. */
-static bool checkreturn decode_extension(pb_istream_t *stream,
-    uint32_t tag, pb_wire_type_t wire_type, pb_field_iter_t *iter)
-{
-    pb_extension_t *extension = *(pb_extension_t* const *)iter->pData;
-    size_t pos = stream->bytes_left;
-    
-    while (extension != NULL && pos == stream->bytes_left)
-    {
-        bool status;
-        if (extension->type->decode)
-            status = extension->type->decode(stream, extension, tag, wire_type);
-        else
-            status = default_extension_decoder(stream, extension, tag, wire_type);
-
-        if (!status)
-            return false;
-        
-        extension = extension->next;
-    }
-    
-    return true;
-}
-
-/* Step through the iterator until an extension field is found or until all
- * entries have been checked. There can be only one extension field per
- * message. Returns false if no extension field is found. */
-static bool checkreturn find_extension_field(pb_field_iter_t *iter)
-{
-    const pb_field_t *start = iter->pos;
-    
-    do {
-        if (PB_LTYPE(iter->pos->type) == PB_LTYPE_EXTENSION)
-            return true;
-        (void)pb_field_iter_next(iter);
-    } while (iter->pos != start);
-    
-    return false;
-}
-
-/* Initialize message fields to default values, recursively */
-static void pb_field_set_to_default(pb_field_iter_t *iter)
-{
-    pb_type_t type;
-    type = iter->pos->type;
-    
-    if (PB_LTYPE(type) == PB_LTYPE_EXTENSION)
-    {
-        pb_extension_t *ext = *(pb_extension_t* const *)iter->pData;
-        while (ext != NULL)
-        {
-            pb_field_iter_t ext_iter;
-            ext->found = false;
-            iter_from_extension(&ext_iter, ext);
-            pb_field_set_to_default(&ext_iter);
-            ext = ext->next;
-        }
-    }
-    else if (PB_ATYPE(type) == PB_ATYPE_STATIC)
-    {
-        bool init_data = true;
-        if (PB_HTYPE(type) == PB_HTYPE_OPTIONAL && iter->pSize != iter->pData)
-        {
-            /* Set has_field to false. Still initialize the optional field
-             * itself also. */
-            *(bool*)iter->pSize = false;
-        }
-        else if (PB_HTYPE(type) == PB_HTYPE_REPEATED ||
-                 PB_HTYPE(type) == PB_HTYPE_ONEOF)
-        {
-            /* REPEATED: Set array count to 0, no need to initialize contents.
-               ONEOF: Set which_field to 0. */
-            *(pb_size_t*)iter->pSize = 0;
-            init_data = false;
-        }
-
-        if (init_data)
-        {
-            if (PB_LTYPE(iter->pos->type) == PB_LTYPE_SUBMESSAGE)
-            {
-                /* Initialize submessage to defaults */
-                pb_message_set_to_defaults((const pb_field_t *) iter->pos->ptr, iter->pData);
-            }
-            else if (iter->pos->ptr != NULL)
-            {
-                /* Initialize to default value */
-                memcpy(iter->pData, iter->pos->ptr, iter->pos->data_size);
-            }
-            else
-            {
-                /* Initialize to zeros */
-                memset(iter->pData, 0, iter->pos->data_size);
-            }
-        }
-    }
-    else if (PB_ATYPE(type) == PB_ATYPE_POINTER)
-    {
-        /* Initialize the pointer to NULL. */
-        *(void**)iter->pData = NULL;
-        
-        /* Initialize array count to 0. */
-        if (PB_HTYPE(type) == PB_HTYPE_REPEATED ||
-            PB_HTYPE(type) == PB_HTYPE_ONEOF)
-        {
-            *(pb_size_t*)iter->pSize = 0;
-        }
-    }
-    else if (PB_ATYPE(type) == PB_ATYPE_CALLBACK)
-    {
-        /* Don't overwrite callback */
-    }
-}
-
-static void pb_message_set_to_defaults(const pb_field_t fields[], void *dest_struct)
-{
-    pb_field_iter_t iter;
-
-    if (!pb_field_iter_begin(&iter, fields, dest_struct))
-        return; /* Empty message type */
-    
-    do
-    {
-        pb_field_set_to_default(&iter);
-    } while (pb_field_iter_next(&iter));
-}
-
-/*********************
- * Decode all fields *
- *********************/
-
-bool checkreturn pb_decode_noinit(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct)
-{
-    uint32_t fields_seen[(PB_MAX_REQUIRED_FIELDS + 31) / 32] = {0, 0};
-    const uint32_t allbits = ~(uint32_t)0;
-    uint32_t extension_range_start = 0;
-    pb_field_iter_t iter;
-
-    /* 'fixed_count_field' and 'fixed_count_size' track position of a repeated fixed
-     * count field. This can only handle _one_ repeated fixed count field that
-     * is unpacked and unordered among other (non repeated fixed count) fields.
-     */
-    const pb_field_t *fixed_count_field = NULL;
-    pb_size_t fixed_count_size = 0;
-
-    /* Return value ignored, as empty message types will be correctly handled by
-     * pb_field_iter_find() anyway. */
-    (void)pb_field_iter_begin(&iter, fields, dest_struct);
-
-    while (stream->bytes_left)
-    {
-        uint32_t tag;
-        pb_wire_type_t wire_type;
-        bool eof;
-
-        if (!pb_decode_tag(stream, &wire_type, &tag, &eof))
-        {
-            if (eof)
-                break;
-            else
-                return false;
-        }
-
-        if (!pb_field_iter_find(&iter, tag))
-        {
-            /* No match found, check if it matches an extension. */
-            if (tag >= extension_range_start)
-            {
-                if (!find_extension_field(&iter))
-                    extension_range_start = (uint32_t)-1;
-                else
-                    extension_range_start = iter.pos->tag;
-
-                if (tag >= extension_range_start)
-                {
-                    size_t pos = stream->bytes_left;
-
-                    if (!decode_extension(stream, tag, wire_type, &iter))
-                        return false;
-
-                    if (pos != stream->bytes_left)
-                    {
-                        /* The field was handled */
-                        continue;
-                    }
-                }
-            }
-
-            /* No match found, skip data */
-            if (!pb_skip_field(stream, wire_type))
-                return false;
-            continue;
-        }
-
-        /* If a repeated fixed count field was found, get size from
-         * 'fixed_count_field' as there is no counter contained in the struct.
-         */
-        if (PB_HTYPE(iter.pos->type) == PB_HTYPE_REPEATED
-            && iter.pSize == iter.pData)
-        {
-            if (fixed_count_field != iter.pos) {
-                /* If the new fixed count field does not match the previous one,
-                 * check that the previous one is NULL or that it finished
-                 * receiving all the expected data.
-                 */
-                if (fixed_count_field != NULL &&
-                    fixed_count_size != fixed_count_field->array_size)
-                {
-                    PB_RETURN_ERROR(stream, "wrong size for fixed count field");
-                }
-
-                fixed_count_field = iter.pos;
-                fixed_count_size = 0;
-            }
-
-            iter.pSize = &fixed_count_size;
-        }
-
-        if (PB_HTYPE(iter.pos->type) == PB_HTYPE_REQUIRED
-            && iter.required_field_index < PB_MAX_REQUIRED_FIELDS)
-        {
-            uint32_t tmp = ((uint32_t)1 << (iter.required_field_index & 31));
-            fields_seen[iter.required_field_index >> 5] |= tmp;
-        }
-
-        if (!decode_field(stream, wire_type, &iter))
-            return false;
-    }
-
-    /* Check that all elements of the last decoded fixed count field were present. */
-    if (fixed_count_field != NULL &&
-        fixed_count_size != fixed_count_field->array_size)
-    {
-        PB_RETURN_ERROR(stream, "wrong size for fixed count field");
-    }
-
-    /* Check that all required fields were present. */
-    {
-        /* First figure out the number of required fields by
-         * seeking to the end of the field array. Usually we
-         * are already close to end after decoding.
-         */
-        unsigned req_field_count;
-        pb_type_t last_type;
-        unsigned i;
-        do {
-            req_field_count = iter.required_field_index;
-            last_type = iter.pos->type;
-        } while (pb_field_iter_next(&iter));
-        
-        /* Fixup if last field was also required. */
-        if (PB_HTYPE(last_type) == PB_HTYPE_REQUIRED && iter.pos->tag != 0)
-            req_field_count++;
-        
-        if (req_field_count > PB_MAX_REQUIRED_FIELDS)
-            req_field_count = PB_MAX_REQUIRED_FIELDS;
-
-        if (req_field_count > 0)
-        {
-            /* Check the whole words */
-            for (i = 0; i < (req_field_count >> 5); i++)
-            {
-                if (fields_seen[i] != allbits)
-                    PB_RETURN_ERROR(stream, "missing required field");
-            }
-            
-            /* Check the remaining bits (if any) */
-            if ((req_field_count & 31) != 0)
-            {
-                if (fields_seen[req_field_count >> 5] !=
-                    (allbits >> (32 - (req_field_count & 31))))
-                {
-                    PB_RETURN_ERROR(stream, "missing required field");
-                }
-            }
-        }
-    }
-    
-    return true;
-}
-
-bool checkreturn pb_decode(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct)
-{
-    bool status;
-    pb_message_set_to_defaults(fields, dest_struct);
-    status = pb_decode_noinit(stream, fields, dest_struct);
-    
-#ifdef PB_ENABLE_MALLOC
-    if (!status)
-        pb_release(fields, dest_struct);
-#endif
-    
-    return status;
-}
-
-bool pb_decode_delimited_noinit(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct)
-{
-    pb_istream_t substream;
-    bool status;
-
-    if (!pb_make_string_substream(stream, &substream))
-        return false;
-
-    status = pb_decode_noinit(&substream, fields, dest_struct);
-
-    if (!pb_close_string_substream(stream, &substream))
-        return false;
-    return status;
-}
-
-bool pb_decode_delimited(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct)
-{
-    pb_istream_t substream;
-    bool status;
-    
-    if (!pb_make_string_substream(stream, &substream))
-        return false;
-    
-    status = pb_decode(&substream, fields, dest_struct);
-
-    if (!pb_close_string_substream(stream, &substream))
-        return false;
-    return status;
-}
-
-bool pb_decode_nullterminated(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct)
-{
-    /* This behaviour will be separated in nanopb-0.4.0, see issue #278. */
-    return pb_decode(stream, fields, dest_struct);
-}
-
-#ifdef PB_ENABLE_MALLOC
-/* Given an oneof field, if there has already been a field inside this oneof,
- * release it before overwriting with a different one. */
-static bool pb_release_union_field(pb_istream_t *stream, pb_field_iter_t *iter)
-{
-    pb_size_t old_tag = *(pb_size_t*)iter->pSize; /* Previous which_ value */
-    pb_size_t new_tag = iter->pos->tag; /* New which_ value */
-
-    if (old_tag == 0)
-        return true; /* Ok, no old data in union */
-
-    if (old_tag == new_tag)
-        return true; /* Ok, old data is of same type => merge */
-
-    /* Release old data. The find can fail if the message struct contains
-     * invalid data. */
-    if (!pb_field_iter_find(iter, old_tag))
-        PB_RETURN_ERROR(stream, "invalid union tag");
-
-    pb_release_single_field(iter);
-
-    /* Restore iterator to where it should be.
-     * This shouldn't fail unless the pb_field_t structure is corrupted. */
-    if (!pb_field_iter_find(iter, new_tag))
-        PB_RETURN_ERROR(stream, "iterator error");
-    
-    return true;
-}
-
-static void pb_release_single_field(const pb_field_iter_t *iter)
-{
-    pb_type_t type;
-    type = iter->pos->type;
-
-    if (PB_HTYPE(type) == PB_HTYPE_ONEOF)
-    {
-        if (*(pb_size_t*)iter->pSize != iter->pos->tag)
-            return; /* This is not the current field in the union */
-    }
-
-    /* Release anything contained inside an extension or submsg.
-     * This has to be done even if the submsg itself is statically
-     * allocated. */
-    if (PB_LTYPE(type) == PB_LTYPE_EXTENSION)
-    {
-        /* Release fields from all extensions in the linked list */
-        pb_extension_t *ext = *(pb_extension_t**)iter->pData;
-        while (ext != NULL)
-        {
-            pb_field_iter_t ext_iter;
-            iter_from_extension(&ext_iter, ext);
-            pb_release_single_field(&ext_iter);
-            ext = ext->next;
-        }
-    }
-    else if (PB_LTYPE(type) == PB_LTYPE_SUBMESSAGE)
-    {
-        /* Release fields in submessage or submsg array */
-        void *pItem = iter->pData;
-        pb_size_t count = 1;
-        
-        if (PB_ATYPE(type) == PB_ATYPE_POINTER)
-        {
-            pItem = *(void**)iter->pData;
-        }
-        
-        if (PB_HTYPE(type) == PB_HTYPE_REPEATED)
-        {
-            if (PB_ATYPE(type) == PB_ATYPE_STATIC && iter->pSize == iter->pData) {
-                /* No _count field so use size of the array */
-                count = iter->pos->array_size;
-            } else {
-                count = *(pb_size_t*)iter->pSize;
-            }
-
-            if (PB_ATYPE(type) == PB_ATYPE_STATIC && count > iter->pos->array_size)
-            {
-                /* Protect against corrupted _count fields */
-                count = iter->pos->array_size;
-            }
-        }
-        
-        if (pItem)
-        {
-            while (count--)
-            {
-                pb_release((const pb_field_t*)iter->pos->ptr, pItem);
-                pItem = (char*)pItem + iter->pos->data_size;
-            }
-        }
-    }
-    
-    if (PB_ATYPE(type) == PB_ATYPE_POINTER)
-    {
-        if (PB_HTYPE(type) == PB_HTYPE_REPEATED &&
-            (PB_LTYPE(type) == PB_LTYPE_STRING ||
-             PB_LTYPE(type) == PB_LTYPE_BYTES))
-        {
-            /* Release entries in repeated string or bytes array */
-            void **pItem = *(void***)iter->pData;
-            pb_size_t count = *(pb_size_t*)iter->pSize;
-            while (count--)
-            {
-                pb_free(*pItem);
-                *pItem++ = NULL;
-            }
-        }
-        
-        if (PB_HTYPE(type) == PB_HTYPE_REPEATED)
-        {
-            /* We are going to release the array, so set the size to 0 */
-            *(pb_size_t*)iter->pSize = 0;
-        }
-        
-        /* Release main item */
-        pb_free(*(void**)iter->pData);
-        *(void**)iter->pData = NULL;
-    }
-}
-
-void pb_release(const pb_field_t fields[], void *dest_struct)
-{
-    pb_field_iter_t iter;
-    
-    if (!dest_struct)
-        return; /* Ignore NULL pointers, similar to free() */
-
-    if (!pb_field_iter_begin(&iter, fields, dest_struct))
-        return; /* Empty message type */
-    
-    do
-    {
-        pb_release_single_field(&iter);
-    } while (pb_field_iter_next(&iter));
-}
-#endif
-
-/* Field decoders */
-
-bool pb_decode_svarint(pb_istream_t *stream, pb_int64_t *dest)
-{
-    pb_uint64_t value;
-    if (!pb_decode_varint(stream, &value))
-        return false;
-    
-    if (value & 1)
-        *dest = (pb_int64_t)(~(value >> 1));
-    else
-        *dest = (pb_int64_t)(value >> 1);
-    
-    return true;
-}
-
-bool pb_decode_fixed32(pb_istream_t *stream, void *dest)
-{
-    pb_byte_t bytes[4];
-
-    if (!pb_read(stream, bytes, 4))
-        return false;
-    
-    *(uint32_t*)dest = ((uint32_t)bytes[0] << 0) |
-                       ((uint32_t)bytes[1] << 8) |
-                       ((uint32_t)bytes[2] << 16) |
-                       ((uint32_t)bytes[3] << 24);
-    return true;
-}
-
-#ifndef PB_WITHOUT_64BIT
-bool pb_decode_fixed64(pb_istream_t *stream, void *dest)
-{
-    pb_byte_t bytes[8];
-
-    if (!pb_read(stream, bytes, 8))
-        return false;
-    
-    *(uint64_t*)dest = ((uint64_t)bytes[0] << 0) |
-                       ((uint64_t)bytes[1] << 8) |
-                       ((uint64_t)bytes[2] << 16) |
-                       ((uint64_t)bytes[3] << 24) |
-                       ((uint64_t)bytes[4] << 32) |
-                       ((uint64_t)bytes[5] << 40) |
-                       ((uint64_t)bytes[6] << 48) |
-                       ((uint64_t)bytes[7] << 56);
-    
-    return true;
-}
-#endif
-
-static bool checkreturn pb_dec_varint(pb_istream_t *stream, const pb_field_t *field, void *dest)
-{
-    pb_uint64_t value;
-    pb_int64_t svalue;
-    pb_int64_t clamped;
-    if (!pb_decode_varint(stream, &value))
-        return false;
-    
-    /* See issue 97: Google's C++ protobuf allows negative varint values to
-     * be cast as int32_t, instead of the int64_t that should be used when
-     * encoding. Previous nanopb versions had a bug in encoding. In order to
-     * not break decoding of such messages, we cast <=32 bit fields to
-     * int32_t first to get the sign correct.
-     */
-    if (field->data_size == sizeof(pb_int64_t))
-        svalue = (pb_int64_t)value;
-    else
-        svalue = (int32_t)value;
-
-    /* Cast to the proper field size, while checking for overflows */
-    if (field->data_size == sizeof(pb_int64_t))
-        clamped = *(pb_int64_t*)dest = svalue;
-    else if (field->data_size == sizeof(int32_t))
-        clamped = *(int32_t*)dest = (int32_t)svalue;
-    else if (field->data_size == sizeof(int_least16_t))
-        clamped = *(int_least16_t*)dest = (int_least16_t)svalue;
-    else if (field->data_size == sizeof(int_least8_t))
-        clamped = *(int_least8_t*)dest = (int_least8_t)svalue;
-    else
-        PB_RETURN_ERROR(stream, "invalid data_size");
-
-    if (clamped != svalue)
-        PB_RETURN_ERROR(stream, "integer too large");
-    
-    return true;
-}
-
-static bool checkreturn pb_dec_uvarint(pb_istream_t *stream, const pb_field_t *field, void *dest)
-{
-    pb_uint64_t value, clamped;
-    if (!pb_decode_varint(stream, &value))
-        return false;
-    
-    /* Cast to the proper field size, while checking for overflows */
-    if (field->data_size == sizeof(pb_uint64_t))
-        clamped = *(pb_uint64_t*)dest = value;
-    else if (field->data_size == sizeof(uint32_t))
-        clamped = *(uint32_t*)dest = (uint32_t)value;
-    else if (field->data_size == sizeof(uint_least16_t))
-        clamped = *(uint_least16_t*)dest = (uint_least16_t)value;
-    else if (field->data_size == sizeof(uint_least8_t))
-        clamped = *(uint_least8_t*)dest = (uint_least8_t)value;
-    else
-        PB_RETURN_ERROR(stream, "invalid data_size");
-    
-    if (clamped != value)
-        PB_RETURN_ERROR(stream, "integer too large");
-
-    return true;
-}
-
-static bool checkreturn pb_dec_svarint(pb_istream_t *stream, const pb_field_t *field, void *dest)
-{
-    pb_int64_t value, clamped;
-    if (!pb_decode_svarint(stream, &value))
-        return false;
-    
-    /* Cast to the proper field size, while checking for overflows */
-    if (field->data_size == sizeof(pb_int64_t))
-        clamped = *(pb_int64_t*)dest = value;
-    else if (field->data_size == sizeof(int32_t))
-        clamped = *(int32_t*)dest = (int32_t)value;
-    else if (field->data_size == sizeof(int_least16_t))
-        clamped = *(int_least16_t*)dest = (int_least16_t)value;
-    else if (field->data_size == sizeof(int_least8_t))
-        clamped = *(int_least8_t*)dest = (int_least8_t)value;
-    else
-        PB_RETURN_ERROR(stream, "invalid data_size");
-
-    if (clamped != value)
-        PB_RETURN_ERROR(stream, "integer too large");
-    
-    return true;
-}
-
-static bool checkreturn pb_dec_fixed32(pb_istream_t *stream, const pb_field_t *field, void *dest)
-{
-    PB_UNUSED(field);
-    return pb_decode_fixed32(stream, dest);
-}
-
-static bool checkreturn pb_dec_fixed64(pb_istream_t *stream, const pb_field_t *field, void *dest)
-{
-    PB_UNUSED(field);
-#ifndef PB_WITHOUT_64BIT
-    return pb_decode_fixed64(stream, dest);
-#else
-    PB_UNUSED(dest);
-    PB_RETURN_ERROR(stream, "no 64bit support");
-#endif
-}
-
-static bool checkreturn pb_dec_bytes(pb_istream_t *stream, const pb_field_t *field, void *dest)
-{
-    uint32_t size;
-    size_t alloc_size;
-    pb_bytes_array_t *bdest;
-    
-    if (!pb_decode_varint32(stream, &size))
-        return false;
-    
-    if (size > PB_SIZE_MAX)
-        PB_RETURN_ERROR(stream, "bytes overflow");
-    
-    alloc_size = PB_BYTES_ARRAY_T_ALLOCSIZE(size);
-    if (size > alloc_size)
-        PB_RETURN_ERROR(stream, "size too large");
-    
-    if (PB_ATYPE(field->type) == PB_ATYPE_POINTER)
-    {
-#ifndef PB_ENABLE_MALLOC
-        PB_RETURN_ERROR(stream, "no malloc support");
-#else
-        if (!allocate_field(stream, dest, alloc_size, 1))
-            return false;
-        bdest = *(pb_bytes_array_t**)dest;
-#endif
-    }
-    else
-    {
-        if (alloc_size > field->data_size)
-            PB_RETURN_ERROR(stream, "bytes overflow");
-        bdest = (pb_bytes_array_t*)dest;
-    }
-
-    bdest->size = (pb_size_t)size;
-    return pb_read(stream, bdest->bytes, size);
-}
-
-static bool checkreturn pb_dec_string(pb_istream_t *stream, const pb_field_t *field, void *dest)
-{
-    uint32_t size;
-    size_t alloc_size;
-    bool status;
-    if (!pb_decode_varint32(stream, &size))
-        return false;
-    
-    /* Space for null terminator */
-    alloc_size = size + 1;
-    
-    if (alloc_size < size)
-        PB_RETURN_ERROR(stream, "size too large");
-    
-    if (PB_ATYPE(field->type) == PB_ATYPE_POINTER)
-    {
-#ifndef PB_ENABLE_MALLOC
-        PB_RETURN_ERROR(stream, "no malloc support");
-#else
-        if (!allocate_field(stream, dest, alloc_size, 1))
-            return false;
-        dest = *(void**)dest;
-#endif
-    }
-    else
-    {
-        if (alloc_size > field->data_size)
-            PB_RETURN_ERROR(stream, "string overflow");
-    }
-    
-    status = pb_read(stream, (pb_byte_t*)dest, size);
-    *((pb_byte_t*)dest + size) = 0;
-    return status;
-}
-
-static bool checkreturn pb_dec_submessage(pb_istream_t *stream, const pb_field_t *field, void *dest)
-{
-    bool status;
-    pb_istream_t substream;
-    const pb_field_t* submsg_fields = (const pb_field_t*)field->ptr;
-    
-    if (!pb_make_string_substream(stream, &substream))
-        return false;
-    
-    if (field->ptr == NULL)
-        PB_RETURN_ERROR(stream, "invalid field descriptor");
-    
-    /* New array entries need to be initialized, while required and optional
-     * submessages have already been initialized in the top-level pb_decode. */
-    if (PB_HTYPE(field->type) == PB_HTYPE_REPEATED)
-        status = pb_decode(&substream, submsg_fields, dest);
-    else
-        status = pb_decode_noinit(&substream, submsg_fields, dest);
-    
-    if (!pb_close_string_substream(stream, &substream))
-        return false;
-    return status;
-}
-
-static bool checkreturn pb_dec_fixed_length_bytes(pb_istream_t *stream, const pb_field_t *field, void *dest)
-{
-    uint32_t size;
-
-    if (!pb_decode_varint32(stream, &size))
-        return false;
-
-    if (size > PB_SIZE_MAX)
-        PB_RETURN_ERROR(stream, "bytes overflow");
-
-    if (size == 0)
-    {
-        /* As a special case, treat empty bytes string as all zeros for fixed_length_bytes. */
-        memset(dest, 0, field->data_size);
-        return true;
-    }
-
-    if (size != field->data_size)
-        PB_RETURN_ERROR(stream, "incorrect fixed length bytes size");
-
-    return pb_read(stream, (pb_byte_t*)dest, field->data_size);
-}
diff --git a/assign5/openTok/Pods/nanopb/pb_decode.h b/assign5/openTok/Pods/nanopb/pb_decode.h
deleted file mode 100644
index 398b24a..0000000
--- a/assign5/openTok/Pods/nanopb/pb_decode.h
+++ /dev/null
@@ -1,175 +0,0 @@
-/* pb_decode.h: Functions to decode protocol buffers. Depends on pb_decode.c.
- * The main function is pb_decode. You also need an input stream, and the
- * field descriptions created by nanopb_generator.py.
- */
-
-#ifndef PB_DECODE_H_INCLUDED
-#define PB_DECODE_H_INCLUDED
-
-#include "pb.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Structure for defining custom input streams. You will need to provide
- * a callback function to read the bytes from your storage, which can be
- * for example a file or a network socket.
- * 
- * The callback must conform to these rules:
- *
- * 1) Return false on IO errors. This will cause decoding to abort.
- * 2) You can use state to store your own data (e.g. buffer pointer),
- *    and rely on pb_read to verify that no-body reads past bytes_left.
- * 3) Your callback may be used with substreams, in which case bytes_left
- *    is different than from the main stream. Don't use bytes_left to compute
- *    any pointers.
- */
-struct pb_istream_s
-{
-#ifdef PB_BUFFER_ONLY
-    /* Callback pointer is not used in buffer-only configuration.
-     * Having an int pointer here allows binary compatibility but
-     * gives an error if someone tries to assign callback function.
-     */
-    int *callback;
-#else
-    bool (*callback)(pb_istream_t *stream, pb_byte_t *buf, size_t count);
-#endif
-
-    void *state; /* Free field for use by callback implementation */
-    size_t bytes_left;
-    
-#ifndef PB_NO_ERRMSG
-    const char *errmsg;
-#endif
-};
-
-/***************************
- * Main decoding functions *
- ***************************/
- 
-/* Decode a single protocol buffers message from input stream into a C structure.
- * Returns true on success, false on any failure.
- * The actual struct pointed to by dest must match the description in fields.
- * Callback fields of the destination structure must be initialized by caller.
- * All other fields will be initialized by this function.
- *
- * Example usage:
- *    MyMessage msg = {};
- *    uint8_t buffer[64];
- *    pb_istream_t stream;
- *    
- *    // ... read some data into buffer ...
- *
- *    stream = pb_istream_from_buffer(buffer, count);
- *    pb_decode(&stream, MyMessage_fields, &msg);
- */
-bool pb_decode(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct);
-
-/* Same as pb_decode, except does not initialize the destination structure
- * to default values. This is slightly faster if you need no default values
- * and just do memset(struct, 0, sizeof(struct)) yourself.
- *
- * This can also be used for 'merging' two messages, i.e. update only the
- * fields that exist in the new message.
- *
- * Note: If this function returns with an error, it will not release any
- * dynamically allocated fields. You will need to call pb_release() yourself.
- */
-bool pb_decode_noinit(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct);
-
-/* Same as pb_decode, except expects the stream to start with the message size
- * encoded as varint. Corresponds to parseDelimitedFrom() in Google's
- * protobuf API.
- */
-bool pb_decode_delimited(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct);
-
-/* Same as pb_decode_delimited, except that it does not initialize the destination structure.
- * See pb_decode_noinit
- */
-bool pb_decode_delimited_noinit(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct);
-
-/* Same as pb_decode, except allows the message to be terminated with a null byte.
- * NOTE: Until nanopb-0.4.0, pb_decode() also allows null-termination. This behaviour
- * is not supported in most other protobuf implementations, so pb_decode_delimited()
- * is a better option for compatibility.
- */
-bool pb_decode_nullterminated(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct);
-
-#ifdef PB_ENABLE_MALLOC
-/* Release any allocated pointer fields. If you use dynamic allocation, you should
- * call this for any successfully decoded message when you are done with it. If
- * pb_decode() returns with an error, the message is already released.
- */
-void pb_release(const pb_field_t fields[], void *dest_struct);
-#endif
-
-
-/**************************************
- * Functions for manipulating streams *
- **************************************/
-
-/* Create an input stream for reading from a memory buffer.
- *
- * Alternatively, you can use a custom stream that reads directly from e.g.
- * a file or a network socket.
- */
-pb_istream_t pb_istream_from_buffer(const pb_byte_t *buf, size_t bufsize);
-
-/* Function to read from a pb_istream_t. You can use this if you need to
- * read some custom header data, or to read data in field callbacks.
- */
-bool pb_read(pb_istream_t *stream, pb_byte_t *buf, size_t count);
-
-
-/************************************************
- * Helper functions for writing field callbacks *
- ************************************************/
-
-/* Decode the tag for the next field in the stream. Gives the wire type and
- * field tag. At end of the message, returns false and sets eof to true. */
-bool pb_decode_tag(pb_istream_t *stream, pb_wire_type_t *wire_type, uint32_t *tag, bool *eof);
-
-/* Skip the field payload data, given the wire type. */
-bool pb_skip_field(pb_istream_t *stream, pb_wire_type_t wire_type);
-
-/* Decode an integer in the varint format. This works for bool, enum, int32,
- * int64, uint32 and uint64 field types. */
-#ifndef PB_WITHOUT_64BIT
-bool pb_decode_varint(pb_istream_t *stream, uint64_t *dest);
-#else
-#define pb_decode_varint pb_decode_varint32
-#endif
-
-/* Decode an integer in the varint format. This works for bool, enum, int32,
- * and uint32 field types. */
-bool pb_decode_varint32(pb_istream_t *stream, uint32_t *dest);
-
-/* Decode an integer in the zig-zagged svarint format. This works for sint32
- * and sint64. */
-#ifndef PB_WITHOUT_64BIT
-bool pb_decode_svarint(pb_istream_t *stream, int64_t *dest);
-#else
-bool pb_decode_svarint(pb_istream_t *stream, int32_t *dest);
-#endif
-
-/* Decode a fixed32, sfixed32 or float value. You need to pass a pointer to
- * a 4-byte wide C variable. */
-bool pb_decode_fixed32(pb_istream_t *stream, void *dest);
-
-#ifndef PB_WITHOUT_64BIT
-/* Decode a fixed64, sfixed64 or double value. You need to pass a pointer to
- * a 8-byte wide C variable. */
-bool pb_decode_fixed64(pb_istream_t *stream, void *dest);
-#endif
-
-/* Make a limited-length substream for reading a PB_WT_STRING field. */
-bool pb_make_string_substream(pb_istream_t *stream, pb_istream_t *substream);
-bool pb_close_string_substream(pb_istream_t *stream, pb_istream_t *substream);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif
diff --git a/assign5/openTok/Pods/nanopb/pb_encode.c b/assign5/openTok/Pods/nanopb/pb_encode.c
deleted file mode 100644
index 089172c..0000000
--- a/assign5/openTok/Pods/nanopb/pb_encode.c
+++ /dev/null
@@ -1,869 +0,0 @@
-/* pb_encode.c -- encode a protobuf using minimal resources
- *
- * 2011 Petteri Aimonen <jpa@kapsi.fi>
- */
-
-#include "pb.h"
-#include "pb_encode.h"
-#include "pb_common.h"
-
-/* Use the GCC warn_unused_result attribute to check that all return values
- * are propagated correctly. On other compilers and gcc before 3.4.0 just
- * ignore the annotation.
- */
-#if !defined(__GNUC__) || ( __GNUC__ < 3) || (__GNUC__ == 3 && __GNUC_MINOR__ < 4)
-    #define checkreturn
-#else
-    #define checkreturn __attribute__((warn_unused_result))
-#endif
-
-/**************************************
- * Declarations internal to this file *
- **************************************/
-typedef bool (*pb_encoder_t)(pb_ostream_t *stream, const pb_field_t *field, const void *src) checkreturn;
-
-static bool checkreturn buf_write(pb_ostream_t *stream, const pb_byte_t *buf, size_t count);
-static bool checkreturn encode_array(pb_ostream_t *stream, const pb_field_t *field, const void *pData, size_t count, pb_encoder_t func);
-static bool checkreturn encode_field(pb_ostream_t *stream, const pb_field_t *field, const void *pData);
-static bool checkreturn default_extension_encoder(pb_ostream_t *stream, const pb_extension_t *extension);
-static bool checkreturn encode_extension_field(pb_ostream_t *stream, const pb_field_t *field, const void *pData);
-static void *pb_const_cast(const void *p);
-static bool checkreturn pb_enc_varint(pb_ostream_t *stream, const pb_field_t *field, const void *src);
-static bool checkreturn pb_enc_uvarint(pb_ostream_t *stream, const pb_field_t *field, const void *src);
-static bool checkreturn pb_enc_svarint(pb_ostream_t *stream, const pb_field_t *field, const void *src);
-static bool checkreturn pb_enc_fixed32(pb_ostream_t *stream, const pb_field_t *field, const void *src);
-static bool checkreturn pb_enc_fixed64(pb_ostream_t *stream, const pb_field_t *field, const void *src);
-static bool checkreturn pb_enc_bytes(pb_ostream_t *stream, const pb_field_t *field, const void *src);
-static bool checkreturn pb_enc_string(pb_ostream_t *stream, const pb_field_t *field, const void *src);
-static bool checkreturn pb_enc_submessage(pb_ostream_t *stream, const pb_field_t *field, const void *src);
-static bool checkreturn pb_enc_fixed_length_bytes(pb_ostream_t *stream, const pb_field_t *field, const void *src);
-
-#ifdef PB_WITHOUT_64BIT
-#define pb_int64_t int32_t
-#define pb_uint64_t uint32_t
-
-static bool checkreturn pb_encode_negative_varint(pb_ostream_t *stream, pb_uint64_t value);
-#else
-#define pb_int64_t int64_t
-#define pb_uint64_t uint64_t
-#endif
-
-/* --- Function pointers to field encoders ---
- * Order in the array must match pb_action_t LTYPE numbering.
- */
-static const pb_encoder_t PB_ENCODERS[PB_LTYPES_COUNT] = {
-    &pb_enc_varint,
-    &pb_enc_uvarint,
-    &pb_enc_svarint,
-    &pb_enc_fixed32,
-    &pb_enc_fixed64,
-    
-    &pb_enc_bytes,
-    &pb_enc_string,
-    &pb_enc_submessage,
-    NULL, /* extensions */
-    &pb_enc_fixed_length_bytes
-};
-
-/*******************************
- * pb_ostream_t implementation *
- *******************************/
-
-static bool checkreturn buf_write(pb_ostream_t *stream, const pb_byte_t *buf, size_t count)
-{
-    size_t i;
-    pb_byte_t *dest = (pb_byte_t*)stream->state;
-    stream->state = dest + count;
-    
-    for (i = 0; i < count; i++)
-        dest[i] = buf[i];
-    
-    return true;
-}
-
-pb_ostream_t pb_ostream_from_buffer(pb_byte_t *buf, size_t bufsize)
-{
-    pb_ostream_t stream;
-#ifdef PB_BUFFER_ONLY
-    stream.callback = (void*)1; /* Just a marker value */
-#else
-    stream.callback = &buf_write;
-#endif
-    stream.state = buf;
-    stream.max_size = bufsize;
-    stream.bytes_written = 0;
-#ifndef PB_NO_ERRMSG
-    stream.errmsg = NULL;
-#endif
-    return stream;
-}
-
-bool checkreturn pb_write(pb_ostream_t *stream, const pb_byte_t *buf, size_t count)
-{
-    if (stream->callback != NULL)
-    {
-        if (stream->bytes_written + count > stream->max_size)
-            PB_RETURN_ERROR(stream, "stream full");
-
-#ifdef PB_BUFFER_ONLY
-        if (!buf_write(stream, buf, count))
-            PB_RETURN_ERROR(stream, "io error");
-#else        
-        if (!stream->callback(stream, buf, count))
-            PB_RETURN_ERROR(stream, "io error");
-#endif
-    }
-    
-    stream->bytes_written += count;
-    return true;
-}
-
-/*************************
- * Encode a single field *
- *************************/
-
-/* Encode a static array. Handles the size calculations and possible packing. */
-static bool checkreturn encode_array(pb_ostream_t *stream, const pb_field_t *field,
-                         const void *pData, size_t count, pb_encoder_t func)
-{
-    size_t i;
-    const void *p;
-    size_t size;
-    
-    if (count == 0)
-        return true;
-
-    if (PB_ATYPE(field->type) != PB_ATYPE_POINTER && count > field->array_size)
-        PB_RETURN_ERROR(stream, "array max size exceeded");
-    
-    /* We always pack arrays if the datatype allows it. */
-    if (PB_LTYPE(field->type) <= PB_LTYPE_LAST_PACKABLE)
-    {
-        if (!pb_encode_tag(stream, PB_WT_STRING, field->tag))
-            return false;
-        
-        /* Determine the total size of packed array. */
-        if (PB_LTYPE(field->type) == PB_LTYPE_FIXED32)
-        {
-            size = 4 * count;
-        }
-        else if (PB_LTYPE(field->type) == PB_LTYPE_FIXED64)
-        {
-            size = 8 * count;
-        }
-        else
-        { 
-            pb_ostream_t sizestream = PB_OSTREAM_SIZING;
-            p = pData;
-            for (i = 0; i < count; i++)
-            {
-                if (!func(&sizestream, field, p))
-                    return false;
-                p = (const char*)p + field->data_size;
-            }
-            size = sizestream.bytes_written;
-        }
-        
-        if (!pb_encode_varint(stream, (pb_uint64_t)size))
-            return false;
-        
-        if (stream->callback == NULL)
-            return pb_write(stream, NULL, size); /* Just sizing.. */
-        
-        /* Write the data */
-        p = pData;
-        for (i = 0; i < count; i++)
-        {
-            if (!func(stream, field, p))
-                return false;
-            p = (const char*)p + field->data_size;
-        }
-    }
-    else
-    {
-        p = pData;
-        for (i = 0; i < count; i++)
-        {
-            if (!pb_encode_tag_for_field(stream, field))
-                return false;
-
-            /* Normally the data is stored directly in the array entries, but
-             * for pointer-type string and bytes fields, the array entries are
-             * actually pointers themselves also. So we have to dereference once
-             * more to get to the actual data. */
-            if (PB_ATYPE(field->type) == PB_ATYPE_POINTER &&
-                (PB_LTYPE(field->type) == PB_LTYPE_STRING ||
-                 PB_LTYPE(field->type) == PB_LTYPE_BYTES))
-            {
-                if (!func(stream, field, *(const void* const*)p))
-                    return false;
-            }
-            else
-            {
-                if (!func(stream, field, p))
-                    return false;
-            }
-            p = (const char*)p + field->data_size;
-        }
-    }
-    
-    return true;
-}
-
-/* In proto3, all fields are optional and are only encoded if their value is "non-zero".
- * This function implements the check for the zero value. */
-static bool pb_check_proto3_default_value(const pb_field_t *field, const void *pData)
-{
-    pb_type_t type = field->type;
-    const void *pSize = (const char*)pData + field->size_offset;
-
-    if (PB_HTYPE(type) == PB_HTYPE_REQUIRED)
-    {
-        /* Required proto2 fields inside proto3 submessage, pretty rare case */
-        return false;
-    }
-    else if (PB_HTYPE(type) == PB_HTYPE_REPEATED)
-    {
-        /* Repeated fields inside proto3 submessage: present if count != 0 */
-        return *(const pb_size_t*)pSize == 0;
-    }
-    else if (PB_HTYPE(type) == PB_HTYPE_ONEOF)
-    {
-        /* Oneof fields */
-        return *(const pb_size_t*)pSize == 0;
-    }
-    else if (PB_HTYPE(type) == PB_HTYPE_OPTIONAL && field->size_offset)
-    {
-        /* Proto2 optional fields inside proto3 submessage */
-        return *(const bool*)pSize == false;
-    }
-
-    /* Rest is proto3 singular fields */
-
-    if (PB_ATYPE(type) == PB_ATYPE_STATIC)
-    {
-        if (PB_LTYPE(type) == PB_LTYPE_BYTES)
-        {
-            const pb_bytes_array_t *bytes = (const pb_bytes_array_t*)pData;
-            return bytes->size == 0;
-        }
-        else if (PB_LTYPE(type) == PB_LTYPE_STRING)
-        {
-            return *(const char*)pData == '\0';
-        }
-        else if (PB_LTYPE(type) == PB_LTYPE_FIXED_LENGTH_BYTES)
-        {
-            /* Fixed length bytes is only empty if its length is fixed
-             * as 0. Which would be pretty strange, but we can check
-             * it anyway. */
-            return field->data_size == 0;
-        }
-        else if (PB_LTYPE(type) == PB_LTYPE_SUBMESSAGE)
-        {
-            /* Check all fields in the submessage to find if any of them
-             * are non-zero. The comparison cannot be done byte-per-byte
-             * because the C struct may contain padding bytes that must
-             * be skipped.
-             */
-            pb_field_iter_t iter;
-            if (pb_field_iter_begin(&iter, (const pb_field_t*)field->ptr, pb_const_cast(pData)))
-            {
-                do
-                {
-                    if (!pb_check_proto3_default_value(iter.pos, iter.pData))
-                    {
-                        return false;
-                    }
-                } while (pb_field_iter_next(&iter));
-            }
-            return true;
-        }
-    }
-    
-	{
-	    /* Catch-all branch that does byte-per-byte comparison for zero value.
-	     *
-	     * This is for all pointer fields, and for static PB_LTYPE_VARINT,
-	     * UVARINT, SVARINT, FIXED32, FIXED64, EXTENSION fields, and also
-	     * callback fields. These all have integer or pointer value which
-	     * can be compared with 0.
-	     */
-	    pb_size_t i;
-	    const char *p = (const char*)pData;
-	    for (i = 0; i < field->data_size; i++)
-	    {
-	        if (p[i] != 0)
-	        {
-	            return false;
-	        }
-	    }
-
-	    return true;
-	}
-}
-
-/* Encode a field with static or pointer allocation, i.e. one whose data
- * is available to the encoder directly. */
-static bool checkreturn encode_basic_field(pb_ostream_t *stream,
-    const pb_field_t *field, const void *pData)
-{
-    pb_encoder_t func;
-    bool implicit_has;
-    const void *pSize = &implicit_has;
-    
-    func = PB_ENCODERS[PB_LTYPE(field->type)];
-    
-    if (field->size_offset)
-    {
-        /* Static optional, repeated or oneof field */
-        pSize = (const char*)pData + field->size_offset;
-    }
-    else if (PB_HTYPE(field->type) == PB_HTYPE_OPTIONAL)
-    {
-        /* Proto3 style field, optional but without explicit has_ field. */
-        implicit_has = !pb_check_proto3_default_value(field, pData);
-    }
-    else
-    {
-        /* Required field, always present */
-        implicit_has = true;
-    }
-
-    if (PB_ATYPE(field->type) == PB_ATYPE_POINTER)
-    {
-        /* pData is a pointer to the field, which contains pointer to
-         * the data. If the 2nd pointer is NULL, it is interpreted as if
-         * the has_field was false.
-         */
-        pData = *(const void* const*)pData;
-        implicit_has = (pData != NULL);
-    }
-
-    switch (PB_HTYPE(field->type))
-    {
-        case PB_HTYPE_REQUIRED:
-            if (!pData)
-                PB_RETURN_ERROR(stream, "missing required field");
-            if (!pb_encode_tag_for_field(stream, field))
-                return false;
-            if (!func(stream, field, pData))
-                return false;
-            break;
-        
-        case PB_HTYPE_OPTIONAL:
-            if (*(const bool*)pSize)
-            {
-                if (!pb_encode_tag_for_field(stream, field))
-                    return false;
-            
-                if (!func(stream, field, pData))
-                    return false;
-            }
-            break;
-        
-        case PB_HTYPE_REPEATED: {
-            pb_size_t count;
-            if (field->size_offset != 0) {
-                count = *(const pb_size_t*)pSize;
-            } else {
-                count = field->array_size;
-            }
-            if (!encode_array(stream, field, pData, count, func))
-                return false;
-            break;
-        }
-        
-        case PB_HTYPE_ONEOF:
-            if (*(const pb_size_t*)pSize == field->tag)
-            {
-                if (!pb_encode_tag_for_field(stream, field))
-                    return false;
-
-                if (!func(stream, field, pData))
-                    return false;
-            }
-            break;
-            
-        default:
-            PB_RETURN_ERROR(stream, "invalid field type");
-    }
-    
-    return true;
-}
-
-/* Encode a field with callback semantics. This means that a user function is
- * called to provide and encode the actual data. */
-static bool checkreturn encode_callback_field(pb_ostream_t *stream,
-    const pb_field_t *field, const void *pData)
-{
-    const pb_callback_t *callback = (const pb_callback_t*)pData;
-    
-#ifdef PB_OLD_CALLBACK_STYLE
-    const void *arg = callback->arg;
-#else
-    void * const *arg = &(callback->arg);
-#endif    
-    
-    if (callback->funcs.encode != NULL)
-    {
-        if (!callback->funcs.encode(stream, field, arg))
-            PB_RETURN_ERROR(stream, "callback error");
-    }
-    return true;
-}
-
-/* Encode a single field of any callback or static type. */
-static bool checkreturn encode_field(pb_ostream_t *stream,
-    const pb_field_t *field, const void *pData)
-{
-    switch (PB_ATYPE(field->type))
-    {
-        case PB_ATYPE_STATIC:
-        case PB_ATYPE_POINTER:
-            return encode_basic_field(stream, field, pData);
-        
-        case PB_ATYPE_CALLBACK:
-            return encode_callback_field(stream, field, pData);
-        
-        default:
-            PB_RETURN_ERROR(stream, "invalid field type");
-    }
-}
-
-/* Default handler for extension fields. Expects to have a pb_field_t
- * pointer in the extension->type->arg field. */
-static bool checkreturn default_extension_encoder(pb_ostream_t *stream,
-    const pb_extension_t *extension)
-{
-    const pb_field_t *field = (const pb_field_t*)extension->type->arg;
-    
-    if (PB_ATYPE(field->type) == PB_ATYPE_POINTER)
-    {
-        /* For pointer extensions, the pointer is stored directly
-         * in the extension structure. This avoids having an extra
-         * indirection. */
-        return encode_field(stream, field, &extension->dest);
-    }
-    else
-    {
-        return encode_field(stream, field, extension->dest);
-    }
-}
-
-/* Walk through all the registered extensions and give them a chance
- * to encode themselves. */
-static bool checkreturn encode_extension_field(pb_ostream_t *stream,
-    const pb_field_t *field, const void *pData)
-{
-    const pb_extension_t *extension = *(const pb_extension_t* const *)pData;
-    PB_UNUSED(field);
-    
-    while (extension)
-    {
-        bool status;
-        if (extension->type->encode)
-            status = extension->type->encode(stream, extension);
-        else
-            status = default_extension_encoder(stream, extension);
-
-        if (!status)
-            return false;
-        
-        extension = extension->next;
-    }
-    
-    return true;
-}
-
-/*********************
- * Encode all fields *
- *********************/
-
-static void *pb_const_cast(const void *p)
-{
-    /* Note: this casts away const, in order to use the common field iterator
-     * logic for both encoding and decoding. */
-    union {
-        void *p1;
-        const void *p2;
-    } t;
-    t.p2 = p;
-    return t.p1;
-}
-
-bool checkreturn pb_encode(pb_ostream_t *stream, const pb_field_t fields[], const void *src_struct)
-{
-    pb_field_iter_t iter;
-    if (!pb_field_iter_begin(&iter, fields, pb_const_cast(src_struct)))
-        return true; /* Empty message type */
-    
-    do {
-        if (PB_LTYPE(iter.pos->type) == PB_LTYPE_EXTENSION)
-        {
-            /* Special case for the extension field placeholder */
-            if (!encode_extension_field(stream, iter.pos, iter.pData))
-                return false;
-        }
-        else
-        {
-            /* Regular field */
-            if (!encode_field(stream, iter.pos, iter.pData))
-                return false;
-        }
-    } while (pb_field_iter_next(&iter));
-    
-    return true;
-}
-
-bool pb_encode_delimited(pb_ostream_t *stream, const pb_field_t fields[], const void *src_struct)
-{
-    return pb_encode_submessage(stream, fields, src_struct);
-}
-
-bool pb_encode_nullterminated(pb_ostream_t *stream, const pb_field_t fields[], const void *src_struct)
-{
-    const pb_byte_t zero = 0;
-
-    if (!pb_encode(stream, fields, src_struct))
-        return false;
-
-    return pb_write(stream, &zero, 1);
-}
-
-bool pb_get_encoded_size(size_t *size, const pb_field_t fields[], const void *src_struct)
-{
-    pb_ostream_t stream = PB_OSTREAM_SIZING;
-    
-    if (!pb_encode(&stream, fields, src_struct))
-        return false;
-    
-    *size = stream.bytes_written;
-    return true;
-}
-
-/********************
- * Helper functions *
- ********************/
-
-#ifdef PB_WITHOUT_64BIT
-bool checkreturn pb_encode_negative_varint(pb_ostream_t *stream, pb_uint64_t value)
-{
-  pb_byte_t buffer[10];
-  size_t i = 0;
-  size_t compensation = 32;/* we need to compensate 32 bits all set to 1 */
-
-  while (value)
-  {
-    buffer[i] = (pb_byte_t)((value & 0x7F) | 0x80);
-    value >>= 7;
-    if (compensation)
-    {
-      /* re-set all the compensation bits we can or need */
-      size_t bits = compensation > 7 ? 7 : compensation;
-      value ^= (pb_uint64_t)((0xFFu >> (8 - bits)) << 25); /* set the number of bits needed on the lowest of the most significant 7 bits */
-      compensation -= bits;
-    }
-    i++;
-  }
-  buffer[i - 1] &= 0x7F; /* Unset top bit on last byte */
-
-  return pb_write(stream, buffer, i);
-}
-#endif
-
-bool checkreturn pb_encode_varint(pb_ostream_t *stream, pb_uint64_t value)
-{
-    pb_byte_t buffer[10];
-    size_t i = 0;
-    
-    if (value <= 0x7F)
-    {
-        pb_byte_t v = (pb_byte_t)value;
-        return pb_write(stream, &v, 1);
-    }
-    
-    while (value)
-    {
-        buffer[i] = (pb_byte_t)((value & 0x7F) | 0x80);
-        value >>= 7;
-        i++;
-    }
-    buffer[i-1] &= 0x7F; /* Unset top bit on last byte */
-    
-    return pb_write(stream, buffer, i);
-}
-
-bool checkreturn pb_encode_svarint(pb_ostream_t *stream, pb_int64_t value)
-{
-    pb_uint64_t zigzagged;
-    if (value < 0)
-        zigzagged = ~((pb_uint64_t)value << 1);
-    else
-        zigzagged = (pb_uint64_t)value << 1;
-    
-    return pb_encode_varint(stream, zigzagged);
-}
-
-bool checkreturn pb_encode_fixed32(pb_ostream_t *stream, const void *value)
-{
-    uint32_t val = *(const uint32_t*)value;
-    pb_byte_t bytes[4];
-    bytes[0] = (pb_byte_t)(val & 0xFF);
-    bytes[1] = (pb_byte_t)((val >> 8) & 0xFF);
-    bytes[2] = (pb_byte_t)((val >> 16) & 0xFF);
-    bytes[3] = (pb_byte_t)((val >> 24) & 0xFF);
-    return pb_write(stream, bytes, 4);
-}
-
-#ifndef PB_WITHOUT_64BIT
-bool checkreturn pb_encode_fixed64(pb_ostream_t *stream, const void *value)
-{
-    uint64_t val = *(const uint64_t*)value;
-    pb_byte_t bytes[8];
-    bytes[0] = (pb_byte_t)(val & 0xFF);
-    bytes[1] = (pb_byte_t)((val >> 8) & 0xFF);
-    bytes[2] = (pb_byte_t)((val >> 16) & 0xFF);
-    bytes[3] = (pb_byte_t)((val >> 24) & 0xFF);
-    bytes[4] = (pb_byte_t)((val >> 32) & 0xFF);
-    bytes[5] = (pb_byte_t)((val >> 40) & 0xFF);
-    bytes[6] = (pb_byte_t)((val >> 48) & 0xFF);
-    bytes[7] = (pb_byte_t)((val >> 56) & 0xFF);
-    return pb_write(stream, bytes, 8);
-}
-#endif
-
-bool checkreturn pb_encode_tag(pb_ostream_t *stream, pb_wire_type_t wiretype, uint32_t field_number)
-{
-    pb_uint64_t tag = ((pb_uint64_t)field_number << 3) | wiretype;
-    return pb_encode_varint(stream, tag);
-}
-
-bool checkreturn pb_encode_tag_for_field(pb_ostream_t *stream, const pb_field_t *field)
-{
-    pb_wire_type_t wiretype;
-    switch (PB_LTYPE(field->type))
-    {
-        case PB_LTYPE_VARINT:
-        case PB_LTYPE_UVARINT:
-        case PB_LTYPE_SVARINT:
-            wiretype = PB_WT_VARINT;
-            break;
-        
-        case PB_LTYPE_FIXED32:
-            wiretype = PB_WT_32BIT;
-            break;
-        
-        case PB_LTYPE_FIXED64:
-            wiretype = PB_WT_64BIT;
-            break;
-        
-        case PB_LTYPE_BYTES:
-        case PB_LTYPE_STRING:
-        case PB_LTYPE_SUBMESSAGE:
-        case PB_LTYPE_FIXED_LENGTH_BYTES:
-            wiretype = PB_WT_STRING;
-            break;
-        
-        default:
-            PB_RETURN_ERROR(stream, "invalid field type");
-    }
-    
-    return pb_encode_tag(stream, wiretype, field->tag);
-}
-
-bool checkreturn pb_encode_string(pb_ostream_t *stream, const pb_byte_t *buffer, size_t size)
-{
-    if (!pb_encode_varint(stream, (pb_uint64_t)size))
-        return false;
-    
-    return pb_write(stream, buffer, size);
-}
-
-bool checkreturn pb_encode_submessage(pb_ostream_t *stream, const pb_field_t fields[], const void *src_struct)
-{
-    /* First calculate the message size using a non-writing substream. */
-    pb_ostream_t substream = PB_OSTREAM_SIZING;
-    size_t size;
-    bool status;
-    
-    if (!pb_encode(&substream, fields, src_struct))
-    {
-#ifndef PB_NO_ERRMSG
-        stream->errmsg = substream.errmsg;
-#endif
-        return false;
-    }
-    
-    size = substream.bytes_written;
-    
-    if (!pb_encode_varint(stream, (pb_uint64_t)size))
-        return false;
-    
-    if (stream->callback == NULL)
-        return pb_write(stream, NULL, size); /* Just sizing */
-    
-    if (stream->bytes_written + size > stream->max_size)
-        PB_RETURN_ERROR(stream, "stream full");
-        
-    /* Use a substream to verify that a callback doesn't write more than
-     * what it did the first time. */
-    substream.callback = stream->callback;
-    substream.state = stream->state;
-    substream.max_size = size;
-    substream.bytes_written = 0;
-#ifndef PB_NO_ERRMSG
-    substream.errmsg = NULL;
-#endif
-    
-    status = pb_encode(&substream, fields, src_struct);
-    
-    stream->bytes_written += substream.bytes_written;
-    stream->state = substream.state;
-#ifndef PB_NO_ERRMSG
-    stream->errmsg = substream.errmsg;
-#endif
-    
-    if (substream.bytes_written != size)
-        PB_RETURN_ERROR(stream, "submsg size changed");
-    
-    return status;
-}
-
-/* Field encoders */
-
-static bool checkreturn pb_enc_varint(pb_ostream_t *stream, const pb_field_t *field, const void *src)
-{
-    pb_int64_t value = 0;
-    
-    if (field->data_size == sizeof(int_least8_t))
-        value = *(const int_least8_t*)src;
-    else if (field->data_size == sizeof(int_least16_t))
-        value = *(const int_least16_t*)src;
-    else if (field->data_size == sizeof(int32_t))
-        value = *(const int32_t*)src;
-    else if (field->data_size == sizeof(pb_int64_t))
-        value = *(const pb_int64_t*)src;
-    else
-        PB_RETURN_ERROR(stream, "invalid data_size");
-    
-#ifdef PB_WITHOUT_64BIT
-    if (value < 0)
-      return pb_encode_negative_varint(stream, (pb_uint64_t)value);
-    else
-#endif
-      return pb_encode_varint(stream, (pb_uint64_t)value);
-}
-
-static bool checkreturn pb_enc_uvarint(pb_ostream_t *stream, const pb_field_t *field, const void *src)
-{
-    pb_uint64_t value = 0;
-    
-    if (field->data_size == sizeof(uint_least8_t))
-        value = *(const uint_least8_t*)src;
-    else if (field->data_size == sizeof(uint_least16_t))
-        value = *(const uint_least16_t*)src;
-    else if (field->data_size == sizeof(uint32_t))
-        value = *(const uint32_t*)src;
-    else if (field->data_size == sizeof(pb_uint64_t))
-        value = *(const pb_uint64_t*)src;
-    else
-        PB_RETURN_ERROR(stream, "invalid data_size");
-    
-    return pb_encode_varint(stream, value);
-}
-
-static bool checkreturn pb_enc_svarint(pb_ostream_t *stream, const pb_field_t *field, const void *src)
-{
-    pb_int64_t value = 0;
-    
-    if (field->data_size == sizeof(int_least8_t))
-        value = *(const int_least8_t*)src;
-    else if (field->data_size == sizeof(int_least16_t))
-        value = *(const int_least16_t*)src;
-    else if (field->data_size == sizeof(int32_t))
-        value = *(const int32_t*)src;
-    else if (field->data_size == sizeof(pb_int64_t))
-        value = *(const pb_int64_t*)src;
-    else
-        PB_RETURN_ERROR(stream, "invalid data_size");
-    
-    return pb_encode_svarint(stream, value);
-}
-
-static bool checkreturn pb_enc_fixed64(pb_ostream_t *stream, const pb_field_t *field, const void *src)
-{
-    PB_UNUSED(field);
-#ifndef PB_WITHOUT_64BIT
-    return pb_encode_fixed64(stream, src);
-#else
-    PB_UNUSED(src);
-    PB_RETURN_ERROR(stream, "no 64bit support");
-#endif
-}
-
-static bool checkreturn pb_enc_fixed32(pb_ostream_t *stream, const pb_field_t *field, const void *src)
-{
-    PB_UNUSED(field);
-    return pb_encode_fixed32(stream, src);
-}
-
-static bool checkreturn pb_enc_bytes(pb_ostream_t *stream, const pb_field_t *field, const void *src)
-{
-    const pb_bytes_array_t *bytes = NULL;
-
-    bytes = (const pb_bytes_array_t*)src;
-    
-    if (src == NULL)
-    {
-        /* Treat null pointer as an empty bytes field */
-        return pb_encode_string(stream, NULL, 0);
-    }
-    
-    if (PB_ATYPE(field->type) == PB_ATYPE_STATIC &&
-        PB_BYTES_ARRAY_T_ALLOCSIZE(bytes->size) > field->data_size)
-    {
-        PB_RETURN_ERROR(stream, "bytes size exceeded");
-    }
-    
-    return pb_encode_string(stream, bytes->bytes, bytes->size);
-}
-
-static bool checkreturn pb_enc_string(pb_ostream_t *stream, const pb_field_t *field, const void *src)
-{
-    size_t size = 0;
-    size_t max_size = field->data_size;
-    const char *p = (const char*)src;
-    
-    if (PB_ATYPE(field->type) == PB_ATYPE_POINTER)
-        max_size = (size_t)-1;
-
-    if (src == NULL)
-    {
-        size = 0; /* Treat null pointer as an empty string */
-    }
-    else
-    {
-        /* strnlen() is not always available, so just use a loop */
-        while (size < max_size && *p != '\0')
-        {
-            size++;
-            p++;
-        }
-    }
-
-    return pb_encode_string(stream, (const pb_byte_t*)src, size);
-}
-
-static bool checkreturn pb_enc_submessage(pb_ostream_t *stream, const pb_field_t *field, const void *src)
-{
-    if (field->ptr == NULL)
-        PB_RETURN_ERROR(stream, "invalid field descriptor");
-    
-    return pb_encode_submessage(stream, (const pb_field_t*)field->ptr, src);
-}
-
-static bool checkreturn pb_enc_fixed_length_bytes(pb_ostream_t *stream, const pb_field_t *field, const void *src)
-{
-    return pb_encode_string(stream, (const pb_byte_t*)src, field->data_size);
-}
-
diff --git a/assign5/openTok/Pods/nanopb/pb_encode.h b/assign5/openTok/Pods/nanopb/pb_encode.h
deleted file mode 100644
index 8bf78dd..0000000
--- a/assign5/openTok/Pods/nanopb/pb_encode.h
+++ /dev/null
@@ -1,170 +0,0 @@
-/* pb_encode.h: Functions to encode protocol buffers. Depends on pb_encode.c.
- * The main function is pb_encode. You also need an output stream, and the
- * field descriptions created by nanopb_generator.py.
- */
-
-#ifndef PB_ENCODE_H_INCLUDED
-#define PB_ENCODE_H_INCLUDED
-
-#include "pb.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Structure for defining custom output streams. You will need to provide
- * a callback function to write the bytes to your storage, which can be
- * for example a file or a network socket.
- *
- * The callback must conform to these rules:
- *
- * 1) Return false on IO errors. This will cause encoding to abort.
- * 2) You can use state to store your own data (e.g. buffer pointer).
- * 3) pb_write will update bytes_written after your callback runs.
- * 4) Substreams will modify max_size and bytes_written. Don't use them
- *    to calculate any pointers.
- */
-struct pb_ostream_s
-{
-#ifdef PB_BUFFER_ONLY
-    /* Callback pointer is not used in buffer-only configuration.
-     * Having an int pointer here allows binary compatibility but
-     * gives an error if someone tries to assign callback function.
-     * Also, NULL pointer marks a 'sizing stream' that does not
-     * write anything.
-     */
-    int *callback;
-#else
-    bool (*callback)(pb_ostream_t *stream, const pb_byte_t *buf, size_t count);
-#endif
-    void *state;          /* Free field for use by callback implementation. */
-    size_t max_size;      /* Limit number of output bytes written (or use SIZE_MAX). */
-    size_t bytes_written; /* Number of bytes written so far. */
-    
-#ifndef PB_NO_ERRMSG
-    const char *errmsg;
-#endif
-};
-
-/***************************
- * Main encoding functions *
- ***************************/
-
-/* Encode a single protocol buffers message from C structure into a stream.
- * Returns true on success, false on any failure.
- * The actual struct pointed to by src_struct must match the description in fields.
- * All required fields in the struct are assumed to have been filled in.
- *
- * Example usage:
- *    MyMessage msg = {};
- *    uint8_t buffer[64];
- *    pb_ostream_t stream;
- *
- *    msg.field1 = 42;
- *    stream = pb_ostream_from_buffer(buffer, sizeof(buffer));
- *    pb_encode(&stream, MyMessage_fields, &msg);
- */
-bool pb_encode(pb_ostream_t *stream, const pb_field_t fields[], const void *src_struct);
-
-/* Same as pb_encode, but prepends the length of the message as a varint.
- * Corresponds to writeDelimitedTo() in Google's protobuf API.
- */
-bool pb_encode_delimited(pb_ostream_t *stream, const pb_field_t fields[], const void *src_struct);
-
-/* Same as pb_encode, but appends a null byte to the message for termination.
- * NOTE: This behaviour is not supported in most other protobuf implementations, so pb_encode_delimited()
- * is a better option for compatibility.
- */
-bool pb_encode_nullterminated(pb_ostream_t *stream, const pb_field_t fields[], const void *src_struct);
-
-/* Encode the message to get the size of the encoded data, but do not store
- * the data. */
-bool pb_get_encoded_size(size_t *size, const pb_field_t fields[], const void *src_struct);
-
-/**************************************
- * Functions for manipulating streams *
- **************************************/
-
-/* Create an output stream for writing into a memory buffer.
- * The number of bytes written can be found in stream.bytes_written after
- * encoding the message.
- *
- * Alternatively, you can use a custom stream that writes directly to e.g.
- * a file or a network socket.
- */
-pb_ostream_t pb_ostream_from_buffer(pb_byte_t *buf, size_t bufsize);
-
-/* Pseudo-stream for measuring the size of a message without actually storing
- * the encoded data.
- * 
- * Example usage:
- *    MyMessage msg = {};
- *    pb_ostream_t stream = PB_OSTREAM_SIZING;
- *    pb_encode(&stream, MyMessage_fields, &msg);
- *    printf("Message size is %d\n", stream.bytes_written);
- */
-#ifndef PB_NO_ERRMSG
-#define PB_OSTREAM_SIZING {0,0,0,0,0}
-#else
-#define PB_OSTREAM_SIZING {0,0,0,0}
-#endif
-
-/* Function to write into a pb_ostream_t stream. You can use this if you need
- * to append or prepend some custom headers to the message.
- */
-bool pb_write(pb_ostream_t *stream, const pb_byte_t *buf, size_t count);
-
-
-/************************************************
- * Helper functions for writing field callbacks *
- ************************************************/
-
-/* Encode field header based on type and field number defined in the field
- * structure. Call this from the callback before writing out field contents. */
-bool pb_encode_tag_for_field(pb_ostream_t *stream, const pb_field_t *field);
-
-/* Encode field header by manually specifing wire type. You need to use this
- * if you want to write out packed arrays from a callback field. */
-bool pb_encode_tag(pb_ostream_t *stream, pb_wire_type_t wiretype, uint32_t field_number);
-
-/* Encode an integer in the varint format.
- * This works for bool, enum, int32, int64, uint32 and uint64 field types. */
-#ifndef PB_WITHOUT_64BIT
-bool pb_encode_varint(pb_ostream_t *stream, uint64_t value);
-#else
-bool pb_encode_varint(pb_ostream_t *stream, uint32_t value);
-#endif
-
-/* Encode an integer in the zig-zagged svarint format.
- * This works for sint32 and sint64. */
-#ifndef PB_WITHOUT_64BIT
-bool pb_encode_svarint(pb_ostream_t *stream, int64_t value);
-#else
-bool pb_encode_svarint(pb_ostream_t *stream, int32_t value);
-#endif
-
-/* Encode a string or bytes type field. For strings, pass strlen(s) as size. */
-bool pb_encode_string(pb_ostream_t *stream, const pb_byte_t *buffer, size_t size);
-
-/* Encode a fixed32, sfixed32 or float value.
- * You need to pass a pointer to a 4-byte wide C variable. */
-bool pb_encode_fixed32(pb_ostream_t *stream, const void *value);
-
-#ifndef PB_WITHOUT_64BIT
-/* Encode a fixed64, sfixed64 or double value.
- * You need to pass a pointer to a 8-byte wide C variable. */
-bool pb_encode_fixed64(pb_ostream_t *stream, const void *value);
-#endif
-
-/* Encode a submessage field.
- * You need to pass the pb_field_t array and pointer to struct, just like
- * with pb_encode(). This internally encodes the submessage twice, first to
- * calculate message size and then to actually write it out.
- */
-bool pb_encode_submessage(pb_ostream_t *stream, const pb_field_t fields[], const void *src_struct);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif
diff --git a/assign5/openTok/openTok.xcodeproj/project.pbxproj b/assign5/openTok/openTok.xcodeproj/project.pbxproj
deleted file mode 100644
index 6b18bf9..0000000
--- a/assign5/openTok/openTok.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,429 +0,0 @@
-// !$*UTF8*$!
-{
-	archiveVersion = 1;
-	classes = {
-	};
-	objectVersion = 51;
-	objects = {
-
-/* Begin PBXBuildFile section */
-		3E97DADC849CA11FF96930AA /* Pods_openTok.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0FB7AD07E0564CB6A5002A42 /* Pods_openTok.framework */; };
-		98027A882459E5D700A5E1D2 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98027A872459E5D700A5E1D2 /* AppDelegate.swift */; };
-		98027A8A2459E5D700A5E1D2 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98027A892459E5D700A5E1D2 /* SceneDelegate.swift */; };
-		98027A8C2459E5D700A5E1D2 /* MainController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98027A8B2459E5D700A5E1D2 /* MainController.swift */; };
-		98027A8F2459E5D700A5E1D2 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 98027A8D2459E5D700A5E1D2 /* Main.storyboard */; };
-		98027A912459E5D900A5E1D2 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 98027A902459E5D900A5E1D2 /* Assets.xcassets */; };
-		98027A942459E5D900A5E1D2 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 98027A922459E5D900A5E1D2 /* LaunchScreen.storyboard */; };
-		98027A9C2459E6E100A5E1D2 /* PlayerController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98027A9B2459E6E100A5E1D2 /* PlayerController.swift */; };
-		98027A9E2459E7A300A5E1D2 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 98027A9D2459E7A300A5E1D2 /* GoogleService-Info.plist */; };
-		98027AA02459EA3000A5E1D2 /* URLController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98027A9F2459EA3000A5E1D2 /* URLController.swift */; };
-		98027AA4245A89D200A5E1D2 /* RecordViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98027AA3245A89D200A5E1D2 /* RecordViewController.swift */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXFileReference section */
-		0FB7AD07E0564CB6A5002A42 /* Pods_openTok.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_openTok.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-		918B4F0FA2B1B11665C64B57 /* Pods-openTok.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-openTok.debug.xcconfig"; path = "Target Support Files/Pods-openTok/Pods-openTok.debug.xcconfig"; sourceTree = "<group>"; };
-		97FF972675787B80913A44EA /* Pods-openTok.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-openTok.release.xcconfig"; path = "Target Support Files/Pods-openTok/Pods-openTok.release.xcconfig"; sourceTree = "<group>"; };
-		98027A842459E5D700A5E1D2 /* openTok.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = openTok.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		98027A872459E5D700A5E1D2 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
-		98027A892459E5D700A5E1D2 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; };
-		98027A8B2459E5D700A5E1D2 /* MainController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainController.swift; sourceTree = "<group>"; };
-		98027A8E2459E5D700A5E1D2 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
-		98027A902459E5D900A5E1D2 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
-		98027A932459E5D900A5E1D2 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
-		98027A952459E5D900A5E1D2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
-		98027A9B2459E6E100A5E1D2 /* PlayerController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerController.swift; sourceTree = "<group>"; };
-		98027A9D2459E7A300A5E1D2 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "openTok/GoogleService-Info.plist"; sourceTree = "<group>"; };
-		98027A9F2459EA3000A5E1D2 /* URLController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = URLController.swift; sourceTree = "<group>"; };
-		98027AA3245A89D200A5E1D2 /* RecordViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecordViewController.swift; sourceTree = "<group>"; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
-		98027A812459E5D700A5E1D2 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				3E97DADC849CA11FF96930AA /* Pods_openTok.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
-		1465430F298A29CF1C1109AE /* Pods */ = {
-			isa = PBXGroup;
-			children = (
-				918B4F0FA2B1B11665C64B57 /* Pods-openTok.debug.xcconfig */,
-				97FF972675787B80913A44EA /* Pods-openTok.release.xcconfig */,
-			);
-			path = Pods;
-			sourceTree = "<group>";
-		};
-		44F754585789A8803EAF1FE4 /* Frameworks */ = {
-			isa = PBXGroup;
-			children = (
-				0FB7AD07E0564CB6A5002A42 /* Pods_openTok.framework */,
-			);
-			name = Frameworks;
-			sourceTree = "<group>";
-		};
-		98027A7B2459E5D700A5E1D2 = {
-			isa = PBXGroup;
-			children = (
-				98027A9D2459E7A300A5E1D2 /* GoogleService-Info.plist */,
-				98027A862459E5D700A5E1D2 /* openTok */,
-				98027A852459E5D700A5E1D2 /* Products */,
-				1465430F298A29CF1C1109AE /* Pods */,
-				44F754585789A8803EAF1FE4 /* Frameworks */,
-			);
-			sourceTree = "<group>";
-		};
-		98027A852459E5D700A5E1D2 /* Products */ = {
-			isa = PBXGroup;
-			children = (
-				98027A842459E5D700A5E1D2 /* openTok.app */,
-			);
-			name = Products;
-			sourceTree = "<group>";
-		};
-		98027A862459E5D700A5E1D2 /* openTok */ = {
-			isa = PBXGroup;
-			children = (
-				98027A8B2459E5D700A5E1D2 /* MainController.swift */,
-				98027A9F2459EA3000A5E1D2 /* URLController.swift */,
-				98027A9B2459E6E100A5E1D2 /* PlayerController.swift */,
-				98027A872459E5D700A5E1D2 /* AppDelegate.swift */,
-				98027A892459E5D700A5E1D2 /* SceneDelegate.swift */,
-				98027A8D2459E5D700A5E1D2 /* Main.storyboard */,
-				98027AA3245A89D200A5E1D2 /* RecordViewController.swift */,
-				98027A902459E5D900A5E1D2 /* Assets.xcassets */,
-				98027A922459E5D900A5E1D2 /* LaunchScreen.storyboard */,
-				98027A952459E5D900A5E1D2 /* Info.plist */,
-			);
-			path = openTok;
-			sourceTree = "<group>";
-		};
-/* End PBXGroup section */
-
-/* Begin PBXNativeTarget section */
-		98027A832459E5D700A5E1D2 /* openTok */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 98027A982459E5D900A5E1D2 /* Build configuration list for PBXNativeTarget "openTok" */;
-			buildPhases = (
-				E99490D609B2651F57F987DB /* [CP] Check Pods Manifest.lock */,
-				98027A802459E5D700A5E1D2 /* Sources */,
-				98027A812459E5D700A5E1D2 /* Frameworks */,
-				98027A822459E5D700A5E1D2 /* Resources */,
-				702483BA42201BBF852D0828 /* [CP] Embed Pods Frameworks */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-			);
-			name = openTok;
-			productName = openTok;
-			productReference = 98027A842459E5D700A5E1D2 /* openTok.app */;
-			productType = "com.apple.product-type.application";
-		};
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
-		98027A7C2459E5D700A5E1D2 /* Project object */ = {
-			isa = PBXProject;
-			attributes = {
-				LastSwiftUpdateCheck = 1140;
-				LastUpgradeCheck = 1140;
-				ORGANIZATIONNAME = "Pete Keleher";
-				TargetAttributes = {
-					98027A832459E5D700A5E1D2 = {
-						CreatedOnToolsVersion = 11.4.1;
-					};
-				};
-			};
-			buildConfigurationList = 98027A7F2459E5D700A5E1D2 /* Build configuration list for PBXProject "openTok" */;
-			compatibilityVersion = "Xcode 9.3";
-			developmentRegion = en;
-			hasScannedForEncodings = 0;
-			knownRegions = (
-				en,
-				Base,
-			);
-			mainGroup = 98027A7B2459E5D700A5E1D2;
-			productRefGroup = 98027A852459E5D700A5E1D2 /* Products */;
-			projectDirPath = "";
-			projectRoot = "";
-			targets = (
-				98027A832459E5D700A5E1D2 /* openTok */,
-			);
-		};
-/* End PBXProject section */
-
-/* Begin PBXResourcesBuildPhase section */
-		98027A822459E5D700A5E1D2 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				98027A942459E5D900A5E1D2 /* LaunchScreen.storyboard in Resources */,
-				98027A9E2459E7A300A5E1D2 /* GoogleService-Info.plist in Resources */,
-				98027A912459E5D900A5E1D2 /* Assets.xcassets in Resources */,
-				98027A8F2459E5D700A5E1D2 /* Main.storyboard in Resources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXShellScriptBuildPhase section */
-		702483BA42201BBF852D0828 /* [CP] Embed Pods Frameworks */ = {
-			isa = PBXShellScriptBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			inputFileListPaths = (
-				"${PODS_ROOT}/Target Support Files/Pods-openTok/Pods-openTok-frameworks-${CONFIGURATION}-input-files.xcfilelist",
-			);
-			name = "[CP] Embed Pods Frameworks";
-			outputFileListPaths = (
-				"${PODS_ROOT}/Target Support Files/Pods-openTok/Pods-openTok-frameworks-${CONFIGURATION}-output-files.xcfilelist",
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-			shellPath = /bin/sh;
-			shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-openTok/Pods-openTok-frameworks.sh\"\n";
-			showEnvVarsInLog = 0;
-		};
-		E99490D609B2651F57F987DB /* [CP] Check Pods Manifest.lock */ = {
-			isa = PBXShellScriptBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			inputFileListPaths = (
-			);
-			inputPaths = (
-				"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
-				"${PODS_ROOT}/Manifest.lock",
-			);
-			name = "[CP] Check Pods Manifest.lock";
-			outputFileListPaths = (
-			);
-			outputPaths = (
-				"$(DERIVED_FILE_DIR)/Pods-openTok-checkManifestLockResult.txt",
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-			shellPath = /bin/sh;
-			shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n    # print error to STDERR\n    echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n    exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
-			showEnvVarsInLog = 0;
-		};
-/* End PBXShellScriptBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
-		98027A802459E5D700A5E1D2 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				98027A8C2459E5D700A5E1D2 /* MainController.swift in Sources */,
-				98027A882459E5D700A5E1D2 /* AppDelegate.swift in Sources */,
-				98027A9C2459E6E100A5E1D2 /* PlayerController.swift in Sources */,
-				98027AA4245A89D200A5E1D2 /* RecordViewController.swift in Sources */,
-				98027AA02459EA3000A5E1D2 /* URLController.swift in Sources */,
-				98027A8A2459E5D700A5E1D2 /* SceneDelegate.swift in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXSourcesBuildPhase section */
-
-/* Begin PBXVariantGroup section */
-		98027A8D2459E5D700A5E1D2 /* Main.storyboard */ = {
-			isa = PBXVariantGroup;
-			children = (
-				98027A8E2459E5D700A5E1D2 /* Base */,
-			);
-			name = Main.storyboard;
-			sourceTree = "<group>";
-		};
-		98027A922459E5D900A5E1D2 /* LaunchScreen.storyboard */ = {
-			isa = PBXVariantGroup;
-			children = (
-				98027A932459E5D900A5E1D2 /* Base */,
-			);
-			name = LaunchScreen.storyboard;
-			sourceTree = "<group>";
-		};
-/* End PBXVariantGroup section */
-
-/* Begin XCBuildConfiguration section */
-		98027A962459E5D900A5E1D2 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				CLANG_ANALYZER_NONNULL = YES;
-				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
-				CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
-				CLANG_CXX_LIBRARY = "libc++";
-				CLANG_ENABLE_MODULES = YES;
-				CLANG_ENABLE_OBJC_ARC = YES;
-				CLANG_ENABLE_OBJC_WEAK = YES;
-				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
-				CLANG_WARN_BOOL_CONVERSION = YES;
-				CLANG_WARN_COMMA = YES;
-				CLANG_WARN_CONSTANT_CONVERSION = YES;
-				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
-				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
-				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
-				CLANG_WARN_EMPTY_BODY = YES;
-				CLANG_WARN_ENUM_CONVERSION = YES;
-				CLANG_WARN_INFINITE_RECURSION = YES;
-				CLANG_WARN_INT_CONVERSION = YES;
-				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
-				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
-				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
-				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
-				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
-				CLANG_WARN_STRICT_PROTOTYPES = YES;
-				CLANG_WARN_SUSPICIOUS_MOVE = YES;
-				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
-				CLANG_WARN_UNREACHABLE_CODE = YES;
-				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
-				COPY_PHASE_STRIP = NO;
-				DEBUG_INFORMATION_FORMAT = dwarf;
-				ENABLE_STRICT_OBJC_MSGSEND = YES;
-				ENABLE_TESTABILITY = YES;
-				GCC_C_LANGUAGE_STANDARD = gnu11;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_NO_COMMON_BLOCKS = YES;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PREPROCESSOR_DEFINITIONS = (
-					"DEBUG=1",
-					"$(inherited)",
-				);
-				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
-				GCC_WARN_UNDECLARED_SELECTOR = YES;
-				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
-				GCC_WARN_UNUSED_FUNCTION = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				IPHONEOS_DEPLOYMENT_TARGET = 13.4;
-				MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
-				MTL_FAST_MATH = YES;
-				ONLY_ACTIVE_ARCH = YES;
-				SDKROOT = iphoneos;
-				SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
-				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
-			};
-			name = Debug;
-		};
-		98027A972459E5D900A5E1D2 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				CLANG_ANALYZER_NONNULL = YES;
-				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
-				CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
-				CLANG_CXX_LIBRARY = "libc++";
-				CLANG_ENABLE_MODULES = YES;
-				CLANG_ENABLE_OBJC_ARC = YES;
-				CLANG_ENABLE_OBJC_WEAK = YES;
-				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
-				CLANG_WARN_BOOL_CONVERSION = YES;
-				CLANG_WARN_COMMA = YES;
-				CLANG_WARN_CONSTANT_CONVERSION = YES;
-				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
-				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
-				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
-				CLANG_WARN_EMPTY_BODY = YES;
-				CLANG_WARN_ENUM_CONVERSION = YES;
-				CLANG_WARN_INFINITE_RECURSION = YES;
-				CLANG_WARN_INT_CONVERSION = YES;
-				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
-				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
-				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
-				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
-				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
-				CLANG_WARN_STRICT_PROTOTYPES = YES;
-				CLANG_WARN_SUSPICIOUS_MOVE = YES;
-				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
-				CLANG_WARN_UNREACHABLE_CODE = YES;
-				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
-				COPY_PHASE_STRIP = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				ENABLE_NS_ASSERTIONS = NO;
-				ENABLE_STRICT_OBJC_MSGSEND = YES;
-				GCC_C_LANGUAGE_STANDARD = gnu11;
-				GCC_NO_COMMON_BLOCKS = YES;
-				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
-				GCC_WARN_UNDECLARED_SELECTOR = YES;
-				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
-				GCC_WARN_UNUSED_FUNCTION = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				IPHONEOS_DEPLOYMENT_TARGET = 13.4;
-				MTL_ENABLE_DEBUG_INFO = NO;
-				MTL_FAST_MATH = YES;
-				SDKROOT = iphoneos;
-				SWIFT_COMPILATION_MODE = wholemodule;
-				SWIFT_OPTIMIZATION_LEVEL = "-O";
-				VALIDATE_PRODUCT = YES;
-			};
-			name = Release;
-		};
-		98027A992459E5D900A5E1D2 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 918B4F0FA2B1B11665C64B57 /* Pods-openTok.debug.xcconfig */;
-			buildSettings = {
-				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
-				CODE_SIGN_STYLE = Automatic;
-				DEVELOPMENT_TEAM = 2STLT7848V;
-				INFOPLIST_FILE = openTok/Info.plist;
-				LD_RUNPATH_SEARCH_PATHS = (
-					"$(inherited)",
-					"@executable_path/Frameworks",
-				);
-				PRODUCT_BUNDLE_IDENTIFIER = edu.maryland.cmsc436.spring2020.openTok;
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				SWIFT_VERSION = 5.0;
-				TARGETED_DEVICE_FAMILY = "1,2";
-			};
-			name = Debug;
-		};
-		98027A9A2459E5D900A5E1D2 /* Release */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 97FF972675787B80913A44EA /* Pods-openTok.release.xcconfig */;
-			buildSettings = {
-				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
-				CODE_SIGN_STYLE = Automatic;
-				DEVELOPMENT_TEAM = 2STLT7848V;
-				INFOPLIST_FILE = openTok/Info.plist;
-				LD_RUNPATH_SEARCH_PATHS = (
-					"$(inherited)",
-					"@executable_path/Frameworks",
-				);
-				PRODUCT_BUNDLE_IDENTIFIER = edu.maryland.cmsc436.spring2020.openTok;
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				SWIFT_VERSION = 5.0;
-				TARGETED_DEVICE_FAMILY = "1,2";
-			};
-			name = Release;
-		};
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
-		98027A7F2459E5D700A5E1D2 /* Build configuration list for PBXProject "openTok" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				98027A962459E5D900A5E1D2 /* Debug */,
-				98027A972459E5D900A5E1D2 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		98027A982459E5D900A5E1D2 /* Build configuration list for PBXNativeTarget "openTok" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				98027A992459E5D900A5E1D2 /* Debug */,
-				98027A9A2459E5D900A5E1D2 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-/* End XCConfigurationList section */
-	};
-	rootObject = 98027A7C2459E5D700A5E1D2 /* Project object */;
-}
diff --git a/assign5/openTok/openTok.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/assign5/openTok/openTok.xcodeproj/project.xcworkspace/contents.xcworkspacedata
deleted file mode 100644
index c740a7c..0000000
--- a/assign5/openTok/openTok.xcodeproj/project.xcworkspace/contents.xcworkspacedata
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Workspace
-   version = "1.0">
-   <FileRef
-      location = "self:openTok.xcodeproj">
-   </FileRef>
-</Workspace>
diff --git a/assign5/openTok/openTok.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/assign5/openTok/openTok.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
deleted file mode 100644
index 18d9810..0000000
--- a/assign5/openTok/openTok.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>IDEDidComputeMac32BitWarning</key>
-	<true/>
-</dict>
-</plist>
diff --git a/assign5/openTok/openTok.xcodeproj/project.xcworkspace/xcuserdata/keleher.xcuserdatad/UserInterfaceState.xcuserstate b/assign5/openTok/openTok.xcodeproj/project.xcworkspace/xcuserdata/keleher.xcuserdatad/UserInterfaceState.xcuserstate
deleted file mode 100644
index 3bd5f5e0468ec8150d12aaf1ae717fc9c83d7f0a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 9289
zcmb_h33yZ0wqAQ@ZZn*doB~bKSZG10o#!&QO$vol3TaCjW7?j!p>0x<6bi^?tBA9r
z4A*;cpe+K9i1R!v&R0Q2RB*b^2#R{2UZ=NCPLsC4^LzJw4?ml8&K}m<Yy8*Rja?nS
zP&hmLO&~x)0ZLGT8Z;2skh)R~hI|44!c=dtsm+IPwW;AiS3_!`ak<zO4w->$+~MI&
z)$ZBiYO%R=VA30)1znvx><x>I?BxzZJm_I0jDkcs2ht$}G9e4HAqR3H56Zy_E~tPR
zFcT`F723cD%b^`QpcDKMfG$`8K?p$@*1%d|a2Z?<SHP8U6<iIQU>od!Ug(2<*bTSB
zZE!o>0e8dw@Gv|J&%ulE4|pBkgty@k9D$?oF?<GJ!4L2w{0sgIet|!Ti6oFjl0+Qj
zERsSdkaUtkibydjArr||;v_CoL8{4IQbXpE`D6iUAWO(nvWzs677`>O5+>bbCAolH
zNH&m*$VPH0xf<>wo5(h@o!m@zk-Nw~@&I{^>?bdf1LPn%LXMIT$miq>@+J9&{7QZ!
zzmq>GP(mqHP#uk<9OY>uwbEodj;7OWT1boNL^_q0(R#XoHqeE15nW7|(4}-4ZKlg<
zn0C{ZbQN7o89kp~N-v|A(<|te^eTESy^j8k{+-@M_tCrQJ@j6BAHAPGKp&(J(TC|H
z^ild4eVjf)pP?_(SLy3@ss8Scj)PzTBba~#3yfG$?api$SBDni?|{ndQ=2-xp-><2
zU}lsl`apmLreu9A-NU7p<`=sPib`A=xfO*48TqBTWf{eJg=HBfC508GMJ|`CxV+fI
z36)OQf<Ul6)a7jwoq?wAPSGEZ61Kt^NZSoIutO3!;4Dan(M-kEOvAKH$KqK0Zb*St
z7z^WY%6J&d^vuAr*bbbMhQGPXq}_e~=D@0optn=>a8rkptMxXP2mIk+prb<!dWv&$
zvvXYe$giv1nUP;n>dYw1D=*2&&dDn&&o0U-E-ZC<xN)%^adnwDxWF5#_l10o9pVCC
zxXtbJw|0m);^D>*r6lv<sdmp7L*YQsi_;@6;q->R9_}ohTG|vwpNdIhIBQ(uAk{#i
zqtP3zj8gS*qXx$!91R^>yEdmNJ3TqSU|o9h+MN7sd@d=>UbikP;Cz?_X}h2R3ZV#!
zp#&x}BQr6M@yyIDyI?X3bt+85zokq-k^Y5UjDK%nxl56#tJ#NVDGiEv1P<TbZGlzQ
z-j%*qFMjrL=@MU2%?>+{Qw;f9{nA1=hMRD`Ph2JM5L-Qb)4H$^r}@N?Jgd?l>cWU4
zla8Kb7BoQG9WWcJU=CEnT&RJ0Fdy7d3w2Nr3s?dh!A7!CERk86joDcebFi~mG8=sd
zEQCd{7?!|N$%Nosd~Sp$Xhw4y!}3@@D`15Yb1KH?66RvdCDZb7yi;uKZfzBVLr#$_
z3uR7sN7&beN|w%76ZCa@gR85&s{`F(50_gewgiIW9B+@W)3-(}4|H~UgT7F}KPS*E
zdg?-AaKNAjw!*KA1|L0KvRmxH<BQFM@{f?I^f!w=HQsQWq#H>W@;J&&dWrHXOE%dl
zws?`p8Y!lS!sv4I#jc<j!Ut~{gM4UNl)dJNoqD*GF8LHuqLCEPJbaahONb5+s5Y_~
z)n-AK21rI2k+~TEr;_l6Vmw5Z+zqQBtru3ZlwRmzsj?F4Yh&`S42zwi1Cf|@9<1+!
zb?_H9mSwP<=mzJ*MKGctE`SSR0~^QAX5;%|BWnE;HUTw!4ohF^tgo$XMltwWd}45k
z^fu^e9KK4%I>+1U_l3Kg#f5k*`NX=E>ArJ8`gZ`XfoowiY*{2nM?c1$2KiA8Eva@p
zedy@{KN>_I&f3~g?VcM+pivh83foU(@p?4N8(AirUA7cjO%Z9zwkJtan=*aLlS7E_
zgqxRDyXSO=r8rX>40>1h!%o-*TQP=5US%Hlz%8hm*u+7``eBd6nujwF*ld;960Qx*
z_qDc#Im`wJ;ZE3#dEqWhvir~vs@*Z$s}lXK;Wo6nA>Zn~9o-^FSdmQj9=Lb$kkLN4
z54H~d5EaA&@F1k^*uiq&f=A#{B=;CR4o|?7@Dw}^&mf6twx|j;MT~aYpyDJqh|K8p
z`uu~RJs3zOFPYmCT{}3&O4%glWE0tR50}-@gkG14VwNKkicvBxXF%F6GZxg`;b3=D
zxH~AyCigtN&<p$7WH#*}yaX>J$FE>0d2P`kjk*YRHU;Cz)CGYq(O(;Amxb~M9Pn^<
zBq-x1IY9(5n+!<S7wki^qe}jCj=a|{c&ks+wq^Yv^1p-d4l;8X-i7zz{l(1#Nw#i&
z)xxl^6BClRvx}9nat3(v7GH-rF)J%eibJ8Sb__LbVlZof*XVC%k0hV2U|_jS@dNk}
zEeX9ND%Pk<`rspp=`#(<D?fpM%Bgagpa+F8Jizq9r_y#(YW-i$m-X^FtnY;{SjAu%
z_!>?~K6VTf#c?(Rlfuk?_!f0_l2xK=X0i0elDcR6{LP4Ek$u_6XJVub1Xp8BYih@s
zW{S@7$ip(RpCn>Gv)L@?0Q`zl{|$b}6y4Mv3}R3jwvV)&RWaW?1PCFND8NLNL`Bp@
zL$pLk;z&F`8Hf?BHmb8>r>>45n$eQRBpgw@x=YLqg(agIE;VEobsQE49o)m&{E<XG
zVA!Y5=ZB3-bcR|Du8#8K>cQM0RRx1K&RSU=t7mgq8$P*N%MkA+9N{JJB?6nzsw2)e
zFCsNE0$qoUWOHM#L#&ePu$rNsa%Ov$E%zWvMe&V=_sQAtt^`#Zy&(~!N@h^(z~Hb_
zWWZ`!S;Xi_8abz~+Ku+#N75vF8rc-+%=C6)zLpI;Q?hJKu>+BaWRhG+>nB+xo8+(s
ztbr};CwU~F6tG3CnTb*wN{>X0yc&6-tmkN+KGiAEcFr`tCMd4-1-e7E-e9XZU@GMj
zzDCe_hTT2#x1qCTSx%B<IhieH)7~W0(Cg9n$#ham%1HUbPy{-lzSuIhlr3RR|GCGf
zls=t)^2C&NB~j_jAhRH?kIW>M%)`#@BeO{r^Rh;kTQ7^DUS<)q$>|&q3xdQ=YCT-i
zu(O^jyM9tf>Ls21`Lr{KoHMczJ;p+^NKQ8%t|-Dn<}gOw-CbRQU^r7gQ<SaYbB3SB
zL(Y}Uo723$k9egcNTttdW3q)dk!A!_r;bM=PahGb#b+Lj9;TIaK-x~yMto#BX=m-M
zgLN|hPSQ#IBtW`YfOWG~tcT?`NU2@IGz%lyU3yw1C;bQ-jgX1Ks~B{Pl37L0lgRXt
z)npA>%evSK7G$BFh*lPp^)MdsN<IrCutEp1)g#E2(i*}kag~HfL-W0>BG3R0+&X-8
z0N}ctFz+DX9X1$Qj+($CqABR>!ibFPM+}=1*<A{UvO`=9FYJ&4OQe`3mys(FLz2tc
z%3fHE{7FC_tH4m8L#*(1gvFqA@aW`g$mS^EBwN^OmMic0R|J>jI`TKRhMgD7D&%^y
z<5c8E+F(5CNBO6*wJbel`r70OOp9*6o7{HV3Lmbx6ZMtG)<sru!&cl)?u{{YA6p+~
z=s{TDPaYx<lSde17qAV3Og&DXK9vL(dgIA+SmLFz^Cc21A`}o_$O3wiyn5P-0$lMr
zmWFBULTSb2!;kSMdFRv><S?#yk6nZ-HcF6Hst;pjoP=3Zrgu#rcCru2CsG*sh<wa0
zVVCxikIAR(Qg&HHKha1kr@u&bnJoJ#Zado-&WsIY#xPm*IA4*I*h3&+lVju?a-5tX
z-;(dx<?IS}CA*4U%{H-Xc9ZX6Ecp?wb}adc{LHRJyWNccXR*Jr?Q#!cpdy=(NkN8S
z?(#Y4jp6Q)Y%`d1U4F^B(QPAc-P7eopxG?t_)u+7L@OSRtm1k^0ny-b`cetlI9FrE
z;A@f^6F7H9FwotFJ%)1ZQFyyTVsqJQ37N??KvXO;0jb`O$-y<00lCbIk&~wjYu92o
zAX{n-<QC<mCl?nM#QFkMN!2i-m#Wy7UaDbRqeX}8uBDL^4ak?qQv+Hg)w6BA)X4tI
za-&f&I>Ag6P_fj4Y2iB7h!50)57)8Wn&=E0O^Q)-u)nkP=)h>265Cr^lp7s5n@)(W
zNMqLzuE?O7aukow%%OSG7P;)kUYgHtlFVszH%bt*ZHtJYthpSKQ7gi_K`7&tOGsJ_
z>vtfGqm#fyC(|hss%S=>HJ4XzYmBx@2~{XnYR$O+YkTwq&ZO1F#p?}56UUn^Lc)lV
zqY|w)yUlS{^5`)ssbiN`yN5KekcV1dxC70J$7Yf|Ah(pnAU5W(%TgwF4{%y#2%&2|
zqMXV~C)SviSWNr;k-DtH7Yt#!AL<IAg$5BLML>oOCb`(IauNvPusgiE1G^QWc1)^K
znz0h7(kYXj5$uZ4K@KXLd$9VHd8_X3Y!rixFa=X<b&Tq;bEjl+oC&*l0tbAZu$N0X
zd;Em7bJ8<13koMYXU(pfTUWne(Nehs>ERsMz)CL8OO~2f$tAhD$=Uc{Zb4x-e#t3H
zu1AI^=H;V221=B{(gd?TdPIy<nV}jvb4Fcou>E&1D?2AQFMpt=*{}++e_&Om6WzHh
z)*~4La&<g;hG`?zbMg-q6_-prQ@M}qSGxy$EOnJGzf?G3+XQV-^f!rpC6fjl08^%B
zO)D*z%<PmtYwvUx-&=-#Im<y;Mb?a&l~_@rUYanj_+>rS)m1t%@?jXlQx6|<V~;7)
z7R5RuH76&}SyAXL&2X0Fy08<QUz$-|QkIk9EH5q0$u27@aFv!USu2S*9p#&!y$+8y
zryA8clvv-KNe64@WzBaZT1$*-TINF*@<6Zktl?urw}{M;+l+XY|EWufd3{Kb8el4?
zXr07W!@`)6$)x)lCgJDBONO^t7EfB1-BZ*e7Up_$3W^H~vhg~C2P^iBC*X}k5#BN^
zhaS91*aA1<t-+n}09NjA!<X<Q7GERq9v~Ajf35`eNnzwBU=o=^rXiRv$J+n|zS#S3
z!#@8evNMu>50Jy;L-Hl|@F`VM4K-r0bI`NtOgfv^VyC`|`e_#pVxN8`?V;<jAHNs-
z@%Laa{(br-Jx+g9fI_24QMeQ{6qSnEiWbFs#RkP@#Wuxu#U90Nk$j2w1M)8{8~7dg
zQ9R6gBj}M%qth{L4D^4b(y$*tmBLmG2hv+KG?vpUNZUi5)I}@k3}mvB&Z4tfKikP}
zX1myKwujxqZruapX*HcoYv?>WpSo!+ru5s`BkXbZ8v6%(gB_4Us!)b0y}c{o^M^x`
zPBsQrOoi5go}Y|zrGzPlDgr^Qyh2OlhPS(^O_cibg8Vwa+mE;|?DIz&I+*36jw&0L
zgcRi`sg31t#if`|r7moxza@avqZu(aeUzMXhog3hepCn^>c#v(jI5=XHnQ6XQ;bMk
zr2zwT_tG|Y$KXIa4PZ4$J7_2Mvpd;dc2_?tbp;Kwee5Cjuq2K%m3L9rq9=;BNbpQ&
zn*RS(4bmR02I*>c_mFCko=4ZgyQG}m%kIJIxoM!HYiy6o<N|t;l(8?Q8`yp9{yw^q
zUd$d~5B^6L-JjK3^lG|kc$VHww@UeZ3wyMeZex#OA2tGJI`Ni73Tmf9itY4f7;y`|
zp58!jq&LwWw3qhLe!7!A!JcGKv8UNH>{<34d!FsTh3=A?`t%lhE4_{0PVc~~<OQ_g
zEcPOMiM`BTVXxv_`oeIe=yp42FY<+49lloSLI=Z-{Mm_xd6QTfTHwQOf+!W_Tx@=%
z@bDul6o$@?Di@_7e~xst!U!L+TNwK&?^}UzuLHYG2}3uKija<S{Bs%;n6fbNhjGB-
z>uL-5@h+va8+#mqU`}2pCPLFGU-8bXd1bgca)gXi#wHe(xyoH7h2<GV#ZJ8QD$dK#
zD9+C>&TzT%a*OgyOL4rQzNfg*Q<z`xtC6TJl7Dh?(~Bdu5Pec=c=34s7j3fBXX*3k
zInuXYx}Uv1P@~Y7ViV<sugUOA>ekaYq@D%38k>gkIT3ID(jf;X;>FWEyt`Qf%P^K2
z@E&vw&7k?TgifMU@D9|8VQVH0pm}aa_3xy+=pNMa?etE(<$QuZg?E|H(fxRz`7+*U
z{(~M>oTZql2r0HI_9<Rbe6ILGNtB4)lp3W@8Lu=btxCJnp-fheQKl-#DaR`dm6ggK
z<>ks7mHU*BD-SE*Qyx)%p!`VriSkqB=gKdYUn{>+o=|?L{9a{LaVoP)P>oQHQdw1Y
zl|z-R8ly^8jZ=+RrKzT>ysB-gUe&Xz1FBEeTJ=cv6m^}tUA;}+uimBJqrOdjhkCF2
z8TBjbH`E8!Z>bNd|Ed03{f+vB`aAVc>VK<$RsXI5jZtIMWNL~vC7LqLY)!q!qv_DB
z(5%s1thq|FNpr1ci)Op#2F*>HUQNH|KF$4_Cp0f;4rz{RKGU4gs<e9TXl;sitTtC$
zp<Sq5tX-;Y(FV1vv=?eOX|K^<tKFi#Mf<4sW$jVzzqP+=f7gMI>Xf=d-85a9&Z(==
zxpm8Q&AJv{n{K%-s9UT1yY434<GTI2S9EXbKGq%A{iOT1?pNLKaoKStadYEp<Ce#T
z;%<!Vk9#fdP~5w5@5ddD`#SDq+z)a8iu)<<k9ZQVh*!mH;w|wL;wQyB<7dQI#?Owg
zjSs}Hh!4eYiN7oU&G^ssO8qE(s=iF`)K}<d>SyVz^ws(r{d|3^-luQZcj^QB75X*$
zb^7)C^YvHhH|ej{Z_!_`zgd5`{$Bn4`UmyT>0i|!*1xAeqW?huh5oqydxODXHH<c-
z7{(gTHe?#I4Y`JVL!m)5Y%x4$c;4`$;bp_ChNFfr3||?J8IBviHI6Z!V=OjKF-|j<
z8Y_%5jkAnZMz?X1F<@L}WX2uF-NyaKBgT`)KTOzRGbv0{OfFNkNi;1too~9#)Mwgl
zdcyRI=`GVC(_zzlrX!}$OkbG3G95D=H+^gRnNx5^ZXB1#P3ER@)44Lv$<5*Ba`QMh
zSH~^jy18q)`?%M*L)<&uyWHp8SKKk~1os{HJ+I*fek7mB+j$3{%unDm`D{Ly&*w||
znfxriim&GD_yznzelfq4Z{b7y8vZ=~FFfNf<}c+h=da|i=C9*#=J)Wo@^|oi`F;Gu
z{8Rih{B!(%{zd+6{s{j8{}KNQ{}q3XKhA&4pX7frYt1Gz)+Xizv)$}4C!5EZQ_UIX
ziRMysx!Gl&VXijUnCF{o&GlxVIcQ#Q-eBHnzQlZ``D*hu=FR5a=9kQe%%7RRFn?t}
zW<GBI)_l_ZgGFIcSu_@%CEjANm@K@-Vi{v8wKQ1Hv+TA!WckAKhoBcs0xt-{2w{|v
zCKL%1g~`G+p;RarW(y6%Qo$p5g%+VrST1x3ox&Pnov>cGK-eH`6gCUngzJRu!VSVr
z!tKIdVV`iXaKG@N@SO0xuwQslcw0CuyeAwLJ`_GqP$!rYxCC>8Eg>cGvBW15Ur2mA
z@kru76Th=ktJ12rYOQfrz13*ttY&M9b*%Ml>jdjL)(mTwHOHD~EwENueb$xME3G$K
zAGN+_{nGj`>(AC-tiRj9Mr|gW*(TUV+7fLx+jv`+EytE;E3i$rO|?z8mD!xOkgd=5
zvh7XVA=_cwd$wb?<F;>YCv892ezV8fO?KXHv5&G_?RLAvKGvRYFSS?Nm)YCx9rjLp
zz<!>6z5RUq2Kz?)CH8Ih8|}B*AGbegf7<@6{dxNf_LuCh*k7~1ZvVvosr_^Nm-esi
z-`G#szq5aD|Iz+mNhC?1G&ZR?X>L+;((0sZl5S0UGU<TB;;=eKJJKBmj$+3|$7DyP
sqsme3nCEai>Kw})UPqHdbod<s#|p<9$2!OQ0W3-fe%~C9MIGn=H&(=Sb^rhX

diff --git a/assign5/openTok/openTok.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/xcschememanagement.plist b/assign5/openTok/openTok.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/xcschememanagement.plist
deleted file mode 100644
index 94e415b..0000000
--- a/assign5/openTok/openTok.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/xcschememanagement.plist
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>SchemeUserState</key>
-	<dict>
-		<key>openTok.xcscheme_^#shared#^_</key>
-		<dict>
-			<key>orderHint</key>
-			<integer>13</integer>
-		</dict>
-	</dict>
-</dict>
-</plist>
diff --git a/assign5/openTok/openTok.xcworkspace/contents.xcworkspacedata b/assign5/openTok/openTok.xcworkspace/contents.xcworkspacedata
deleted file mode 100644
index 3bf16d2..0000000
--- a/assign5/openTok/openTok.xcworkspace/contents.xcworkspacedata
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Workspace
-   version = "1.0">
-   <FileRef
-      location = "group:openTok.xcodeproj">
-   </FileRef>
-   <FileRef
-      location = "group:Pods/Pods.xcodeproj">
-   </FileRef>
-</Workspace>
diff --git a/assign5/openTok/openTok.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/assign5/openTok/openTok.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
deleted file mode 100644
index 18d9810..0000000
--- a/assign5/openTok/openTok.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>IDEDidComputeMac32BitWarning</key>
-	<true/>
-</dict>
-</plist>
diff --git a/assign5/openTok/openTok.xcworkspace/xcuserdata/keleher.xcuserdatad/UserInterfaceState.xcuserstate b/assign5/openTok/openTok.xcworkspace/xcuserdata/keleher.xcuserdatad/UserInterfaceState.xcuserstate
deleted file mode 100644
index 6c414a03f385b20527621de239c94a92db4b5d14..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 46383
zcmeEPcVHC7_urZAyCJz$dUB)^LPC0>rbDQKgkHiWxsZb-7w!@|vV$E^6al-Cpde8J
zu^=dl*cB1!q9S&&V!?*W@6B%Zk`UzU_xqFoAY8JyJLS#HXWqP>d8M?r%Hghyk3Y;H
z1~V+fF+3wMBBM+QpJR8q9nPAG;Wk%Ur31bdhu1l4CxkmoXWGl^+<pwYZheWxXJpYZ
z`+R$OR&%1a8Htg{7S-A6>>AqY%Why)#*695bYeO)eVBMAfk|YNm}Dk}NoCTQbS8r-
zV1_conBmL_W+XF;naY$g<;+Z`hH)}(rjD7%%x4xeS20VO>zHNC&CDuhEprdEo@rnn
zVjgB5VYV=jGLJJ)F;6qkGJBa9nAey$nf=TO=3VAJ=6&WQ^8xcQ^A+<o^9^&B`I-5J
z`IY&N`3qqrpx!7RC7=|Piu$5{Xb{RoxhM}6prL3a8ik5bF`9rTqN!*aDn(^z2C76=
zs2a^iE;I+tMGMg)q#=UtM0cUP(LLy1bRSxW)}sd0h&G^2XbakkwxLJS6KDr|4(&nD
zqrK<_^ak38-bA0G&(P=S3v?QNiM~Q#qi@i+=sWZy`W>CaEaoteJ78}diKB2&9F2S7
z7~C7j;yBy~$Kzz&5BJBpI1i7&BXI?ufh(~C&&0EE6|TlL*okX#9bSkR;cM`<_&R(&
zz5(BYZ^fH&6MhIkj32>U@K(GHKZ>{G$M6pPEPf8Zf?vh2;n(p&d<cJqzsBF-Z}E5d
z4E`SffPch4;j{QRmSGVqvkI%SUTgpx$i}j9Y#%nBO<)t*BsQ5%VN=;OwjZ0#=CH%q
z;p_-@Bs-2B&pO#!b~fu`-E19O&(2}zvh&#a>|*vBb_IJAyM|rMZeh2w+t^3h?d)Uh
z<Lndclk5)mDfSum1@;YgAA6WR!hXYk%YMh6VZUd8V1HzPV$ZTav%j$CILxt}%6V}e
zxIiw5i{tum@mvCz$R%;fTnd-UrE%$8e=dg`#tr9+xv^X|SHn5ET5dMy;@n&vSI^Di
z=5h<UrQ9-ZIk$pa&8^`c;kIyFxozB|+;;9U?s4u3?n!P3_cXVcdx3j{+sD1h?dOhi
z$GGpfGu-#w58RL3PuyAVXYLp7SME3NPoCp>z60;g`|uXtm+#DX;S>2JKABJ9Q~5ML
zozLL=^8NV!d?r7bAHo;%qxmuXBz`jQ=Ii)+ehxpEpU2PV7w`-DMf_r(@Hg<c@VD}J
z@^|su`N#Oj`6u`%`5pXI{7!xs|1|#$zlVQ?f0aMLzs(=y5ApBv@9`h;pYfmbXZfG`
zU-)17-}v7JPT&PW5Cuu_5(0!kAxP*bgbCq7gb*o22|a~qp_dRN^cLcU1R+gG7cztb
zVW==n7%q$uMhc^ZLSce1QJ5r57N!VO1)ESR%n=p{3xy?uCR`(2E8Hk76K)n(3bzTX
zg*${hg?okjgeQd^!c)RdVVCf<@Qkoqcvg5$*dx3sydmrp4hu(wqryqy1K}6pSK&9|
zcj27yhw!KHmvCNWL?rT}m)Jq{7K6l&Vkglm_7F3~zG6SIzc@e~C=L=c#Vj#f%n=8R
zBgIi-kvLhLB9@5LMVsglXNpV3tHo=?YsKrt>%|+y8^vYfa&d)ti+H<uhqzvB5F5oN
z@geaA@kQ|^@n!K9@m29P@pbVHai936__lald`J9H{7C#*{6zdz{6_p%5+qTQBw11<
zRq~QLNZyi<WRU`-u2Ps3E=5SOQk;}84VH#T1=3Jym^54(A&rzqNrh6eG+8Q>$|bv0
zA=OAu>3Zn~=|*Xpv|L&t-6Y*Ct(0z&Zk5(Z_el3j_emS2P11wXHtA7mhxC-RQ+i7}
zAiXUelnzOUr6bZ&>6mm}dPh1Ty(_&Zy)T`VzK~8!UrJv|KT3Z}e@W+MMn*E0z2pwE
zx9lT#mb=JZ<p?=a?j^^`1LZ+-rko{b%Q^C3d8j;09xfNk<K#*5RC%UcBRgfcTqn<y
z=gW)btK_Bf)$;Z7a(RV(pS(_9FE_}I@&@^S`2l&Syi0ysen#FcKPx{c?~$LE-<0>u
zZ^;Mbx8;xJPvlSK&*abLFXYqmm-1Kg_wo<&uL`3eMN~Q{{z_-1i(*y6l|&^;Nmf#n
zeoB8OQ^`^WE5nq@$`oa)GEFH_rYkd*SxS{st;|+jid(5u7AOl9qAXReR<2Q2C^soL
zE31_?%H7I6N~7|y@`$oU*{W<)9#x)Jo>6uyuPCo7uPL7^Unr-QFO{#9ua$3<Z<X(q
zGs^eM56X|qPs;DgIh9crRaL#zAhn~~N$sq5QG?Y`HByaN6VwcKkeaDxsd;LFI#eC0
zj#7)%@#+M%LY<{LRkylWy-Ho8YAR8$Rc}=9RM)8wsGHSC)JN6r>XYg&^=b8xdRRT8
z9#xO2$JKY#6Y9I_d+Ph@hw2yV8TEVhH}!Y*oO<4i_44tuc=>wydHH*Vcv-!Ac!hd}
zc}08m@{0FL@fzfn>6PU*%xk#U2(OW2!)xlRstz$77;nahu`vEj(D;!>akK36-IL&N
z^O`&^ysXORb~iG<jGu-zwvh>70yU1{_q8P@mVkoXyzx%gEO)J~%%1BktFN}#)RkDm
zQ<IW1GV-&MW3zMeGh&l-<C9{ubF=efb5b&Lk~311GSc!h%$mC};Y{3SrYqBp>COZ*
zA&iyj!Gtnl8m|eOs7acvDVnNzX&p8*5lkc##q?yNnO;l`)0>Iayfq(!?;!YYf*&II
z4TAR(yr1B=v@oD9+hw=Ss&zVQ>fBjnb&fe8L6nzRy5!m`Z1q)jdF75er%RVB-1$z|
z*fGQ1Q}kr^qOwYRwH*pDzK*G{$+f%d95uE&kX}kG@xyKIx*TV9ZIvAgETlq>yAB#|
zWXra>L3W|lIqK$*vDZ3X&?7!(=ZtsMlso6TfePa)%jL4w%z)Zz>T>O+^)m`;Dx8qK
z$X*2!k-glLyweza8Kg02HVdO9%Vt0JWwMyKjZ8nLKQn+C$P8jKHH+q}`Dy-IfEKus
z$!2nxTqcjnX9jCQT2C!i8%EF$f=<(}>OG;%S#FPm;T-0ui)&j;Tn;=M<E*MOt1Yoa
zT`GAYmH&()N-SwcO8s|Iq031Hy`uVB+A9}U(<V)crSB!{u+Ol$>)j)rHTjMzd(nL8
z|LP)Vy{pVliS<<5+@6A(I=ia^Aevq8s4BO+F08o-a4^5rX>$QOV*f$4Ej5{)U&xGO
z;vQf|Gh>({rkEM4b=10O-LzoM`T#SYnZQhBCNYz>P%T`G&?2=cE$k384Q5>lGo7(9
zrF7nv0&FJ3UzfcKU^d6DF<NJ>Q;B8Gyx4hkY+~sz7mPyRK4aYgxjwT1B9(SmA7`z-
zrr0^l^S7|dHs9{ban{t))X-S>Tt`LSAa|Y3RX5yGV;_)^5Fe?3%W+l>NJxyd*OYti
z!?k`lEz(^^v+EDiGn&7Rs;F?=>josn#UEtsOa(K8shni+hZ<Y8eS&dmcaI%e1juZJ
z$Bqdji$>|fee3pC>uu{=V!7qNZQD49eeR`N)~aEtE$xb@m$X@l@Vup2=9lJH#U{kX
zx2DpiQ`x=5vi85F@;{G2V(P_50PbIO1kzI4jzB_kTuN(N=jybETo$ynrZp+OrB_>M
zO-^dvt!XB9n)@}iEvbuiQhStGR{!hWnvr<XUWMCcr<&cU!#XATf=<n#05F!rC5*<z
ztzWN&89=|9xu(S8KeA{<eVwhe%AV^0_U^2)x#n+Ru4b-f98*RXwcInyxSqMeD8sz5
zoLSNK#!BXvwl{8LR=2%zJ98%!*TCGNMK>^aX)$g2#yY(#dzDxQRsa+1+o#We;0%ME
z&KbZg?XEeFGJ7mtY2x&Eb(6kEW+M}~f!V;^&pe>@)?zjIvWa<+*{t=^60{V$P6Pu-
zEh!vcP*hx!ms?OgYD`H{-tfGf;(}2lONQl5yjX&~358iBi#!Re?MfI|P*jjTJZ}sX
zL(4d*%OhKvZR@pWHnW|13^*iRDd#sb+Zl(E;t6I)1M{Sos3jZUcQU)yYe~j<J;Ust
z<{2$L;|As#BP-=w&oO&o#F_`Q$X>Sr?mW*pfN#MUSoRk#jPGrYU)<ZeFe4+iw>2#_
zY4KvSlU`(ArX%u_me#<$qGhxlk$w7zq?cIw{G$<x(>Z%BtcqsoZ!w3Nxciv{%-hUC
z=8)D`>!<bC2HejaVU9A#nB&?&ZID)=4Q*Mn%{A3nZwp=aISyyNyV&NMVQ*f8bEy1g
zuJCP>n^K0kun%{Z=^_p!H&*zz$xHO5F{#KgqsCD)!(8Dbjl0cjd-Gl6UTZR7{#+!x
zF?6SxZ4JzaTBZh@MxQXBGM~ZH_&M_hbDH^bqFa}Q=&n(nqZ*_zTXpT^@@7dBRv9fv
z%hs~AA^&}shh^=J9rSZtKhEs?Z<+6zxJKqX=8TrB<ux)tFh6Sf+F&hgoYAOpMsqIS
zknzpSuz|ndnR6wU?rl2e!am->{K5RmIQ~;Is4aI~@r9X9lFuWi4ZlDv;@aL2QD-J@
ztHl>dNJa`$kr(QKypa#GAYbH%{80c3L_w${>ZA?VMrwuH7_C?vr%li%X;ZXm+H|c{
zE7vNtN^PcAMT_Zzx}t8VI|@c2$clQPP!xv3Q3Q%aQK%=1M!mEe?FQ{`?GbISc2xUP
z`->nSf~*835tK{NID%#pw1l8l1Z`+DcTgXF?u;n0EH)R0a)%qBYp*V?nh(qkhQ4f8
zNrej}jX_nm`kJ!JBD<SzCyudK3`nc6r`RguQ%jTLbs3;+Rz6KQ#OAIXker;JkrAJq
zlA4m5k&&E`k&+1O6)j9pV&*PQPPZjMx>n07O4dmlRbpB6Kay0MYO6@Km9`@(JxPB<
zicd~YNlr{lNlDUIt_vxO&qydOx3!@tL#Jr;|K3TZiDe0i2}$iJYSl^UNogsm&`<3<
zDK$C0G{v4C--e`tI!Q(U50d_-lTtF0lhaaR<kHj9(oz#MU~t-#lwvC_P0L7ZOHz(b
z(%65Wq>RLbgp9<Lw8Ye;^wiYUg!Bwukh@^ufFxUDSzD5Z=p>E*_ep}$0uZGqB_^iF
zr)MOjB*tG9-SD*Bp3r9CM(8BLn*F~{xW7YpYGPtidU6tsTxxnkN<v0LGRR%+CtQ3+
zN@-F>8<NK8Bu)N*kd&O3k)E8|8Yt~~Kt@Jde9A@Ool=^fP-ZJ{%LB&iBu)K)kn}h3
zPD)7103@ZPrY9z)q$S5E#e+QBu9pBy87V1cZF*^nPEyJLgQWPx44aL<4SDL*dnr97
zJw7ElBR&C$Nl1%N1yHq0Vsc7bMR`J6T3dMAbdqfU50cU{DoQghHE_^X8L0`W7l(IR
zT17=hTUJ@2lT=n>x$0kL-U$hb8A&OrX&GrL>8Z&nX&D*m2^Z<6(nJ{8vbOl1rPBoa
z6aV^@OHN2k%SZw2!_-TOPla*3I7wwGsYz|XRI8IT<A3iaSauW2fVH%$PX|*%S~8H6
zk(88}kd~g2mXw;Fe6en_m8K@!Q`-W(UZ)9Uqxt{#&?P1$()~vOcuHEr#pYWnaHaJ0
zwq3M9Cui3GK5Dj#1bc!lrCk@bEV^kai5aPh$w?O-wWRop^0c<#UZRs!{lAae-|_B*
zq*RcRQed<)Qc_c4;8HW-ecr<+JUpPZv^2efj+*|yjFzICn7Af%HM#~}i>^c0qZ`nT
zXc=0LR%lMGR-3K4G`Ci#)oXLKx!SxYbTeA1|Exl{q19*&T;HzE*B0wPS81AdjkXA`
zuchxfU0QbA3^_c`^GZ-+>DK;XrE~5GM~$P}R$F4}anZ+gi!jFt$IrGIFcm{Cnx>#;
zj>GMMcYSylYF`R$u{rDO^5(&=FO@(cP5V;noHO8UyF90o?(ag1u=e%ndr?L7U^~vK
zZ>?RdE@Q{aNL2;<cYoLDtopi2rwb}--zRkIFyC2K4sUJx3m3W{UbxT$+5-B94ZHv7
zL1x?iXfuohe6)qo_w*BQ;Vg_~j_`K$7!w3LB1?=noNLjOjdbV3eEbx8nh9z|JJBwU
zXiFQJO=vgl8eFX{nM`Res42J4v%9C6FK)x_H8bieeUTXU+!;pyXO{CKdWDwr5_(y?
zPP@KUIb$oJ0T-5F=Gu?mq40YP9YAlRgXj=CjE<nA=omV#-KZ_omTN1to3xv?mD(-Z
zt=g(4bixC_51Qfkv38pWerucIcjp!O!R~P@kp5fnJ4503y|&tf-%k{NX90fj(bfR;
z=qKJ1ZVvAs=)3{0zW`jf11K;8aNVITxe!ntzHH8d1uW}0!V=)<uD{P>ruV^J072M-
zeX$?*#{oDH2jPym6Yi|tqus0Br>)c0YYkeXwn4jJd!Pw-H4%iZ27++7w$X#2&CLjU
z=n8@^3xaS0AP6UFo0<`XQvg9Y6|JEk?Lj~f{lr@Yb9e{fOdUaZ5Fn_j6<fIgL1y}V
zTwuUw2*Bsz|D1jlo<!kOh)3fwxCj^Hv3MLFk0;=X+7@lAwoQ9f+payPJ+3{WJ*n+z
z!jnDlnT~C^6s^SN+EX6*Jgq&eJqO?RT!GK!fzNCTAD6b%gik$%&m4dce6(Ev9r}s4
zRGM&Dj5Py3O8`F4P;Rmm7|`za3@G$)SZ2JjqFIW}+&AJC2AGxun4bUp+-CY!_+AR8
z+wf|<2Cv1p<2&%3_%3`mzDIjOdr^Byds%x$dsTZ)dtG}&+t-Be^MGjsfaw7M(<bdr
z510-Bm=3|W!&ks`dBF5I1=ADSeiKYjQ84WUFu_NA3xGsF@xJIKbA0#U7YsD*1vI@)
z@$eF$>0o;_t&8zRkD9sO!21mpy$L8f^7pyS^oQ{W6h%kyQG5&^$M4`1_+9)SejlII
zj%mlWceE4QyV`r&``StE1MO53KIK8tr+}i*0Y#^^4?QUQ1W@!jeEZ@GiY^a|ex@k;
zMf=D^(eD&R=Kw|U(LM$Q(NDZ3y?J<9%<?*jSPnq+DZqgh0Ysm*2a*2?3uqhYuW4)t
z)}mvG^#Kf>{`*X3`XIIkV2JI=c49lTUD&Q{H?}()%!aU5?JMnT?Hlb|?K|y^_PzFl
z_M`Sw6B}w`h>gNFHX5yDW3;m#4E+iiItSnWxPqa}f+02?FvMnPKR08D?GG4Y2cR|d
zqx}N-p&#Hx3(WD&Wd|D|$_EhrM)6PpAo{&Mh+GqV(F`-!D0Ym2qS1h&KmR_LnSKIW
zMo~18oy1ONr?6AmX>18Qowc#0+IfN)f<WmR6T}k45yTTD5F`>LHL>L$I5`X<o2@2D
zHt|G|YKYkcb-044%Y&!|6j2KaQcOr)1(0gLQ(%ttwd@TBp03vjL0$k2a~t5|ayEN2
zd#eGZTeRy4^8U{mZU+rSz|tM;o$Oug-RwQ=z3hGLI(9wVK#+wXUxNGy@+T;Opg@9x
z2<k{sCxSXRu^T*KdaxNx4-?d-1x(#cFa=)$)8zrvP70=71a&pRwEL1^dXd$)f_Abm
zQ!sU>d}aV}r(fD}Clh^dvIh(>y+y$k@}DytWj~}~I>sJn-(gR%@3QZ)@3SY_57<)#
z^&lvepfG~M35p;nlAtJpdJ+^(P_HKTBM+E9ZwAv>1jV#~Db55_!WA%G9x(k%!SowJ
zy-hIvK^MC}VX=b`L9yB*{TGN#fz9~fI8M~L6DLqW^#Ocvvet*7_;!f$6<#(od2_xx
zs5lD+RpKQwnK?Rgp@1r`6W5vR!gb}kaoxFKE`+mk0I6hxQV2>VD2<?Wf-(r|OHe<8
z`V%yui3>AP#q~5$#q}m=U<;};O;lxHLDgkJ6_)|1;$TPyHKU3fa48nW<#LAn#DV-o
zP!@pW((4^Jf-5x8G>W1r=Rao{$Jr>D#&Z+6iQFV^GB<^r%1z@+xakDt5tL8RV1kAa
zR6x*Bf<U8tI6)%_8rj6brjq`%iks04rdb4yY5~(|6HLWdz;t=QG>?L5K0$>hm=;|U
zOjmQ)8SLp=3Z^lX)7(JWQ&D^Ngw~tP<|ghI15hg|pvGPzlbK^J*FX_<J9h_nCwCWj
zH+K(rFLxiej$2RAc!DMnG?Ac51WhJr3PDo|nnq9wLDQSKMh~JkVH>v@t>hje$ku|W
za_w1yW@w8Es=NZJ%L6IcTWa8T5>#qJ>KT9(w;QdYAA-v0st3Pd)$47J_luk%Msd0r
zWv2*vjl!y;J*?E3mX2n&x444_u->M?a$F*tnd3P3F$LB;+zIYo?mg~(?j-jCcZ&Ov
z`-mW5Jyit3+glAmPJ(I)noW?4AU8pEP249QV4dc^<h}x6eM3-v3$W%91n(elB23WY
zE6BP$$b$W*2JRd|b4+CYMUizLkOd!t=2B$AFF=-Qxy1{-e#W+wmng#m-Rw=gN|Cjo
zJ+eATVVU90`{F&C0mJ+8fjY$a01C0IE|K5N(Up$`i1FR{?tCyG!dv+sd?+8rhw~tz
zYXkumO9{G~plb-amLMqfdV+2s=*A{K%7hr-+gJ_xc!HL-K<p-SHN52tz%C2Gc#xzT
z_<;m1Zw45j1pwo-(Hi<8peO<WgI@qJYz}t;KU`lC`C$}bH&cL&qySsl4q%qEW}YH`
zoB^t_6jZlfB9ED43O|E_YAQdCFX5;2HolZE<I8zFUqR4q1g$2NytM?~PS71-olnqR
z1l>*0JxzS22UOL~paQOTZwsi_nV@R80;<acD%g%{;6a`IJ`+?+0aSmxKgHk3>nCwL
z`Q;Q)>j4~>me=`J{2BvIt0|fq|8s`Bd9a~r;_u<_<?rLy@$2~pzLDR+-_Jil(ES9#
z?~Md)BIrSaHWSoD5QtE)5A{eBzsUophp~;{f>!d|2-?yDrbnrC^*CJvpSXgi%Y!D^
zk80qdm$#Z|dY-bVy}+X2L(n$LqTm<ZLhosEkJtEp29J7!LTWqZH~T4%daNCf@~z$J
zivrAihxua$vW`+@fil(K<}-7=&%=RU1AmgBryBTE1T?K$TaoggQk6i0c9vK&|B>-g
zA8M!^S4FLl`i!tSYU11;D_FC}FZgf4s+B*@f60Hvf6aqX_B27y5VV^h=%wc#;J@R~
z@Za!1@IMl?hoHl7kD#Ljy+Z*S35H&V!k%uGWS=_%w9uL_jr+PzTZyH!X@)ccOg-$b
zf^x8Pc2qdP#<j%aYdixTJFqXB;{Xd-P^2r!ZZX&`s&mzs)z!P~ZB0W<EI|d?IkuWP
zHh0?xX4B5`=fT#E|AYUN|BImK3EE503mXJRKmsP{MS@-;=#UmRtsuLZ<f1ZL73khs
zJU74~+fhpu`+_~Us9iXiBqzkjgHbp&*Pi5bR)-C0R&mo+?F1PxCMX2-+f3z2p@TqA
z<pgiRhoDyodbLsT6<`<pHG*E(mW<Wy@28eIYbqQw>Rrty=$)Z;&N8R1*jZmz*-W89
zP;&!?PC|Dk=zgKI&_(DfbR*~ug7y*gCPDk}7lMTl!7B71=q-W{5cD=daQHmdQSNY7
zk1GcYvNHQ5TWzh~2Bzs{_Q_6{1Dc{&Jk2qx2+YCFicK@IxPt6lJzG(IY2Ex<dmK&X
zD6DkW*i%aq9AK(bVu{wRp*$(GJmt44FK)PFMkN^Fg|<yQs)c~KLNFY6*&KCYgAN$t
zq|vLfv{&N@I-<o-%D1J)CQgb?8$I9bi$ozAW{!|V(6I&~g@9Hd;IlIwtzk9JxizEe
z>!@ZM1<H6wd0k~#X6-4xa5H~jAq!0Fg?>VRVSq4D7$js8bb_FF33`v9_X&b2`N2lO
zPL7Z(<O%s`rH&w&q8}3UIYD0l6Azn2v5;>ogGn|y2l~_QDx{7HN-Q1eWU!YPJ8OsA
z=h&;7CqXU%E8H-hF32r*dT2E;UFdW>s0Hc>s^r>{KFq3u62U=%y`>ret1&9sHrF^q
znRV*Igyf|7xRl=3*yO~;M%RsIwml$>5sHLjVXQEYAb4B*n4nJx`jnv0pgYsY*kfyL
zu~iewCJlE?ik+PnJ9}dNq?~aTvGz%^L*3&iWsI+kEi8?#8{?RiJ#kWOQhID%yvyvm
zX+jC38`63P%zRQNR55W63gv=bs1Rldm4ZW<DZqQ;mjr!H(6<DgA?OE!ej?~+f_{Ba
zs1|Ajr%)@*7F>c`s3Yiif;$l0gWxoRhZ0;u@N9ywX~PtS`36(`3OoY*Go}c*%ms_X
z8B`}%H=J)}4<=k?l=clcC-`TjwdFnS3%uGW@VgRA|9@8C#ZAjw(|ChX<oExWM#}py
zw5e}h;7vw>KbBZB{uzy6m3gW1RvG1;{l^5-Heag1+l>N$DX|n^n!rM5xw{XnBh?PK
z-3@aqr;nkM?e3GGJ>0zC>N+N?sw%F!bzj_LRQ20GUSokLJ6+`$hk>q=A*>UcKwuQs
z3k^b}utB(ActF@FY!V(6Ks<!k@jnRqlOR~4&J)ZKj0naAvjlTZ!b7IOC~Py{K7_{!
z<~;%<Xuj%N^aQI{<i*P(FA5+YHVAtO7MkTn;U$n4g_qG9`XN{Zd6E8tSK1CH*LzdY
z&nR~aZ-KaoWf1#>gCH(qrM<YwA2%}{6He%|qVNvLikKd&|6L|C$0^|}imDHVkA#nf
zPlQi}&xFr~FND*=mjrtg3_f!#1p5-~N3cJ^0R#sU97J%(CgE!js=jYV)mef&wV=v8
zCdVOHP<2^QC1OC82vfXsGpa-ZP$h~uRTM>q;4a#O@QYwLMYkvx^L;|}5&iV{5Yd+c
zi=LK?0Tful?SX}cHN!;gEOyg@C3dC2vR)#SnIlw;1z?F`Vz?L~Mv75lPcd5TCB}%o
z2@WMVjNovBBM6QpIEvt&1V<Cxi{O|hG0p&%m?$P;o0x)Dim-0?Hh@JiP#O;}xHuVJ
zaIx-c;)>l5b-?ql+Wm;R6k2%%$C}U@LZMZF*3b{Zag<@fFF@8&bHEG5(T3fRd81ey
zZvbr^1zJL*I6<69a3aA;?U1GmnBr93m4|QmP>Xq}E|!XR19#;Vcd3^u!>o3eIEMnS
zN~{)ZM5kCQ&K6ywTdWi72~H<CgW$dd_anGJ!2<{$Nbn$nGYQUW66cy6O<ZJfG*Kfs
zyM?3Wnd{_`D;(|eaI~8!>~1DF$AsOj6n3iscJLuMm%<Ky0qp$E;l5M6$3WTL6lM98
zGu=no+2D2{^Tp%LOdG_F2CN>SuqwDjCNsyw;tq<cN5n1SR&ks7sJLBxOnh8?LVS|o
zVFV8+cm%;C2_8joA;F^w9z$>u!NpDDQyx_97M~TL19tX2!DCxcHG$yC1W%#tZ0Z$U
zT^?NRr?`5H;Bh9d4pLklLYwJ_;PKi*{TJZM#~knz;`;`!-lMphNFnk8#nq(txDr-}
zWd`W`0E~q-^M59uHX!x|h1j%9<TrDCC;m<$c1HYO{6YLt{7F13{w)3?{wn@P@N|N0
z1eX$AMsPX7c7iJio<VRW!Hy>JoCz_BF&LKweivu9K&;AST+S;1yDR{cd;wq*$jGyr
z0VV|kz|b1w2N;&|V{YV0-J}p5Tv9LvS2ch`>OsL((;i%Sdow<yNGV!Jl+=?Vs`e6@
z%p85BzJMqxUP_P>r6eg?N|92fG$~zzMbJgCo8UTvVOg9*@LYoD5j>yZ1q3f_lKOcN
zl__OGD^^Om1XD|E`g0Y*@Si}VfM+ee0;$UbDcEjnkYE*AY(i@6B_TCMDls56jY4V(
zMTd<-N^1`(<+m_{TQQ7@lo`@Y16vM?t*bAQ+ssibEu`3*Ex9DOR43I-bELV_JZZiJ
z0J@f7DCK&BZy@+af|n7zoZuA%-$d}uP0}I{w&2WE#}=et*@CUxOm4OI3bZZ{v{q4Q
z-A3>&CbZT9w4~e78tG0dX5C7~tW~<0Ww8XA1HMjbGyv8>0k)b#<bDdUHSGb${$Xa?
zEIn-C>LH3NYLWeSnamv9rN^0|2I(<^?`)8sAownA$y7KX8VOFi;0OmC6POOv%nZAv
z7nz{V($ms2(r)Ql={aeS^t`lJdV%132)>u#`v_h~@Opw92yP^J1Ht!imR@2afTz7G
zy(Yaby&>&mA_#r}Tm%C@+eq*xg5k{><bo!+wPYgrLj@msMY+Q!Iox?wjv3V10~{L}
zw~dYS0{3_a_+te(W3ZR*Nk7i!a@gq3eL(B9rtiEGi=S~@4_{CR?r!05%5&2wH{Vw6
zsG47532a>eJszu~t|{6P0h^y?E^svrzTh0S^iaj^sICVuu})V)Qd}~43%=kkID{;p
zQ&+B^$i!aotZ!O&UQS*{YEEogdTwqkIF3q=O$R?Dv3Yq(iD}7MS@1k%+`RPElGNmJ
z#u3gW<4;0jZ`1fp`al9zuMN^E=|kxwf*&UM5rVgDkUo(<l|CbQE5WZ5ypvAzco^fh
zzL1;!Cd1)HQGInaxX?6)zsNp=`ap(`?$j>Js9Ji~0gr;(Jt}t8RoV5|OzCT8*8|cw
z(znug(i!P{g0~S2Li{d*cN6@)mSp1UC+Sy8`dR5`=@)_@C3ri*k8O~ClYVD@Bp7y3
zpP(-PjN{9;l(!+Y(B*)0u{s#Un07?9Ntg|e=8EjKaFzz+1;=2QPHkizXRE5Whh<6z
zJ1=9b5ty+yH$Y}(@gfb7C0V9@zk}eX^u7<vY+ejTTgU2dkInoRIpAXX1LYvv0Z$YB
z4DEohOpB3!OkYpU-DK-Uate$bDu>Y%FZ?XQ&uL-J^d6L>7$3Q(98J9&m)q)WqkMx(
zO3mOP2(uh7i2r*~5J@g}Ih}P75yWCuz5D}$L#(}G`egL&*FR!FR>9C=!$%a2pHxy>
z<*u8zu-Vml2X7yXuOGN1Zti8nUom(B&8h<yR9atWcWYP+(b$Pa^<`ytd%3;*P+*XE
z$1dG3;uyWLQ)i9S_{Of?z)g7<EpXh(qI~eV3@O3Wu+w#<M`&2McSK}V&uDm3<XB*b
zdMom)Y%|={S*#u0YB*{E5%7@mz_83nqq}|YvVhBTQR_T8t|)(GQEYY<;OC%s@7Or-
zgfq5)R?(8V72TaQnbHc*@-`$SCK(>nH-M8WtpjzDu62ZY1(X%j{9_Boy20~}Co`}W
zgLX<~tGiY+L%!WcnHcy+1s~`$+^v#Wj1qMs^+FE@c@NBN7zCcjgD5%KdEFaxa;X>c
z#{9vCBk~eUSIA_RNWGjpTOIksX{P6CF`Oi~C<9m+i*Rt{sKU_~^Elnc|88U980c%`
z>=beokG;?pZ1K1;raxJDK4GHX0qtG;PAD7$k0(z7-hW}oZ<so5%tda)Eu$w}h6qZS
zZfnLy<Mc5{%F68(-ZLs4GiLz_<169h7igzE5!gDgKm7~9r-(Y#hgAcf)q`F}wT>zM
zW_CQ26K_qhuv%9w_;7WN)4O)|Fjp~n*v$q1wFNmjP_Dj|SY&WO-hGs>ZzaR{R>FCH
z6$Xe^gIn;yW3nbrm^jHQz6X(YI)bm&IL60T=B~{uEF4ZzSOc^eXl(ua=c5qN2mT$3
zrDe5#@(-^0azH$!+XJ8Z<?ga-hC%%qM*O0z)>X$aayZ-%n_E{)uZO^Oz^vjiIdDCN
zVI;5Syl|Td8EmhyyBuZK!Qc$oI@ks)h&3@T(F&(`^z4r&`FH<SSJhLx>Aw*8c)4d4
z4THaNK>s!6wp@Ch4%geuY<We^*I&+Yj2j8pnGAzNYwNPd!1YkLF0G$6HVdwM!}Y@z
zuKclZJrJ&sSJn@q*U1dS1}&&89uL>Sa6Po9bmS<w?hDtIW$v6waNQHG8!PPvbey2i
z*w-C(1;ua;^|9Z&oMUMEUJS$aFSqCB8TYx0S<YdUhETZwxO+|!y|2@}pfZQj33YKt
zXWE7q!ZmOq?k9WIV45Dv;k(q<71A={JD*!qHImkw3D;}wZoR$moj+PvSxm<)kzs_;
zI#)5x3$zJv8k=7L*ZFWguhKPy-iP)I&(>DyID<YB{&3Zgp>2mYiuv}Mv9u2<E;O4f
zZ!la#Uy08!<B$#f%{!S=_+18ZoIYf%5Xs5G%+arAfD8R<_*j90-tZX=scPWkf)s9M
z7Tli!*PnWx)9*9~%~K0coZu1K!Bjy$^R5-*McJG4(K2Y<D4L6w`-NU^S#y1HP+v~)
z157<UuY{OTHSpUCai>n{cjf_o)$lzB?$*Pz8F1aYmPEi&B2%c-YS2KR(^^h9*W!d6
z<$7I4KH5rywj7|jhFJj5C~bPnxsDL6C<#9OAUe?iE?%$A1u5n;vHJb~`aQGOmX_1D
zo%Yl^8)$9a`quqr_VM%3Uv*G&6|~TZt3^j-0r)g_L5~}`TY6Kk@s=+2J!@;%-aNWs
z+D4sX+IH(wSBazSt(9jkF={QNW!4_sX52=##)XcQ@^-j@x*(d-0sbU^n6bj&PxvGJ
z7jQ+R8@<QB<DsXp6&`5cQ{*_{w*xR>BEUdanSO_kMHT$eacNIy%a|GETu=gH^?E60
zv-DCZ!m8mzN7k;7>tLwg2IE2Fmem7JDK=sOF|EhWsHN2mcxBNuofzxU6?<M|tPfju
zzN*)v_x2I)sVRrNURhL8b4!=n+G!gXowL`rJf-7czkcM;BblYW<G00s9e;oP!|^}H
zpKM7He=Po+_#^QR@Z>A@Hi)dXo88IoV)rpt__m9Ep53WmJq)q7o?##L<ZFv?V;;3d
zI7LiZGooo5>ze0WYwWjbq26C+Z_)JTNX^uHt^G)}MhqRXe@0R3a@ukPV|4Uc=N;yq
z;4OOh@=o#2@<!f0;3v^L6RyI%L%oN4cZ8=yyraBxy}Nq)!<gfg4m#f{!c4x<!o?=S
zQxgfaeU*R%m(H_n&FyVHzbJ;RfQ%M?Mmd_J^{hf2U}hRM89c$P)9hCrA+1WNV#Y#E
z4rVUU;evjpv%Lm*iM34{W8PERoM^H>h8LL$U;vxI6#!=%#aOv4E``f%zNXx&Km1T$
zWpM9UZV)^j2&R?kl#jJ;0hDg^7v*Rdr@r;funT=57FnJUrI)R@4)pVe2>FZ^qLRUV
zp^q>Wt}|$=I{Q43Js2j(Sv%iFwGgeK307sd7Sxo*^|mI)C&21PWhR=2VSXH~%R(q<
zUs=6tj&YBpe|Sa#c`5)R69zM3uv*7LtI{AQPbLK3849roiy;!sG-yX9jHC;Cb`e7$
z3gL2y1F?p=i&+Pe7dAuu!R^cr2v_ht^D^@Wa{zq*zYFWhrx0`S48$8ehY%9Mhr2)O
z3@+FsPz*{$>1ZIt861wrpowTY#1*VT^$<(&YH+`~3StR1fIj@A;F<Ax^cr|ad<T69
zQ38KJze8L=FYt5M9ijsE!Ra^)4+FPlQz81_Y`g#>{oM>+ry3!;-;?-x{04XtIt6k3
z&O*#Sl?A6T5UVd8qVkObj~*2eiSH_Q8ARP{gt&XV*jLy?>?!tZ_BT%8{K4os7DjOh
zM9M3J7<pH5E5PFLL5P3%B6kQ3!_IJjL1epbd<;aeE8r*aGay#ob^Ka>BgCY82{`np
z{Lc_&E(pda4aRLE=m#zoRzNJct->DRZBT4E3mOrfLHA$)#B8&{QSf!*o#MmdbK*gW
zv-T^*Rttgs@qB3#L`qvKt(BT!8|k3*xpYppKoqmS@+i3+qLZzJC}g`J-q@$|ImK6r
zQU)l+5G{--cR&oVmz4LEA0eh!D8%m?tvVn+*B$CM^;L+v^&3Rk>gAQ=HN~sm>t?S_
zUVFUW@%phthYpb)GCNG_P}kw+4x2l?(BWi<U%mak<Gc&J%e|L)-|hXR_d)M(ePo{q
zpDdqgJ_~%-`aI_Ime1D~*%E2VvDhqES?;#%v>daX_4W5n@Ezq_?YqLa$@ewiFZ@Km
zNWVP4a=&Z*Hu$~Z_pv|gALgIqU*><c|NZ_i`F|Q91VjZC1k4Or9`H!O{(v)qeu2q>
z;{xXe-W|9*@Kg{R6d6<yR28%`XnWAnpx--o@0ium-toqcTRI->_)Dj*oiaPwJ1y(9
zwbPMKzjwBF&g(p@^R1nCbbh}J*QHmN(Ou?txv$GhUB2!b(6wLJvaZXzZtr@c8}8Pt
z+n8<(yKU&UuiM$~!QBUUukC(k_ZPZ<9UK&#89Xz1b?~#nr$hWh28K97R);(n@})J<
znq{rB-eG;wdZtIW9z%N6_h{&`zsI@IsL-*YOGCGYz8|K9rH567tq$88b|yR|d_?%7
z@Q1=rM92~85tR|QN4yg8OJr2!_{i%ccSL>>)hVhVYC+UPQSbHa&~s4F**zP39*!2G
z)1zla-y40P7w(nPtFqVKz21t!F{v?*n0sU1?#=hk=v~vhvG=i9uh^{EIk6ALei#=N
zH#}}>+>W?!`-JzI)aTYduk`sVJ|(^iR=0N({1S#HEKS&z@Izv+#InS@6AveKNXk!I
zlJr#4_sKEI_T>ALkEi&jj7YgYWpB!#scEUM)Geu})56oHr`?lwEIlB-FnvY(s~LPo
zcE*y7XEJ{4o7%Uo@Akgm^^5H{t6x*UFZxIIxA(ul|HlJD2iOKQ3^+B=I&k{H^#e~0
z>M_VRsBzFonPHjbnHw`d&x+2Pne}kix7qR8uIwkWf63{avp8o@E}J_zcUkWKJiolL
zd3WWV%n!|<k^fNsnZYT87Y^PtgdZ|&$gM+;6?88sE7)9cW@y^b#Y0~l<~6Kn*j>Xu
z8s2NTYxu4ac*M{Vw~csjWW>mtkvm2)qY6gdHtPMtsKVKWPmdNx7mmJr^k-ud#w;51
zN|Aq2Nl{bL&&AorD~sP9+jDIF*uCR?#!VTwdE77KbH}e5e`-RX35zGZF|o@;$Hb>5
ziIc`n+BoU#<h;piCVx65Wy*C^j!uo5I&bQ0)4EKnnzp;dr^HtB*mQpS_~}j4|FDg+
zHQLUW7L?vodZsL=?Dn#+$}`JXm!Gx|u&=UzUNN9zRmB%G2F$o^#_7sIm1`@%cH}tj
za(q8?$jo&!f0;FE)}~qKtHxJtt(K~%SMRLxtC>~vqBGbz&-r$3Ozm~Gr)Kw^y=L|q
z*D%*cH*!yPKUEh1FPQu4d)8lD|KXg0bMBt=>)dg3ADibpuV&u9`Mu`fIREnn`3oLc
z$So{exOY*HMP$*3i?bFtT!pSGy=w20uqD?l`4o1>9wZ8xMc!N*zjW2opROK%^{#8W
zU!z^~@wJ1meds#x>s;3zyT0G`>u%s~aNMx}#-tnXyz#GP<;z}Q9>09;@;_FTt$6*W
zgq!ZT>HN(VH}7AWy7InTgj;HEIeP1$TOVBIyK2Fzk8c}s+moxUtCy|*X-&zR*VZPl
zU3a^3d;RUF?ihZ@Q+I~ndCQ%D+*Ntkk-M|+-g-~Bdv3hvmwU_aJ$PT{eOuObU$=bS
z@9Q1wk2ef%c(O6FaqR|S!<-GD-9PUBR~|@zVDrW<8<%hVb5qTxQxA@L@Wst(n>ROg
zYg+jbeyIMT(+^L1_`oB%k36*{c1y$7psmZdG2805efjA0M~`kFwteqo>5pxBJmT?t
zp74KS*^}tW`A?qNQMu#PQxl(hd*{%ddw2EQ^~BS0Pj7mr$1`{D4&1%+S>@Slo<0BE
zg6GcesonGS^E00RcyGzxcVC$B!r>Q3zqtRUVK2S<a{kLNypr|GbFU6~^_kcDzP9uA
z^w)R1k^07y`%?Bj@n*`KPwY?K|KwX~Z#{J&<G`-B`@j9{!9fR~Ka_ju<--Ms-#9Yz
z$lFK99zA|+%CS?&%a4EYPSrc#pO|yv9JsOL-&^*+<^8oMyPa(OAo_!?r&3St{xJ8$
zeIFHl^zO%HAAj|U`;$LDz2>tHpRN5o<nzs6B!2PC>HO0NzMTB!r(e~6b?)oyzVZF$
zo^N}8`}lX6-|agy;moJsyS_jF!-^j}|G4R=<e&DQEj)Yj=jxx&{j%)W&c8nRTl#OW
z{67Bo&(F>ML;T~8KcoNL_1Cb!-aB7?{ygmU)X!<NgVQ*7Oq=hJV*Ubii?DG%-CtU?
zSl{OHY^s$To0E-K!3Gm-|6F(<c5HkZ8Zt3jmn;e(%JFEX2;PJjK_sdb%x%nirV*rw
zjm$QXA)aGihuFn$K`^1i5I^WR#4!F4-t&F}8G?i8FP%^i6pkVxY)dbQSlkayK$FlE
zJua~W&C=r%yFreai{`^|UK7L^J_S*RKL^?2E07+}qF>N&=nwQ4W-!K9+!rDU55zeT
zKX^PY2N|Lk*Mkf};{>mP7{Ocd;}8+}4SW*f|Ne~s)TIc2)(TQYHk-#5u)`p>?<jTx
zcm^wDXR*}~;dgex`vD&Xd>8OT!1+Kf&@0d<Fd#5G5OxFTKa7mO%#!B6&3^*32;QT+
zr<P;n-cvmho^oOHc>~;vWng2bh<-Eo!u!anVAvs@l@sJd=@&U!PSKA9_7V)|OmJ2O
zd)hB;lzx-b<qQxQ(q&LIgA;<634Vp(*Yt~*=~+SOr8o8IM&^G^1Y|*?s7seb6BX6X
zrw3L4A!RWHOVU$X&_OvDHsbT-d;ne?4WbkVk&lLa_3Mdbf?qYdYlvK6^o+d`w%@?<
zzHhO!95&c&b=HK$z9}iztPz%(`Z0?<g4xvop+H&BiHba0E@B`e7Tjx)iwS;{22BH}
z;_`S;O5^+F<^Wyv*)(QblTaZ~mu+&XTn2)eU9N!eL_yT>10NvxAi;+TK1%R$f=>|q
zE(9j3qy|%-poy{`M3CUOFTd8mtVaSQ_|QMr`oENAT}un*>c#~4NQq^<8Ro!I8e2xK
ztLms(S8Oef=4GGzp8`Jqv)UFJwH^DH%s6CXl=sd*?vzWJLU=lbIZcbzvRaSyGNY#V
z{;fE7@=fv@CT^2_Gsyn8$hXR?<lE%c1fL}M1A<Qx{2{?`sQEF$pKOxX%D1DH@}2U{
z^kA9bPYK%qr^zfFIG?2F%5?G%gemKZfm>`VZ823Tf!G%iwJ0?|Ha$BrAI@6y5@NG*
z<FjM4({q!vQ}eSE6Y|ri(d>Fq*nAqX$~bs5Za`sRx;37fFzTTQ#yjdNi{J#N$_`IT
zEInISY~&~zSu_S>q&ZzQN};YgOt~FICotKH{ck9>boP)@>~vO@+FS)@t;UILYl=LN
zOg6ev-U_B%@+SE~d9&OkKO{daKO%1-7|tU<C-@73PZRtl!Cw*lHNoFJ2tE3!yj^}w
zeq4S6u6NM$`ELnpC2S;NqY3y7g)Z((`_=+f6+u9Uk+wMwFv+3^sPvZSYZe6fHEtEu
zxNG&ZB;%Gpn9)H@S2!i8t<>Y{&ak_tP%|9!3k1ZYEjD8pw;4A$y@3#Sw4fq5uB@Zk
zT1XjN=YV?-yPK*n7<Q~QrP&pG<yRnppZtRSqWqE!3&nQ?pCK5Iqkp(xepP-=eqDwb
z#Xk~OBCH=_bsGw6v$dlUd)L#pI1mI3(^fcR{+lGN0vsFpbRC9nf0J5oyT_*1Uhb*N
zB>td$f=-M>@?rUid{jOrAD7=D_$PwT68tm4a9;i^!JxMI`zHBa7`XST#*chTh6w|1
zT?zgJCIpNeBCJ3yXLIwKaSJmav?aR1jiQ_p6qWVvd<V5x1T5#(P^d!OT^dR{Z(gkp
zB1M!JKr~->vC9s#p$FWC{BSmA#=vWzl}?1*`4EEEQAQ^pq#f*X*4M(sfn&2OTP?(6
z&Yn+$=7OpOB|?uV2o{%m1r!FJj%Y(bw!OmXvU{pCk_WcLhD=OL=xv2iYKflUkn-2^
zx1i-Be?#z}4KfV<Uo=QIty4eIcW3F1GJE?+`7B*Gf7Avy$k4mzspX<>6DI#A|3M=W
z{wSZ*1{0QPl+VfM;4l2w!U~%cDOlk=btybyv9`o~Bq@qnvZ4}}^^~l5D;CcaU&3-N
zPXd%6c%lRnmT%B&qw}xJrI@x(tI|~gJLBdiE5U>nTgd34fFr#1>s#uGP-4KITs{ul
zEIs8z3fP7GMp&7!3I!RfKA`lbh*J6}@r3m<z~n<%3#EjLJ1uDU445%GqiW#9(?M;<
z0Z0*-PT2-<9(<U9GkY*qNrzS`X@u?2pkxph6o&qGAYsdBpwUjy=xGm+me`?6wvyXY
zY93*ITl#8<QqZ=qhASXdZB#}mBb8A~A@tT5!uk_7fUqz`L3)RE+{kAuW6>HWLYY8q
zj#m)26R3B26E@gbny4xb%(t>x^nlrAL`&3>2*>R3NaqK|VC3zl2HyH|0ZKL<bF&9~
z`nP#L(F0{;9iZHJR87@<h>1>vfM!=Y%Vt5Q?zE=nM|!kvJzn~Z=Imy#+7vq|kSL`}
znNm*J&V=nk*sdFt3S|apYO&o2+Z`5F80<ikxHj{VTK?ze<<z@eK<)4gB0$>VW|@7M
z9TajBAk`4t90)oCeA-r3HQy{Hr*N#n{(<nEN{9pwdGuE6@~Kio1Iof|)RL#raFV6*
z<+jxL@_1nVErY7Zg@re^OR`wAx%J9iI;G|iwnu|9kFcS%Z9VFN5rM^ig&o>ao&y5?
z3|Oc<p@a%@-3B#_m|Yu`#mZI662gWNHk_~#T2hH6xtX_L5Ye1QZTBpJW}$J0_5@W@
zO8sxLdEPl;VB`Orj8uWdZ2YwfL_cm+u2ZfjY!qR8>dxcnoYn`JV#Q5yG~8~R1?;&Q
zMj;c%c%C$4Cm-x}J<GIN_)6tg+OxM1wpRlaVSuKqCuj4rL)UFX3&d^aTdUkb^W9F^
z-VMr~gpH-d_(FhH&qA*+J;n&!OGn^7Wu3B~uyKS<CTyDLrAOJIY+`~oDEBK5C>sge
zhp@o15;iCx+bB(hO{D7}*h5W)qFYp0rqFLKVwDBHQW{6tAf9erJ)L3ggqyI;*~ZJQ
z*@ErLlNYOZ2k?NMgiWE7Kh;pJY>`dEGFNueOEC+1R@r;8LS6vkUm|QeB|d{PJW7s7
z-l0-XSY~Zzo048vjx%wOC~qkHlsA?A%3I0-<!$Ala!5I>98r!c#|Ybxu>A=;fUpAz
zJBYBEgv}ysHequJn@d<=g876U{D|_7assV^?e_Pnpsk#O>yMO=6>tnk*dc@+4XUdw
zFu)=zbQ5+g{W^}YGYET=0VrQnuJa6JiN$L4z=-;)ItLu(=ubdxkLnx_*W-7USQ3pj
zeuQnFqZ+VF*(4};y1}smWq4F%XvR`=QE+!s%OzA{$`UP|tyiPRyDGHRRZ=05;?j5y
zJxafrv>KwSHP>EY0~*0)h}+?&(#se-W!7+E1Y@3Nk_THu`X)hGt<egz(y~g&9D8}&
zT);%l$IW7_$>05fq~<DhLJTT;Ua}_~ZVwG6hR!O#(5dt@VGA0RUkR(nr2f09^ar!6
zQTbE(i?G88JJK_YRHQ->gLbn>6_^MW1mxiq%_Bfn7brFw6PCFQw3*;vGZktF6}<Dd
zFTfA2RAHqAZ>NMUG?(ty-5!>y8TyT|$<_>p;r5EUV&@oo_Ge)Zsa@4>uuqYVwyNEM
zMSx}%4Pi!y)QDXML)q${zNiwmSl>-iLsaYJRu3E19*m>)4U_mVHQZS9kEl^<PsT@$
zR(q*2YHu}GjpMVS22<oUb&IF9@DfUio}wDuH?-Uaw<bEFqbkh2EzbxGi|z!%RuC5a
ze6E0q*`D_VW4#AKoU*@MCoMD1!*o6GAv#-B6Tx4InxrPHDQc<;0@6gnP9<y!VQqv3
zx0Hv}zG^>cOMi8MI&e};?PGPi2s??elL<RzTn!w!_Kdc4GP*2V%`x5(bgk(*#_KD6
zKWOfDhpSP|r5jW9E#hy}n04oi&#Ay}rh)w(R0ZmN#m-q5dd@J@4&$?F+UdIZ1ZjgV
zOxWzT!)O-B<mu`_kjh~bkey<dQH<8mGN|`Wc8aOUeuDW-ov2PyC#zGSJEk(9s?*dG
z;cC^!y@|F0tV-1~X1ZFY0^1L8gCaQ9tps_rzPe^)J@tbG$h6nckbP}$`j%CKE^!&W
zJ&mD(1p$o!16V$FUXfP=q5dEX+%obG2fsF+;>=oF-@LFmXBk1?S>V;cZh2c{{LeT4
zGe&8K3YhB%%T_TAo(V7$oEzYPbS535ze@n)09h~0W|Ul|LM%)A9@hqmEd$+_xizYw
zm+)VtH-K9U`;qEw!dABMpE`9Oun)Cfoukertb?#K2|H_pIv?<}kg!!ceySmcA)OY(
z95v-2U$)`@{svnb0(={UIN-3lFzjO{FEJh))i0&hUrpE=E$N_o9YErG^#+isL4knE
zvuz5Z`3dVJ?26;+GIhDSLcIyn->j}wZ&8P-tJK@n)#@6xzfhsx0TaI5SyoSV=i780
zRVoHyvjUVN=@t;(f(8d)bVjx9N_eXQSk&2b9c5I>9@a)s(5=z8TbkLyh3S3UJf-za
zHYotlFOb{()*{n-JbKZ2#)2d~pRl!rT~4_HZ1}RvS~I}A)VnDI1dA0GBxe{e%CEFV
zMklUkwrx-w)JAm!VO@lE6Sl5}<+Pp3&6D%uGj@wHW9!?@*h9=`puF)Z%+bdg;0NCk
z7Pe>&eC|-6x;T6r)twZI7ehAOt*tMua+DbyB-ZV$2d7{r^M6K#jiM%XxB9I5oVrJS
zUfrv{puVWSqyl4EKp^G@3(N$Tud4_PZvYx$31OEK_Ub0}Rr-<)KdaO?4Mz&<+l0MF
z7p<ugAA6nYM}fV8inmw%DE#Yw6x5SoX{CNZ*lU|Dt<;ae(&}P<6wJ{+t$wXrS*c%v
zl@&|lnu-&(J{R+uVCMKiJ*%5osXu{<6?@|)a+FwNJqtN~4>VYb$!FsV!I_o2-rW*?
z)<E<h>YvS<Zs2~*>1t+Sl=C#Ie^E&58*&#u)AM>UUdVV!Z^N~8_SfizX=eHc-~M59
z+q^h088%71crU?A^a4TeX2OD;4{vj~-tVP&sdBnk2g0r*?Ctt8d#4sQfeL5zU1_2&
zpV6yHhS+B8Owj5)lD|i)HLDBo>P)K(^a}Fo=+%j^w-I(VVS&G_y&tC08fFu`LN11l
zlRnKalDdHxa6jF3p#D}l#x~d3!Gr14_G$B8Vo{lsp7B}RJfvh6fxo&IYXEqm4r-G`
zFP$=Hlh$xA@NnGV1=}HaG(ga%MfwXWyb8OWRn1$Gw8duX7%%X~()>Q_6-U^+n$O<6
z5<uYgO7u!1?A?UD&$HlprF!+fh`j98kBRUaK-hbzz<sZ_#M9kjnO7Tb_RI>iz49-X
ze=y`PAnZDtA3_ATj1m;EM;F+k;}$MVfRO00Wg5S@w-v5a)9ChTM%v=Vx~Y)YC^>qR
zFW2ir6QRfn;Sj2shFP8%Zgc7HI<DgII%n;KaA)aE*jje`G3dJWu#k-`g7w*6Zb%Jw
z*9R6KNmf)Z!|caDATX$7r_NovcIyhJLex4Z0#1lqoxH&5sBTRL(mouc7!QoY6uWB@
zJcGj+`Zfs33fxc+oR^L*D98m%lLB}-a!@G@Y(E?>H@v>N!I}eHRf5c)Q)P3zjkVa~
zDb+x(8y@Q?v?FY8h%F8_I7Xcwxw|0OsCKZcR<8#rC@7x?#w<oUL#)#f9K{NftYI0B
z$v924_-MT5Yhiq+AKhy41M{O^F}-8s(gqA1lm|9Zg++!f6hM^@hBY}I{-&nEIHY7)
z<KZVUB^9hok`vOb<AC12Nnl?1Hxe<(r!eb0)EYz;HgDcFizIXphjL%L>rfw1p-fJt
zN6@qE^WD(0xaQFtXP99%BxzDZisq$R4y9)#fEkx=u~Y<xkM<g)!^Vy+$TgHBbj^s?
zkLbpeCR3{?@S2#Akd&LBnwu4yn~|6on~{;66`P)soe-Owla-nfpPiPHmz6PPA#Et&
zFF84W@xjcj?3|046+vIOuB9=X4!5zTbSQst!jOWYAby$SVGwC_L-SEyNZV(v%hFRA
z##xt~8qobMyN@Q#33Se6W{n)>0fSL_<H%gNJ(}vAw8(RfqjRUl&x0M!)THtRdudW?
zd^;VInan&!V^)Ly=_b%V-2qx7M?p{IEK*Sr=$OW#c+fFTMk$~rl8!P!Q)B=dgtAZ$
z=$sBlLs1E`qZ@#cK8SXsXCdnL`=BRsM%NEHhyFz8F~SlK0}WF{N5qa@crIRwmqSF;
zd+|p62!0JTOTWS2;qO^*Hj3@d_G1TvZfPM)Z9(9lN85wixwQJnmV&kiG^H~bw)AEa
zz=UKFsKSh6rZCgQ2f?4q)8Y%_e({KSLVQm=DSiwpp<jq!N=WJn?h=MbL#5%;NU2a7
zBNa>IqzRxTS}i%j?7a@m-4{rUB~7|ox=y-5S_k&WuSut5e^43CmWySlTq`e@m&q&O
z`1lq$I$jM&#2e%X;OuiVoO^DOABAJhj}$K@U%6V@t$d^WuJWp=%AiErLG@9)sNK|H
z)d~uw;c6tjME6q%s|6s^k5E5VzXhdI>?L`1fMqJoE5a+vE86QBuh+cZ@OsnhtqzqP
z>O0KsFu%h>P$;#6VtKfCr1x&`*S+8H-sipF`<VAP-aq*uA8#KYAB&HlPl%7zr-x6N
zPrOfpPohsUsGDZ{<oM+IjPV)kGu~&C&lFHUo#j*Q<Mf&Bv)$)8pO<}J^?BWApU)wm
zBR<D`-tl?Y=MPJFOQxm3GSo8MGS)KHQfirHsj<{rT$Y8FMWCp9y=ATCUdu+yW0qZ(
zJ)pAsiRE+4Y0KA^Z!Kpme_GD_B45@w#W&k`nC}QsWF75W<U7T8n(uVqQr~jl3g0!p
zFZzD#*U>N5FV!!@ub<xlzma|u{7U_5{A&GNesz9x{2ugs)bCkPb$!Y26~BFc`~431
z9rSz0@08!qet-Fk{!#vM{v-X%{b&2T{N4Wb{!2j-_8R}|{BQGr%72&tGyc!|@A2R3
z|DylP{;&GK?!V7}zyAUMgZ_v8kNO|?KjD8q00poCe1I4r2dDuZ0(=7e0s;d%1#}Gv
z4(JgO4yv@h0(u8z1oR6S5HKj<xqyA3QhOlaVBqM$X@S!NO9RUTKMDLk@W;TjfxiUJ
z4Z0@ix}Y0^mUUD*cI?=>V^>hFy|-gi$A>|=c3Y?TP6Ij(>Xg+fr_&3a4s<%$>2Rl`
zoyT=9>um2lqqC#)>CQiQ{<ZV(o&V^vsLPFAmUp?S%gU~nuHCzabnVeKtm}rZ+d$R!
z@vcvHOY4@~Ex+54ZbQ4h-0e`eBi)X5d#C%v?iJlDyU*-i)%~09zX$sS`v&_52L^Wx
z?i}1TxO;F&aF5`y;Pl|W!To~=f<kU~aBgsZ@Q~o4!NY?`2G0s!7Q7|+K=4l?K_UG^
zriUyExi4f>NK?qeAzMOrgzO2~8}eev%OS6ZydJVIWPiw8A@7B}A96C}RLJR&Z$r*m
z87sDOR@tgrJ6L_JU9G*WvDQ>;j&+E2sCBq?w6(}O);iug6_kDFTW_}BVqIljZCwkB
zzjs;hvEFB0Z*8>hu<o=zZQX5s&icId1?x-JSFEpD->|-E{j!JLBeut=9_}7%dOY3Z
zgC2i{b`OmVjSh_ojSWo=9Tb`sniHBAIykf-bXe$w(5ay%p|;S9(8|!6p;e&^L$3;5
z9(qgYs?gP;cZS{_dT;2u&@G`)haLz$7<xGLXz20K6QS>go(w$|`cdd7p}&Qm3;i?n
zd>9I2!}u^UOb%1SI)wRz^$r^r<_x<v?1`{rVSk4A2+s^J39k&F6<!_g44)TH!mkd$
zHvIbV8^f1}-xPjV_`2|h@D1S)hBt*j9KI!dclhh!Z-u`deklBS_=)iM!cT^O6aIUI
zPlRuTe?(wJ$B51mT_d_jghcd+2m_Voz7hQ+21aB?WJlyi<VOsN7#cA=Vr0auh-DF5
zA`V3S6d4rRKXQ8HlF0iaH$^r@J{-9P)SmZ5?u~pg^5w`^BVUi)7x_-)$;eZYA4Ps1
zc{=i|$ZsP5h&&%9MJZ7oqq;=}M_HpHqN1Xrqhg}^Mh%Xd5;ZMqdQ@ptc~nJIWz@{5
zs;HW%+Nf)zu8+DgYI)R6Q7fZvjk+yrP1NmCcShYE^;FccsB=BL_sr^9*7L@mkM!Kv
z^Q)de_57vhZ#~aNbI~25eWHD%{i6e;J4Sbjj*9Lb9Ty!Rof4fEoe|wHdT8{B=)&l!
z(WTMl(G{SMT^;R=o*k`4-xS>#eSh@E=m(>lq92al61^>Yd-UVcPe#8H{buxA(Qii|
ziarv3Ec%`3ccb5r{vi6p=)Zb(@0Hc7tk?CuHurj~*N-uNF$pn!V+O<wiph!@8dDTA
zHfDUx#F)u3Q)5bEs$yoxxMS*L7Q`%yxhh7BSsAk`W_3)%|21{re@&f>AHdyOM;(aP
z>qfnf3_{lNkU{o>aLC}0!66}0u~zG>)+`cEHc3cMNJ7=tYTed_xVMN}ZLfRpt!Ui?
zr0UK0b$|K(^gMsV^ZC3#4{jB14Q?H76K)G`D{dR^2<{B-A?`7*8TSnL9QP9U8uu3W
z9@m2Vi0_T>i_gGk;s@df;RoY~;)ml$;z!}f;Cc9Rya&G;e-i&UA%g%AV8Ras2f;-^
z2_8a(kRtp<SWNhtu#~Wju!69Ku${1zu$ypzaEQ=IXd;{^Tq0a0JR&?JJSV&)yd!)d
zv=Z8g-H8K<cp{OQL!=S`VlI(I<PiBp5m8DkBbF1*#L2`8;<v=<#P5l-h;xWP5El?@
ziCc-6h^^T}v-7eiX9u#^q)Y0jv(IH;%)Xp`C%ZZOS@!enm)Wng-;&ysx{$h&dXV~%
z`jPsR29U;($RvOSl9(heiBA%e#3YzxCjCgVk{l!#$xZT+f}}7hN{W+`r1hkYY4BA~
zY9MVV?IP_V?IRr^9VQ(i-N|W}Gdf3<Gc6~SQ=fA&=N-8}c_?`Vc@%j}THOL<kjx;n
z$a!Qgxsa?P7n3z)glr&}rwj9Q$dzO_*-H+PBjhL<BiE9DBX1@*k&ly4lK(?KLq1Qw
zM7~PCLB37CM{Xgvkw1~YP});EQo2yOQMyxlQhHPRQiv2eWi};F*+IEN`9d8<<x$J2
z)2K73v#4{ZR;ruoqXwuUYJ?i4V$`M771UMKwbYH&&D5>bZPX*wW7PB1E7WV$o78*M
z2h_*ZW@;;~3vDoM7;PkNG;J(x0*yc;(I_-J4Wt#)6f_mBm{vm5(n@J%G$YMKn@p>q
zxoN-Aj?tdbd(pG$#q@>rI{FU!L3$(oDE&D74E-woI{ha7HvKOBKK&K_J-vnA2DAe@
z0G)s?Kqim{j0MI6cpwL$05kvqM1TsI3Va8A56lMU0Sf>NU<aH43V4CVz%RhBz;a*(
zunJfUtOqs#n}B+t0XPG^OhW?tMBPN&#N`u@PJ94%0(*gdzzi@G90raB$AdVK0A_<Z
zARFX^LQn$AK?qcWYS0W$0q250f)>yYR)KEN2L`}8a3#1K+y@>68^NRCAK;(hDex?K
z0lW<U4ZZ|lgKxq2U<=p=e#&i^+ab4eZr9w=x%}LU+(7Pz+*7&l7=suS86^xO!_1h%
zn97*VurTb5N=6mK&G0h(j09s5V+ms^V+CUsV=ZGnV>e?T;{fAN#u>&r#zn?8#tp`8
z#$CoM#%E>*a{zM?a|m-dGmANfIgW{A5}7$n5mU;{XUdrnQ^8a-OPD%lDbv6#XF8Za
zGY_SiL|4{$7Q~v%!dP2ayIK2K2U&+%Ct2rNmsnR=*I74Nw^?^tFIaC`?^&&^&+K;W
zj_l6t{_KHiR*}WdW>eX8HpphPIcz>#$X2t<+4I>8**111yNc~$``Oj(2s_5EWv^xb
z&fdu0%&uoQuy?R`vG=g|u@ABjvv09K=Vj#y@}}km^ET(5&wIn^#~I8S#u=Gr8h8$k
zGm(?aVR7;}Tn?X8#3|;KaC964r#wwKrf`1XEa12~0Zuh1!ijSdoI1`T&RWiP&PmRH
zIA=KLIhQzBIX5`BIrlgZIZrsBx$U_fxt+OPxnFU6a=+&G;r8QZatCs$Torc#_b2W?
z?k!$t-gusbSHYXbo6DQe`;q731$iM}gcs#uyjtEe-YVW2-g@3<UOlgYx1HC-JIlMo
zyTZH9yTiN3d%%0dd(ZF4|As%9Ka4+;Kbk+5KY>r+llT-qouAJy<QMUkd^I2DYx#P9
z8Q;h^^C$DG_{;cB{6~Tw0)jv#SRhCWwh8tN4hfD3jtWi*E(@*+ZU}A*?h5V;9tqwG
zS_N%_&%%zv&cbfO?!rOBA;RH8yf8;d5z>VWAxp>+@`MUunXp_qNmwDACY&x@D6|Ug
zLZ`4%cv^T(cvE;scwhKP*erY}Y!S8zKa1LnI*Gc7vPJnKgUBQLB~4xGMcYI>MSDbt
zMNOjPqLZS(MAt<x#C^nr#987o;&I{$VnECk=ZSe@u~;USiy?8b*etFThr|hSop`bM
z7x6OjI`IbaX7N_>cJWT}esPodwD`LCsU%avl}wS$l>8{MN*ofWq*_uZSuFWQvP`l<
zvPyDTa#C_x@<8%f@>KF%@=Een@<G~3+Ev<J+DqC;njy`U4wPm|iBgGlrZga3B3&ol
zD%~$VBt0TMCOskjOL|IrRr)~sQraf#BFm8Vmu1QZ%0|ctGPaB>6Uf9enM^J#lBr~{
ztU@+THbXW`Hdi)Zwoqo1Rmxnlh%73@WC__R*>%}X*=^aq{1N$t{OtUkd}{vOd}n@D
zzB}KSe<c4*{<-`M`Iig&7mO?zRWPPtT*2ft`k7ZSzhGg(>4F;tw+ikQ+?S7)Q{_^5
zfgF-6<;8N1TrW>Y&GJd|3b{>QDR;?Hxkv7k2jwAoL>^6Jp@h6%en$STa9|;$5Gh0p
zR~H^Fd{Fqj@Kxd4G#dT_b%T09y`Vl&Kd3)602&32gC;-(hzwC700JQiln-ej1TsJ-
zr~>*Hnht#r*`Xk`6j~0ggw{aop^eZMr~%pm?S}S2XQ2zwCFlxt4Y~o{hVDZ5p@+~D
z=xI^6G*QYgno$%h+FEp_=#yfIf}s#7#0r_BKvAqHQ<N*riYbb372hdlC}t{b3YP*^
zcoo%(up+9!6w4GV6k8PA6+0Ds6bBWD6-|m`ii?VSiWWti;<K{7vXio_vb(aEvX3%D
zIY5b15|tz+SxHp_%3LK=nWy9`1xk_9tgKS5QXW@6Q+=(Xsx+zvs-$YEYPo8qYPD*!
zYL{xSYQO4`s!`RXI;J|Wx}dtKx~zJjYF0f{y->YXeNcT={iE)o?yt^N4^;n4Jw!cT
zO;nTA6!k<kL(Num)R4MVJzG6by+CbI+tp4rs`jb_>QI_rtx&I4uT`&CZ%}Vi*Q*=U
z+toYOd(`{XSJkb>LyPl@&BdPL^~I-(pToW20q`Jr2s{iP3zJ|9OoJ!FxiAxE!})L#
ztb~hUU7Bzi;Bt5tJQsGt9@qy5;Tkvw*TPA7C0q|5gHOPJ!KdMK@J09vd>y_8--RE*
zAK_2%my-4+9ZNcwbSvpm@^wj{l8lnf5^{;6<cE?}$)1uMnvR;W8j)tQ=6lU-%{<L~
zO{K=Ksn&!wQ4OZ4)g(2)Y1U}gX*Ou;H4T~_nq8XXnv<IInv0ryn#Y=E&EJ~Wnzxz{
znpSN$ZKigDmY^kRDO$P~)H1bsTAo&@m1q&IQESpp(oWG%)qba)p`EFnt(~WxuZ?T#
zwHLK5x*<BYZj#QgTdg~)JEc3TyP&(IyRCbod#d|e_d@qd_eS4N-&x;P-(BBZ-&fyX
zKR`c5KTc26=jxgIJiS0K(o6OEdY!&PZ_`)mtMnedUtg_{=wtd?eM-Mbze!)OZ_sbo
z@6_+s@6#XDAJ!kyAJhM#e^}bNbbM)k>CDnt>5kHCr5}+&NER{%8HY?jC<qf_BOHW>
z2oMpXLNtgDK@bx%38_H7O#?YA;znXf5~)KLBflcck(J15WINJ`Tt==TH<3HYedH0+
zjQowfMBX6p%X*Z3UDl_pUs?aM0cC^A2A2&j8(x-GHoA;kW-N1;ttvZF_RP@FKsOW{
z<{9h;rvWv13=u=hu*k5)u+*^3@S9<!VYQ*bu*<N=u;0*VXfhl(oG@H5TsJ&1JU6^F
zyfL&GJ{mq5z8JqY4mJ)mjx>%ojx~-q0>(UJfze<z87CX38ox7sZ=7wMXIx;k7{kV>
z5i`~rQ^rNcpN+p7e>1K$t~PEl?loR8J~n<S?_WN?oLip$Sf;$Hys`X5`I++T<xk3A
zmcJ=~U*2kJXX<F`V*1L|!^AdeO><0Elh+h5g-kUj%#<*tOe;+5O&d*HObw<zrv0Wv
zrbbhf>A87`Sz=b0HRj3Y>1j7H$NYoYX09|>nLTEoIcmntb>@}k-_4uM_2zBnz2*bv
z!{#IAqvliQv*ugohvp~dXXY2?_vTjfKjtr!+E3~>sqdsg7MrEg;<qF%KU-E<wpjLC
z4q1*^j#*Av{<565+_2oX+_OBiJh42pys*5o4zMz;ldUz@n01kLxplpDqjiUMzqQeN
z$$G_l*ZRQv$oj<k-r8zyvwpU<w{^7jwDq?2wPo0b*oNAM+s4^gHja&N6WOG;0vlvg
z+KO!@Hmyx>n`)b8n{JzFJ8C;;yI{LyyJ{b5pJ2z^iS`_OwY|>1$iBqB)PBwW*xqb^
zW`E%zJMtV{2j3xdC>?4C?9e(EIaWKiJ9attIu1AvJDMEF9VZ=E9XA}e9d{iM9FHB%
zj%SYNmD!c-%8E*?vZ3;H<<rWR^b=~&^jK6sXQuO;|C<+bj&zcpR43rfb+VisC*LV_
zN}Mt$;+*9~oj*BOIWIULJJSsyS5H@OS3g&#>l@cd*J#&R*8~^AmF-fxoUWy=t*(Qv
zQ?9eF3$DwqYp$EFJFfe#H?H@t7FV0=lj}=WhpNt1U8@FE(W(lnW>qb&+E8^p4J+HD
zozSjmceEGU8y$%f(HxY5(oqm)pb}J$LZ~uLFLfw_8c-uT1D%D=MdzanQ7h_4tI;qT
zMdN4!U5>6qSEK9D4d^CxFM0qyj5eXi(G%z+^ey@U{fK^Yw{v%J_jdPj_jPBuN4Rlr
zqC3Y;bp!5Px6mzd%iINS$gOm%-46FE_dfRt_h0VQ?sM*o?#u3G_Xl^2yVc$1$?%Nu
zjPm^3Gv0&u5IqbJ)5G%Qc?vvQPpQY?F?l9?rh2~f{OGZI93H2q%H#3)JOR%N&wkHk
z&l_)scZ7GWcY>GTC3yjFu9xM_^K!jfZ>4vucdz$=_mH>Id)j-?*TL7@*Uy*f`^Goe
zH`K@V$$Sc*+E?P!`AU6p-=DrO{+|B6{{H@f{vrNh{t^Bxf3CkYjZmliXZq*(=lSRR
zYyHdoEBved>--!1oBWObKmF(Y7yVcK*ZnvBPyMg`@BA(Pwm^qK=Rns$_dw6UzXD?e
zxdC|q4wwVe0y6@$0&@eFfIUzds0z3PSYUBrO<+@?KCmsYGjJeqIB+CzEbvF*df-9e
zb+A{kPcS1mAUG&EBse^n6&w>B7sLgL!JHs92nChF;$TTo7es=FV0oIyP6>V+oF1GR
zoE@AS^aa-iZv~sHdsPpvCRQt|jn&@jU#c6bZ&g35eo_6p`dxKP^~ccHp@E?xq2Zyd
z(CAQ3Xkv&FVu!dPNhm)g4;6)!q0-Rg(45f1kS$ahstN@{p-?0g3&le#LmNYlp{CH;
z(8Ew`=$~-saNqENa8@`wOiIICN>~!sho^<@;h(}w!b`);!z;sU!dJuh!q3C6!f(SL
z!XLw*(s;LLWME`yWJF|C<lhlOBs(%OQW7bRSR?*ObtDprMOH@|B0D0xBl{v3BljW?
zB99|aBQ24($fufiHQj1*Y9uvC&FmU?O{(Vinu9fsHBB|gYfjYsS#zQ0W=%`Ym*}8q
zc64IY9Gx1CN0&sGMwdrdM7KnDM)ySbM-N4hM^8ro6Fn0>7rhm2j<t*Riw%wqi;awp
zis578m@FobeIE<PHpULdZpL26K4U|$;aC<n1{;UrFd~+NQ86i2fI*lNE5=GNBUXV;
z!)9Q!usK*IR)u*mKbF8!*dpv_Y#p`%+l19)yRl=~3G6TI6m}VVj=hP06(1hQ$GLGq
zTpX9B$#PL#6^G;6cxl`apBG;cUl_N>?eWTZRoor-#RKtBJQ80YKM{Xk+ozUV3)k9e
zf2}=Gd$aaYZFBA4wJ&O0(u2yK5?vBsC3+-!CH|Edo*0=Jofx0MC5Q=9A}>*pP$X0d
zIH6A<31h;Pn4MUbSeH1IIGVVTc$oN{?3f&!9GA>Vb7>%%n`9+LNolem2_=<DbrMNd
zB<Cc9$yD;!<ZsDU$+gMfliQLzlDm?7lKYYek~fkcQ$thq6h9?ONmB)>!c<XeQfhW;
zUTQ(glCq~NQ~p#q6-~uciPZAc+SKo<O{x0SuGHSt{?wsVW9rY;h1A{Dlhm`+i`45>
pYwDlW=eqWF9qW444XC5kF_%pHUt-ar!~f2nivO2jq_0b6{1<GWW?cXP

diff --git a/assign5/openTok/openTok.xcworkspace/xcuserdata/keleher.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/assign5/openTok/openTok.xcworkspace/xcuserdata/keleher.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
deleted file mode 100644
index 349475e..0000000
--- a/assign5/openTok/openTok.xcworkspace/xcuserdata/keleher.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Bucket
-   uuid = "4564FE7B-F436-43F6-822B-A181F599C280"
-   type = "0"
-   version = "2.0">
-</Bucket>
diff --git a/assign5/openTok/openTok/AppDelegate.swift b/assign5/openTok/openTok/AppDelegate.swift
deleted file mode 100644
index a1e8667..0000000
--- a/assign5/openTok/openTok/AppDelegate.swift
+++ /dev/null
@@ -1,41 +0,0 @@
-//
-//  AppDelegate.swift
-//  openTok
-//
-//  Created by Pete Keleher on 4/29/20.
-//  Copyright © 2020 Pete Keleher. All rights reserved.
-//
-
-import UIKit
-import Firebase
-import FirebaseDatabase
-
-@UIApplicationMain
-class AppDelegate: UIResponder, UIApplicationDelegate {
-
-
-
-    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
-        // Override point for customization after application launch.
-        
-        FirebaseApp.configure()
-        return true
-    }
-
-    // MARK: UISceneSession Lifecycle
-
-    func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
-        // Called when a new scene session is being created.
-        // Use this method to select a configuration to create the new scene with.
-        return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
-    }
-
-    func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
-        // Called when the user discards a scene session.
-        // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
-        // Use this method to release any resources that were specific to the discarded scenes, as they will not return.
-    }
-
-
-}
-
diff --git a/assign5/openTok/openTok/Assets.xcassets/AppIcon.appiconset/Contents.json b/assign5/openTok/openTok/Assets.xcassets/AppIcon.appiconset/Contents.json
deleted file mode 100644
index 9221b9b..0000000
--- a/assign5/openTok/openTok/Assets.xcassets/AppIcon.appiconset/Contents.json
+++ /dev/null
@@ -1,98 +0,0 @@
-{
-  "images" : [
-    {
-      "idiom" : "iphone",
-      "scale" : "2x",
-      "size" : "20x20"
-    },
-    {
-      "idiom" : "iphone",
-      "scale" : "3x",
-      "size" : "20x20"
-    },
-    {
-      "idiom" : "iphone",
-      "scale" : "2x",
-      "size" : "29x29"
-    },
-    {
-      "idiom" : "iphone",
-      "scale" : "3x",
-      "size" : "29x29"
-    },
-    {
-      "idiom" : "iphone",
-      "scale" : "2x",
-      "size" : "40x40"
-    },
-    {
-      "idiom" : "iphone",
-      "scale" : "3x",
-      "size" : "40x40"
-    },
-    {
-      "idiom" : "iphone",
-      "scale" : "2x",
-      "size" : "60x60"
-    },
-    {
-      "idiom" : "iphone",
-      "scale" : "3x",
-      "size" : "60x60"
-    },
-    {
-      "idiom" : "ipad",
-      "scale" : "1x",
-      "size" : "20x20"
-    },
-    {
-      "idiom" : "ipad",
-      "scale" : "2x",
-      "size" : "20x20"
-    },
-    {
-      "idiom" : "ipad",
-      "scale" : "1x",
-      "size" : "29x29"
-    },
-    {
-      "idiom" : "ipad",
-      "scale" : "2x",
-      "size" : "29x29"
-    },
-    {
-      "idiom" : "ipad",
-      "scale" : "1x",
-      "size" : "40x40"
-    },
-    {
-      "idiom" : "ipad",
-      "scale" : "2x",
-      "size" : "40x40"
-    },
-    {
-      "idiom" : "ipad",
-      "scale" : "1x",
-      "size" : "76x76"
-    },
-    {
-      "idiom" : "ipad",
-      "scale" : "2x",
-      "size" : "76x76"
-    },
-    {
-      "idiom" : "ipad",
-      "scale" : "2x",
-      "size" : "83.5x83.5"
-    },
-    {
-      "idiom" : "ios-marketing",
-      "scale" : "1x",
-      "size" : "1024x1024"
-    }
-  ],
-  "info" : {
-    "author" : "xcode",
-    "version" : 1
-  }
-}
diff --git a/assign5/openTok/openTok/Assets.xcassets/Contents.json b/assign5/openTok/openTok/Assets.xcassets/Contents.json
deleted file mode 100644
index 73c0059..0000000
--- a/assign5/openTok/openTok/Assets.xcassets/Contents.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
-  "info" : {
-    "author" : "xcode",
-    "version" : 1
-  }
-}
diff --git a/assign5/openTok/openTok/Base.lproj/LaunchScreen.storyboard b/assign5/openTok/openTok/Base.lproj/LaunchScreen.storyboard
deleted file mode 100644
index 865e932..0000000
--- a/assign5/openTok/openTok/Base.lproj/LaunchScreen.storyboard
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13122.16" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
-    <dependencies>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/>
-        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
-        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
-    </dependencies>
-    <scenes>
-        <!--View Controller-->
-        <scene sceneID="EHf-IW-A2E">
-            <objects>
-                <viewController id="01J-lp-oVM" sceneMemberID="viewController">
-                    <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
-                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
-                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
-                        <color key="backgroundColor" xcode11CocoaTouchSystemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
-                        <viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
-                    </view>
-                </viewController>
-                <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
-            </objects>
-            <point key="canvasLocation" x="53" y="375"/>
-        </scene>
-    </scenes>
-</document>
diff --git a/assign5/openTok/openTok/Base.lproj/Main.storyboard b/assign5/openTok/openTok/Base.lproj/Main.storyboard
deleted file mode 100644
index 8484286..0000000
--- a/assign5/openTok/openTok/Base.lproj/Main.storyboard
+++ /dev/null
@@ -1,197 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="16096" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="9Wh-Pb-tRi">
-    <device id="retina6_1" orientation="portrait" appearance="light"/>
-    <dependencies>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="16087"/>
-        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
-        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
-    </dependencies>
-    <scenes>
-        <!--Main Controller-->
-        <scene sceneID="tne-QT-ifu">
-            <objects>
-                <viewController id="BYZ-38-t0r" customClass="MainController" customModule="openTok" customModuleProvider="target" sceneMemberID="viewController">
-                    <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
-                        <rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
-                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
-                        <subviews>
-                            <stackView opaque="NO" contentMode="scaleToFill" misplaced="YES" axis="vertical" distribution="fillEqually" alignment="top" spacing="20" translatesAutoresizingMaskIntoConstraints="NO" id="fEG-oc-9Mk">
-                                <rect key="frame" x="161" y="395" width="92" height="130"/>
-                                <subviews>
-                                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="wZz-aR-xeQ">
-                                        <rect key="frame" x="0.0" y="0.0" width="76" height="30"/>
-                                        <state key="normal" title="PlayVideos"/>
-                                        <connections>
-                                            <segue destination="LiZ-q7-qYu" kind="show" id="efN-3L-LA2"/>
-                                        </connections>
-                                    </button>
-                                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="TL8-Kd-gsN">
-                                        <rect key="frame" x="0.0" y="50" width="82" height="30"/>
-                                        <state key="normal" title="Upload URL"/>
-                                        <connections>
-                                            <segue destination="8Re-pa-lXc" kind="show" id="Jk4-Sc-64b"/>
-                                        </connections>
-                                    </button>
-                                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="bO7-Gb-vAL">
-                                        <rect key="frame" x="0.0" y="100" width="92" height="30"/>
-                                        <state key="normal" title="Record Video"/>
-                                        <connections>
-                                            <segue destination="CVf-eZ-JsW" kind="show" id="Xfn-5L-3p0"/>
-                                        </connections>
-                                    </button>
-                                </subviews>
-                            </stackView>
-                        </subviews>
-                        <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
-                        <constraints>
-                            <constraint firstItem="fEG-oc-9Mk" firstAttribute="centerY" secondItem="6Tk-OE-BBY" secondAttribute="centerY" id="6jt-aN-gRt"/>
-                            <constraint firstItem="fEG-oc-9Mk" firstAttribute="centerX" secondItem="6Tk-OE-BBY" secondAttribute="centerX" id="CpJ-dO-iys"/>
-                        </constraints>
-                        <viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
-                    </view>
-                    <navigationItem key="navigationItem" id="ZJU-2z-cdM"/>
-                </viewController>
-                <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
-            </objects>
-            <point key="canvasLocation" x="1363.768115942029" y="128.57142857142856"/>
-        </scene>
-        <!--Record View Controller-->
-        <scene sceneID="0sX-gH-lbo">
-            <objects>
-                <viewController id="CVf-eZ-JsW" customClass="RecordViewController" customModule="openTok" customModuleProvider="target" sceneMemberID="viewController">
-                    <view key="view" contentMode="scaleToFill" id="Kh6-5D-Mow">
-                        <rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
-                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
-                        <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
-                        <viewLayoutGuide key="safeArea" id="M69-7R-COg"/>
-                    </view>
-                    <navigationItem key="navigationItem" id="nQb-qF-9NM"/>
-                </viewController>
-                <placeholder placeholderIdentifier="IBFirstResponder" id="tpI-D2-aoV" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
-            </objects>
-            <point key="canvasLocation" x="1771" y="815"/>
-        </scene>
-        <!--Tok Player Controller-->
-        <scene sceneID="FFW-j8-WLq">
-            <objects>
-                <viewController id="LiZ-q7-qYu" customClass="TokPlayerController" customModule="openTok" customModuleProvider="target" sceneMemberID="viewController">
-                    <view key="view" contentMode="scaleToFill" id="Fa6-2Z-7Qy">
-                        <rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
-                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
-                        <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
-                        <viewLayoutGuide key="safeArea" id="RI3-t9-fpa"/>
-                    </view>
-                    <navigationItem key="navigationItem" id="TXy-fO-EQH"/>
-                </viewController>
-                <placeholder placeholderIdentifier="IBFirstResponder" id="6IQ-sr-rte" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
-            </objects>
-            <point key="canvasLocation" x="2437.68115942029" y="627.45535714285711"/>
-        </scene>
-        <!--URL Controller-->
-        <scene sceneID="doB-Wo-1lO">
-            <objects>
-                <viewController id="8Re-pa-lXc" customClass="URLController" customModule="openTok" customModuleProvider="target" sceneMemberID="viewController">
-                    <view key="view" contentMode="scaleToFill" id="RGn-wQ-NQF">
-                        <rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
-                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
-                        <subviews>
-                            <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="61" translatesAutoresizingMaskIntoConstraints="NO" id="Yg5-fJ-RGT">
-                                <rect key="frame" x="93" y="282" width="228" height="386"/>
-                                <subviews>
-                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="DZH-IG-cLn">
-                                        <rect key="frame" x="0.0" y="0.0" width="228" height="50"/>
-                                        <fontDescription key="fontDescription" type="system" pointSize="17"/>
-                                        <color key="textColor" systemColor="systemRedColor" red="1" green="0.23137254900000001" blue="0.18823529410000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                                        <nil key="highlightedColor"/>
-                                    </label>
-                                    <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="top" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="WV3-0Y-kU2">
-                                        <rect key="frame" x="0.0" y="111" width="228" height="62.5"/>
-                                        <subviews>
-                                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Name:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="t4O-Uy-O0L">
-                                                <rect key="frame" x="0.0" y="0.0" width="49" height="20.5"/>
-                                                <fontDescription key="fontDescription" type="system" weight="thin" pointSize="17"/>
-                                                <nil key="textColor"/>
-                                                <nil key="highlightedColor"/>
-                                            </label>
-                                            <textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="SCU-6S-Fd1">
-                                                <rect key="frame" x="0.0" y="28.5" width="228" height="34"/>
-                                                <constraints>
-                                                    <constraint firstAttribute="width" secondItem="SCU-6S-Fd1" secondAttribute="height" multiplier="114:17" id="RsJ-HT-5Fi"/>
-                                                    <constraint firstAttribute="width" constant="228" id="Wv6-wQ-xDU"/>
-                                                </constraints>
-                                                <fontDescription key="fontDescription" type="system" pointSize="20"/>
-                                                <textInputTraits key="textInputTraits"/>
-                                            </textField>
-                                        </subviews>
-                                    </stackView>
-                                    <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="top" spacing="2" translatesAutoresizingMaskIntoConstraints="NO" id="Iuh-MW-IWT">
-                                        <rect key="frame" x="0.0" y="234.5" width="228" height="56.5"/>
-                                        <subviews>
-                                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="URL:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="tSS-9B-3EB">
-                                                <rect key="frame" x="0.0" y="0.0" width="35" height="20.5"/>
-                                                <fontDescription key="fontDescription" type="system" weight="thin" pointSize="17"/>
-                                                <nil key="textColor"/>
-                                                <nil key="highlightedColor"/>
-                                            </label>
-                                            <textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="Cbg-cF-9fZ">
-                                                <rect key="frame" x="0.0" y="22.5" width="228" height="34"/>
-                                                <constraints>
-                                                    <constraint firstAttribute="width" constant="228" id="9Qe-mb-hhd"/>
-                                                    <constraint firstAttribute="width" secondItem="Cbg-cF-9fZ" secondAttribute="height" multiplier="114:17" id="msk-Td-ACL"/>
-                                                </constraints>
-                                                <fontDescription key="fontDescription" type="system" pointSize="20"/>
-                                                <textInputTraits key="textInputTraits"/>
-                                            </textField>
-                                        </subviews>
-                                    </stackView>
-                                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="F9M-9b-ggh">
-                                        <rect key="frame" x="0.0" y="352" width="228" height="34"/>
-                                        <fontDescription key="fontDescription" type="boldSystem" pointSize="18"/>
-                                        <state key="normal" title="Upload"/>
-                                        <connections>
-                                            <action selector="uploadAction:" destination="8Re-pa-lXc" eventType="touchUpInside" id="Ptl-2u-P9H"/>
-                                        </connections>
-                                    </button>
-                                </subviews>
-                                <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
-                            </stackView>
-                        </subviews>
-                        <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
-                        <constraints>
-                            <constraint firstItem="Yg5-fJ-RGT" firstAttribute="centerY" secondItem="pEO-Pe-oGj" secondAttribute="centerY" id="eqb-t2-8LE"/>
-                            <constraint firstItem="Yg5-fJ-RGT" firstAttribute="centerX" secondItem="pEO-Pe-oGj" secondAttribute="centerX" id="v0G-6X-UxY"/>
-                        </constraints>
-                        <viewLayoutGuide key="safeArea" id="pEO-Pe-oGj"/>
-                    </view>
-                    <navigationItem key="navigationItem" id="0Mi-Ay-21T"/>
-                    <connections>
-                        <outlet property="errorLabelOutlet" destination="DZH-IG-cLn" id="wmr-Jx-JfI"/>
-                        <outlet property="nameTextOutlet" destination="SCU-6S-Fd1" id="oqy-ER-G2D"/>
-                        <outlet property="uploadOutlet" destination="F9M-9b-ggh" id="eM2-IH-CJo"/>
-                        <outlet property="urlTextOutlet" destination="Cbg-cF-9fZ" id="FLb-G6-fIz"/>
-                    </connections>
-                </viewController>
-                <placeholder placeholderIdentifier="IBFirstResponder" id="hTn-lD-KvX" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
-            </objects>
-            <point key="canvasLocation" x="2112" y="-112"/>
-        </scene>
-        <!--Navigation Controller-->
-        <scene sceneID="8cW-vh-P3n">
-            <objects>
-                <navigationController automaticallyAdjustsScrollViewInsets="NO" id="9Wh-Pb-tRi" sceneMemberID="viewController">
-                    <toolbarItems/>
-                    <navigationBar key="navigationBar" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="BYs-f1-d6S">
-                        <rect key="frame" x="0.0" y="44" width="414" height="44"/>
-                        <autoresizingMask key="autoresizingMask"/>
-                    </navigationBar>
-                    <nil name="viewControllers"/>
-                    <connections>
-                        <segue destination="BYZ-38-t0r" kind="relationship" relationship="rootViewController" id="JGJ-kB-Kd1"/>
-                    </connections>
-                </navigationController>
-                <placeholder placeholderIdentifier="IBFirstResponder" id="cKC-i3-eki" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
-            </objects>
-            <point key="canvasLocation" x="453.62318840579712" y="128.57142857142856"/>
-        </scene>
-    </scenes>
-</document>
diff --git a/assign5/openTok/openTok/GoogleService-Info.plist b/assign5/openTok/openTok/GoogleService-Info.plist
deleted file mode 100644
index f7fb9fc..0000000
--- a/assign5/openTok/openTok/GoogleService-Info.plist
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CLIENT_ID</key>
-	<string>611428037433-ke7a2g2gqvugk421ior8t4qruc5rq4pv.apps.googleusercontent.com</string>
-	<key>REVERSED_CLIENT_ID</key>
-	<string>com.googleusercontent.apps.611428037433-ke7a2g2gqvugk421ior8t4qruc5rq4pv</string>
-	<key>API_KEY</key>
-	<string>AIzaSyBpofWHiEw8Bi6FCY2nLUtZR8wxT86s--s</string>
-	<key>GCM_SENDER_ID</key>
-	<string>611428037433</string>
-	<key>PLIST_VERSION</key>
-	<string>1</string>
-	<key>BUNDLE_ID</key>
-	<string>edu.maryland.cmsc436.spring2020.openTok</string>
-	<key>PROJECT_ID</key>
-	<string>navpractice-8aa4b</string>
-	<key>STORAGE_BUCKET</key>
-	<string>navpractice-8aa4b.appspot.com</string>
-	<key>IS_ADS_ENABLED</key>
-	<false></false>
-	<key>IS_ANALYTICS_ENABLED</key>
-	<false></false>
-	<key>IS_APPINVITE_ENABLED</key>
-	<true></true>
-	<key>IS_GCM_ENABLED</key>
-	<true></true>
-	<key>IS_SIGNIN_ENABLED</key>
-	<true></true>
-	<key>GOOGLE_APP_ID</key>
-	<string>1:611428037433:ios:9e53d5edb4e3798176aee8</string>
-	<key>DATABASE_URL</key>
-	<string>https://navpractice-8aa4b.firebaseio.com</string>
-</dict>
-</plist>
\ No newline at end of file
diff --git a/assign5/openTok/openTok/Info.plist b/assign5/openTok/openTok/Info.plist
deleted file mode 100644
index 2a3483c..0000000
--- a/assign5/openTok/openTok/Info.plist
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>$(DEVELOPMENT_LANGUAGE)</string>
-	<key>CFBundleExecutable</key>
-	<string>$(EXECUTABLE_NAME)</string>
-	<key>CFBundleIdentifier</key>
-	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundleName</key>
-	<string>$(PRODUCT_NAME)</string>
-	<key>CFBundlePackageType</key>
-	<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
-	<key>CFBundleShortVersionString</key>
-	<string>1.0</string>
-	<key>CFBundleVersion</key>
-	<string>1</string>
-	<key>LSRequiresIPhoneOS</key>
-	<true/>
-	<key>UIApplicationSceneManifest</key>
-	<dict>
-		<key>UIApplicationSupportsMultipleScenes</key>
-		<false/>
-		<key>UISceneConfigurations</key>
-		<dict>
-			<key>UIWindowSceneSessionRoleApplication</key>
-			<array>
-				<dict>
-					<key>UISceneConfigurationName</key>
-					<string>Default Configuration</string>
-					<key>UISceneDelegateClassName</key>
-					<string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
-					<key>UISceneStoryboardFile</key>
-					<string>Main</string>
-				</dict>
-			</array>
-		</dict>
-	</dict>
-	<key>UILaunchStoryboardName</key>
-	<string>LaunchScreen</string>
-	<key>UIMainStoryboardFile</key>
-	<string>Main</string>
-	<key>UIRequiredDeviceCapabilities</key>
-	<array>
-		<string>armv7</string>
-	</array>
-	<key>UISupportedInterfaceOrientations</key>
-	<array>
-		<string>UIInterfaceOrientationPortrait</string>
-		<string>UIInterfaceOrientationLandscapeLeft</string>
-		<string>UIInterfaceOrientationLandscapeRight</string>
-	</array>
-	<key>UISupportedInterfaceOrientations~ipad</key>
-	<array>
-		<string>UIInterfaceOrientationPortrait</string>
-		<string>UIInterfaceOrientationPortraitUpsideDown</string>
-		<string>UIInterfaceOrientationLandscapeLeft</string>
-		<string>UIInterfaceOrientationLandscapeRight</string>
-	</array>
-</dict>
-</plist>
diff --git a/assign5/openTok/openTok/MainController.swift b/assign5/openTok/openTok/MainController.swift
deleted file mode 100644
index d6891d3..0000000
--- a/assign5/openTok/openTok/MainController.swift
+++ /dev/null
@@ -1,31 +0,0 @@
-//
-//  ViewController.swift
-//  openTok
-//
-//  Created by Pete Keleher on 4/29/20.
-//  Copyright © 2020 Pete Keleher. All rights reserved.
-//
-
-import UIKit
-import Firebase
-import FirebaseDatabase
-
-class MainController: UIViewController {
-
-    let root = Database.database().reference()
-
-    override func viewDidLoad() {
-        super.viewDidLoad()
-
-    }
-
-    func verifyUrl(urlString: String?) -> Bool {
-        guard let urlString = urlString,
-              let url = URL(string: urlString) else {
-            return false
-        }
-
-        return UIApplication.shared.canOpenURL(url)
-    }
-}
-
diff --git a/assign5/openTok/openTok/PlayerController.swift b/assign5/openTok/openTok/PlayerController.swift
deleted file mode 100644
index 3a66dba..0000000
--- a/assign5/openTok/openTok/PlayerController.swift
+++ /dev/null
@@ -1,258 +0,0 @@
-//
-//  PlayController.swift
-//  tik
-//
-//  Created by Pete Keleher on 4/27/20.
-//  Copyright © 2020 Pete Keleher. All rights reserved.
-//
-
-import UIKit
-import AVKit
-import AVFoundation
-import Firebase
-
-// MARK: Definitions
-enum Feelings: String {
-    case yes = "👍🏻"
-    case no = "👎🏻"
-}
-struct Vid {
-    var name: String
-    var id: String
-    var url: String
-    var likes: String
-}
-
-
-class TokPlayerController: UIViewController {
-    
-    // MARK: Properties
-    var feelingsButton = UIButton()
-    var descriptionLabel = UILabel()
-    var likesLabel = UILabel()
-    let directoryID = "keleher"
-    
-    var currentVid = 0
-    var playerCreated = false
-    var player: AVPlayer?
-    var playerLayer = AVPlayerLayer()
-    var vids: [Vid] = []
-    var vidsSeen: [String:Bool] = [:]
-    var _refHandle: UInt?
-
-    var currentFeeling = Feelings.no {
-        didSet {
-            feelingsButton.setTitle(currentFeeling.rawValue, for: UIControl.State.normal)
-            if currentFeeling == .yes {
-                root.child("urls/\(vids[currentVid].id)/likes/\(directoryID)").setValue("1")
-                let nlikes = "\(Int(vids[currentVid].likes)! + 1)"
-                likesLabel.text = nlikes
-            }
-        }
-    }
-    
-    let root = Database.database().reference()
-    
-    // MARK: Overrides
-    override func viewDidLoad() {
-        super.viewDidLoad()
-        
-                root.child("urls").childByAutoId().setValue(["name": "Neo romps happily in the snow", "url": "https://sedna.cs.umd.edu/436clips/vids/neo.mp4"])
-                root.child("urls").childByAutoId().setValue(["name": "Meditation Sheep", "url": "https://sedna.cs.umd.edu/436clips/vids/sheep.mp4"])
-                root.child("urls").childByAutoId().setValue(["name": "Beautiful Sunset", "url": "https://sedna.cs.umd.edu/436clips/vids/sunset.mp4"])
-                root.child("urls").childByAutoId().setValue(["name": "Horses", "url": "https://sedna.cs.umd.edu/436clips/vids/horses.mp4"])
-        
-        readSeen()
-    }
-    
-    override func viewWillDisappear(_ animated: Bool) {
-        if (self.isMovingFromParent || self.isBeingDismissed) {
-            playerLayer.player = nil
-            player = nil
-            print("DISAPPEARING: moving \(self.isMovingFromParent), being dismissed: \(self.isBeingDismissed)")
-        }
-    }
-    
-    deinit {
-        print("DE-INITING!!!")
-        if let refHandle = _refHandle {
-            self.root.removeObserver(withHandle: refHandle)
-        }
-    }
-    
-    @objc private func thumbsUp() {
-        if currentFeeling == .no {
-            currentFeeling = .yes
-        }
-    }
-    
-    // Only called once at beginning. Reads seen, then sets up observer
-    private func readSeen() {
-        root.child("seen/\(directoryID)").observeSingleEvent(of: .value, with: { (snapshot) in
-            for child in snapshot.children {
-                if let data = child as? DataSnapshot {
-                    self.vidsSeen[data.key] = true
-                }
-             }
-            
-            //
-            self._refHandle = self.root.child("urls").observe(.value, with: { (snapshot) in
-
-                let initialVidCount = self.vids.count
-                self.vids = []
-
-                for child in snapshot.children {
-                    if let data = child as? DataSnapshot {
-                        var vidMap: [String:String] = [:]
-                        
-                        vidMap["id"] = data.key
-                        for child in data.children {
-                            if let snap = child as? DataSnapshot {
-                                let key = snap.key
-                                if key == "likes" {
-                                    vidMap["likes"] = "\(snap.childrenCount)"
-                                } else if let value = snap.value as? String {
-                                    vidMap[key] = value
-                                }
-                            }
-                        }
-                        if let name = vidMap["name"], let urlStr = vidMap["url"], let id = vidMap["id"] {
-                            self.vids.append(Vid(name: name, id: id, url: urlStr, likes: vidMap["likes"] ?? "0"))
-                        }
-                    }
-                }
-                
-                // by not-seen, likes
-                if self.vids.count != initialVidCount {
-                    self.sortVids()
-                    self.currentVid = self.vids.count - 1
-                    self.next()
-                }
-
-                if !self.playerCreated {
-                    self.createPlayer()
-                    self.playerCreated = true
-                }
-            }) { (error) in
-                print(error.localizedDescription)
-            }
-
-         })
-    }
-
-
-    private func createPlayer() {
-        player = AVPlayer()
-        
-        playerLayer = AVPlayerLayer(player: player!)
-        resize(size: view.frame)
-        self.view.layer.addSublayer(playerLayer)
-        
-        let recogDown = UITapGestureRecognizer(target: self, action: #selector(swiper))
-        view.addGestureRecognizer(recogDown)
-        
-        feelingsButton = UIButton(frame: CGRect(x: -3, y: 60, width: 40, height: 40))
-        feelingsButton.setTitle(currentFeeling.rawValue, for: UIControl.State.normal)
-        feelingsButton.addTarget(self, action: #selector(thumbsUp), for: .touchUpInside)
-        view.addSubview(feelingsButton)
-        feelingsButton.frame = CGRect(x: -3, y: 60, width: 40, height: 40)
-        
-        descriptionLabel = UILabel()
-        descriptionLabel.numberOfLines = 0
-        descriptionLabel.translatesAutoresizingMaskIntoConstraints = false
-        descriptionLabel.lineBreakMode = .byWordWrapping
-        view.addSubview(descriptionLabel)
-        NSLayoutConstraint.activate([
-            descriptionLabel.topAnchor.constraint(equalTo: view.layoutMarginsGuide.topAnchor),
-            descriptionLabel.trailingAnchor.constraint(lessThanOrEqualTo: view.layoutMarginsGuide.trailingAnchor, constant: -30.0),
-            descriptionLabel.leadingAnchor.constraint(greaterThanOrEqualTo: view.layoutMarginsGuide.leadingAnchor, constant: 20),
-        ])
-        descriptionLabel.text = vids[currentVid].name
-        descriptionLabel.numberOfLines = 0
-        descriptionLabel.textColor = UIColor.white
-        
-        likesLabel = UILabel()
-        likesLabel.textColor = .red
-        likesLabel.text = vids[currentVid].likes
-        likesLabel.translatesAutoresizingMaskIntoConstraints = false
-        likesLabel.lineBreakMode = .byWordWrapping
-        view.addSubview(likesLabel)
-        NSLayoutConstraint.activate([
-            likesLabel.topAnchor.constraint(equalTo: view.layoutMarginsGuide.topAnchor),
-            likesLabel.trailingAnchor.constraint(lessThanOrEqualTo: view.layoutMarginsGuide.trailingAnchor, constant: 0.0),
-        ])
-        
-        NotificationCenter.default.addObserver(self, selector: #selector(videoDidEnd), name:
-            NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil)
-
-
-        if let urlStr = vids.first?.url, let url = URL(string: urlStr) {
-            player?.replaceCurrentItem(with: AVPlayerItem(url: url))
-            player?.play()
-        }
-    }
-    
-    override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
-        resize(size: CGRect(origin: CGPoint(), size: size))
-    }
-    
-    private func resize(size: CGRect) {
-        playerLayer.frame = size
-        playerLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill
-    }
-    
-    private func sortVids() {
-        let notSeen = vids.filter({ vidsSeen[$0.id] == nil })
-        let seen = vids.filter({ vidsSeen[$0.id] != nil }).sorted(by: {$0.likes > $1.likes})
-        vids = seen + notSeen
-    }
-
-    private func next() {
-        if currentVid >= (vids.count - 1) {
-            sortVids()
-            currentVid = vids.count - 1
-        }
-        currentVid = (1 + currentVid) % vids.count
-        
-        if vidsSeen[vids[currentVid].id] == nil {
-            vidsSeen[vids[currentVid].id] = true
-            root.child("seen/\(directoryID)/\(vids[currentVid].id)").setValue("1")
-        }
-        
-        currentFeeling = .no
-        likesLabel.text = vids[currentVid].likes
-        if let url = URL(string: vids[currentVid].url) {
-            descriptionLabel.text = vids[currentVid].name
-            print("Playing '\(vids[currentVid].name)")
-            player?.replaceCurrentItem(with: AVPlayerItem(url: url))
-            player?.play()
-        }
-    }
-    
-    @objc func videoDidEnd(notification: NSNotification) {
-        next()
-        print("ended")
-    }
-    
-    //    @objc func viewingDone() {
-    //        navigationController?.popViewController(animated: true)
-    //    }
-    
-    @objc func swiper(recog: UIGestureRecognizer) {
-        next()
-        print("default in swipe")
-    }
-    
-    
-    
-    /*
-     // MARK: - Navigation
-     
-     // In a storyboard-based application, you will often want to do a little preparation before navigation
-     override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
-     // Get the new view controller using segue.destination.
-     // Pass the selected object to the new view controller.
-     }
-     */
-    
-}
diff --git a/assign5/openTok/openTok/RecordViewController.swift b/assign5/openTok/openTok/RecordViewController.swift
deleted file mode 100644
index e556e6d..0000000
--- a/assign5/openTok/openTok/RecordViewController.swift
+++ /dev/null
@@ -1,36 +0,0 @@
-//
-//  RecordViewController.swift
-//  openTok
-//
-//  Created by Pete Keleher on 4/30/20.
-//  Copyright © 2020 Pete Keleher. All rights reserved.
-//
-
-import UIKit
-import AVKit
-
-class RecordViewController: UIViewController {
-    
-    override func viewDidLoad() {
-        super.viewDidLoad()
-        
-        let player = AVPlayer(url: URL(string: "https://sedna.cs.umd.edu/436clips/vids/horses.mp4")!)
-        let playerLayer = AVPlayerLayer(player: player)
-        playerLayer.frame = view.frame
-        playerLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill
-        self.view.layer.addSublayer(playerLayer)
-        player.play()
-    }
-    
-    
-    /*
-     // MARK: - Navigation
-     
-     // In a storyboard-based application, you will often want to do a little preparation before navigation
-     override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
-     // Get the new view controller using segue.destination.
-     // Pass the selected object to the new view controller.
-     }
-     */
-    
-}
diff --git a/assign5/openTok/openTok/SceneDelegate.swift b/assign5/openTok/openTok/SceneDelegate.swift
deleted file mode 100644
index 76cc34b..0000000
--- a/assign5/openTok/openTok/SceneDelegate.swift
+++ /dev/null
@@ -1,53 +0,0 @@
-//
-//  SceneDelegate.swift
-//  openTok
-//
-//  Created by Pete Keleher on 4/29/20.
-//  Copyright © 2020 Pete Keleher. All rights reserved.
-//
-
-import UIKit
-
-class SceneDelegate: UIResponder, UIWindowSceneDelegate {
-
-    var window: UIWindow?
-
-
-    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
-        // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
-        // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
-        // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
-        guard let _ = (scene as? UIWindowScene) else { return }
-    }
-
-    func sceneDidDisconnect(_ scene: UIScene) {
-        // Called as the scene is being released by the system.
-        // This occurs shortly after the scene enters the background, or when its session is discarded.
-        // Release any resources associated with this scene that can be re-created the next time the scene connects.
-        // The scene may re-connect later, as its session was not neccessarily discarded (see `application:didDiscardSceneSessions` instead).
-    }
-
-    func sceneDidBecomeActive(_ scene: UIScene) {
-        // Called when the scene has moved from an inactive state to an active state.
-        // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive.
-    }
-
-    func sceneWillResignActive(_ scene: UIScene) {
-        // Called when the scene will move from an active state to an inactive state.
-        // This may occur due to temporary interruptions (ex. an incoming phone call).
-    }
-
-    func sceneWillEnterForeground(_ scene: UIScene) {
-        // Called as the scene transitions from the background to the foreground.
-        // Use this method to undo the changes made on entering the background.
-    }
-
-    func sceneDidEnterBackground(_ scene: UIScene) {
-        // Called as the scene transitions from the foreground to the background.
-        // Use this method to save data, release shared resources, and store enough scene-specific state information
-        // to restore the scene back to its current state.
-    }
-
-
-}
-
diff --git a/assign5/openTok/openTok/URLController.swift b/assign5/openTok/openTok/URLController.swift
deleted file mode 100644
index 76e5b74..0000000
--- a/assign5/openTok/openTok/URLController.swift
+++ /dev/null
@@ -1,58 +0,0 @@
-//
-//  URLController.swift
-//  openTok
-//
-//  Created by Pete Keleher on 4/29/20.
-//  Copyright © 2020 Pete Keleher. All rights reserved.
-//
-
-import UIKit
-import FirebaseDatabase
-
-class URLController: UIViewController {
-
-    let root = Database.database().reference()
-
-    @IBOutlet weak var nameTextOutlet: UITextField!
-    @IBOutlet weak var urlTextOutlet: UITextField!
-    @IBOutlet weak var errorLabelOutlet: UILabel!
-    @IBOutlet weak var uploadOutlet: UIButton!
-    
-    @IBAction func uploadAction(_ sender: UIButton) {
-        if let name = nameTextOutlet.text, let url = urlTextOutlet.text {
- 
-            root.child("urls").childByAutoId().setValue(["name": name, "url": url])  {
-              (error:Error?, ref:DatabaseReference) in
-              if let error = error {
-                self.errorLabelOutlet.text = "Data could not be saved: \(error)."
-              } else {
-                self.errorLabelOutlet.text = ""
-                print("data saved succesfully to Firebase")
-                self.navigationController?.popViewController(animated: true)
-              }
-            }
-        }
-        
-    }
-    
-    override func viewDidLoad() {
-        super.viewDidLoad()
-
-        nameTextOutlet.text = ""
-        urlTextOutlet.text = ""
-        
-        uploadOutlet.layer.cornerRadius = 15
-    }
-    
-
-    /*
-    // MARK: - Navigation
-
-    // In a storyboard-based application, you will often want to do a little preparation before navigation
-    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
-        // Get the new view controller using segue.destination.
-        // Pass the selected object to the new view controller.
-    }
-    */
-
-}
-- 
GitLab