diff --git a/CoreStore.xcodeproj/project.pbxproj b/CoreStore.xcodeproj/project.pbxproj index 92c2458..54aa22a 100644 --- a/CoreStore.xcodeproj/project.pbxproj +++ b/CoreStore.xcodeproj/project.pbxproj @@ -64,6 +64,7 @@ B5E84F411AFF8CCD0064E85B /* ClauseTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F401AFF8CCD0064E85B /* ClauseTypes.swift */; }; B5FAD6A91B50A4B400714891 /* NSProgress+Convenience.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5FAD6A81B50A4B300714891 /* NSProgress+Convenience.swift */; }; B5FAD6AC1B51285300714891 /* MigrationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5FAD6AB1B51285300714891 /* MigrationManager.swift */; }; + B5FAD6AE1B518DCB00714891 /* CoreStore+Migration.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5FAD6AD1B518DCB00714891 /* CoreStore+Migration.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -162,6 +163,7 @@ B5E84F401AFF8CCD0064E85B /* ClauseTypes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ClauseTypes.swift; sourceTree = ""; }; B5FAD6A81B50A4B300714891 /* NSProgress+Convenience.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSProgress+Convenience.swift"; sourceTree = ""; }; B5FAD6AB1B51285300714891 /* MigrationManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MigrationManager.swift; sourceTree = ""; }; + B5FAD6AD1B518DCB00714891 /* CoreStore+Migration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CoreStore+Migration.swift"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -270,6 +272,7 @@ isa = PBXGroup; children = ( B56964D31B22FFAD0075EE4A /* DataStack+Migration.swift */, + B5FAD6AD1B518DCB00714891 /* CoreStore+Migration.swift */, B56007151B4018AB00A9A8F9 /* MigrationChain.swift */, B56965231B356B820075EE4A /* MigrationResult.swift */, ); @@ -553,6 +556,7 @@ B5E84F0E1AFF847B0064E85B /* Tweak.swift in Sources */, B5E84F121AFF847B0064E85B /* OrderBy.swift in Sources */, B5E84F361AFF85470064E85B /* NSManagedObjectContext+Setup.swift in Sources */, + B5FAD6AE1B518DCB00714891 /* CoreStore+Migration.swift in Sources */, B5E84EE71AFF84610064E85B /* CoreStore+Logging.swift in Sources */, B56007111B3F6BD500A9A8F9 /* Into.swift in Sources */, B5E84F111AFF847B0064E85B /* Select.swift in Sources */, diff --git a/CoreStore/Convenience Helpers/NSProgress+Convenience.swift b/CoreStore/Convenience Helpers/NSProgress+Convenience.swift index e6064f9..197edbc 100644 --- a/CoreStore/Convenience Helpers/NSProgress+Convenience.swift +++ b/CoreStore/Convenience Helpers/NSProgress+Convenience.swift @@ -50,9 +50,8 @@ public extension NSProgress { get { - let object: AnyObject? = getAssociatedObjectForKey(&PropertyKeys.progressObserver, inObject: self) - - if let observer = object as? ProgressObserver { + let object: ProgressObserver? = getAssociatedObjectForKey(&PropertyKeys.progressObserver, inObject: self) + if let observer = object { return observer } @@ -72,41 +71,58 @@ public extension NSProgress { @objc private final class ProgressObserver: NSObject { - private weak var progress: NSProgress? - private var progressHandler: ((progress: NSProgress) -> Void)? + private unowned let progress: NSProgress + private var progressHandler: ((progress: NSProgress) -> Void)? { + + didSet { + + let progressHandler = self.progressHandler + if (progressHandler == nil) == (oldValue == nil) { + + return + } + + if let _ = progressHandler { + + self.progress.addObserver( + self, + forKeyPath: "fractionCompleted", + options: [.Initial, .New], + context: nil + ) + } + else { + + self.progress.removeObserver(self, forKeyPath: "fractionCompleted") + } + } + } private init(_ progress: NSProgress) { self.progress = progress super.init() - - progress.addObserver( - self, - forKeyPath: "fractionCompleted", - options: .New, - context: nil - ) } deinit { - progress?.removeObserver(self, forKeyPath: "fractionCompleted") + if let _ = self.progressHandler { + + self.progressHandler = nil + self.progress.removeObserver(self, forKeyPath: "fractionCompleted") + } } override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer) { - guard let progress = self.progress where object as? NSProgress == progress && keyPath == "fractionCompleted" else { + guard let progress = object as? NSProgress where progress == self.progress && keyPath == "fractionCompleted" else { - super.observeValueForKeyPath(keyPath, ofObject: object, change: change, context: context) return } GCDQueue.Main.async { [weak self] () -> Void in - if let strongSelf = self, let progress = strongSelf.progress { - - strongSelf.progressHandler?(progress: progress) - } + self?.progressHandler?(progress: progress) } } } diff --git a/CoreStore/Internal/NSManagedObjectModel+Setup.swift b/CoreStore/Internal/NSManagedObjectModel+Setup.swift index 49fa678..6665035 100644 --- a/CoreStore/Internal/NSManagedObjectModel+Setup.swift +++ b/CoreStore/Internal/NSManagedObjectModel+Setup.swift @@ -52,7 +52,6 @@ internal extension NSManagedObjectModel { let modelVersions = Set(versionHashes.keys) let currentModelVersion: String - if let modelVersion = modelVersion { currentModelVersion = modelVersion diff --git a/CoreStore/Migrating/CoreStore+Migration.swift b/CoreStore/Migrating/CoreStore+Migration.swift new file mode 100644 index 0000000..c9f98f7 --- /dev/null +++ b/CoreStore/Migrating/CoreStore+Migration.swift @@ -0,0 +1,144 @@ +// +// CoreStore+Migration.swift +// CoreStore +// +// Copyright (c) 2015 John Rommel Estropia +// +// 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 +import CoreData +import GCDKit + + +// MARK: - CoreStore + +public extension CoreStore { + + /** + Asynchronously adds to the `defaultStack` an SQLite store from the given SQLite file name. Note that using `addSQLiteStore(...)` instead of `addSQLiteStoreAndWait(...)` implies that the migrations are allowed and expected (thus the asynchronous `completion`.) + + - parameter fileName: the local filename for the SQLite persistent store in the "Application Support" directory. A new SQLite file will be created if it does not exist. Note that if you have multiple configurations, you will need to specify a different `fileName` explicitly for each of them. + - parameter configuration: an optional configuration name from the model file. If not specified, defaults to `nil`, the "Default" configuration. Note that if you have multiple configurations, you will need to specify a different `fileName` explicitly for each of them. + - parameter mappingModelBundles: an optional array of bundles to search mapping model files from. If not set, defaults to the `NSBundle.allBundles()`. + - parameter completion: the closure to be executed on the main queue when the process completes, either due to success or failure. The closure's `PersistentStoreResult` argument indicates the result. This closure is NOT executed if an error is thrown, but will be executed with a `.Failure` result if an error occurs asynchronously. + - returns: an `NSProgress` instance if a migration has started, or `nil` is no migrations are required + */ + public static func addSQLiteStore(fileName fileName: String, configuration: String? = nil, mappingModelBundles: [NSBundle]? = nil, completion: (PersistentStoreResult) -> Void) throws -> NSProgress? { + + return try self.defaultStack.addSQLiteStore( + fileName: fileName, + configuration: configuration, + mappingModelBundles: mappingModelBundles, + completion: completion + ) + } + + /** + Asynchronously adds to the `defaultStack` an SQLite store from the given SQLite file URL. Note that using `addSQLiteStore(...)` instead of `addSQLiteStoreAndWait(...)` implies that the migrations are allowed and expected (thus the asynchronous `completion`.) + + - parameter fileURL: the local file URL for the SQLite persistent store. A new SQLite file will be created if it does not exist. If not specified, defaults to a file URL pointing to a ".sqlite" file in the "Application Support" directory. Note that if you have multiple configurations, you will need to specify a different `fileURL` explicitly for each of them. + - parameter configuration: an optional configuration name from the model file. If not specified, defaults to `nil`, the "Default" configuration. Note that if you have multiple configurations, you will need to specify a different `fileURL` explicitly for each of them. + - parameter mappingModelBundles: an optional array of bundles to search mapping model files from. If not set, defaults to the `NSBundle.allBundles()`. + - parameter completion: the closure to be executed on the main queue when the process completes, either due to success or failure. The closure's `PersistentStoreResult` argument indicates the result. This closure is NOT executed if an error is thrown, but will be executed with a `.Failure` result if an error occurs asynchronously. + - returns: an `NSProgress` instance if a migration has started, or `nil` is no migrations are required + */ + public static func addSQLiteStore(fileURL fileURL: NSURL = defaultSQLiteStoreURL, configuration: String? = nil, mappingModelBundles: [NSBundle]? = NSBundle.allBundles(), completion: (PersistentStoreResult) -> Void) throws -> NSProgress? { + + return try self.defaultStack.addSQLiteStore( + fileURL: fileURL, + configuration: configuration, + mappingModelBundles: mappingModelBundles, + completion: completion + ) + } + + /** + Using the `defaultStack`, migrates an SQLite store with the specified filename to the `DataStack`'s managed object model version WITHOUT adding the migrated store to the data stack. + + - parameter fileName: the local filename for the SQLite persistent store in the "Application Support" directory. + - parameter configuration: an optional configuration name from the model file. If not specified, defaults to `nil` which indicates the "Default" configuration. + - parameter mappingModelBundles: an optional array of bundles to search mapping model files from. If not set, defaults to the `NSBundle.mainBundle()`. + - parameter sourceBundles: an optional array of bundles to search mapping model files from. If not set, defaults to the `NSBundle.mainBundle()`. + - returns: an `NSProgress` instance if a migration has started, or `nil` is no migrations are required + */ + public static func upgradeSQLiteStoreIfNeeded(fileName fileName: String, configuration: String? = nil, mappingModelBundles: [NSBundle]? = nil, completion: (MigrationResult) -> Void) throws -> NSProgress? { + + return try self.defaultStack.upgradeSQLiteStoreIfNeeded( + fileName: fileName, + configuration: configuration, + mappingModelBundles: mappingModelBundles, + completion: completion + ) + } + + /** + Using the `defaultStack`, migrates an SQLite store at the specified file URL and configuration name to the `DataStack`'s managed object model version. This method does NOT add the migrated store to the data stack. + + - parameter fileName: the local filename for the SQLite persistent store in the "Application Support" directory. + - parameter configuration: an optional configuration name from the model file. If not specified, defaults to `nil` which indicates the "Default" configuration. + - parameter mappingModelBundles: an optional array of bundles to search mapping model files from. If not set, defaults to the `NSBundle.mainBundle()`. + - parameter sourceBundles: an optional array of bundles to search mapping model files from. If not set, defaults to the `NSBundle.mainBundle()`. + - returns: an `NSProgress` instance if a migration has started, or `nil` is no migrations are required + */ + public static func upgradeSQLiteStoreIfNeeded(fileURL fileURL: NSURL = defaultSQLiteStoreURL, configuration: String? = nil, mappingModelBundles: [NSBundle]? = nil, completion: (MigrationResult) -> Void) throws -> NSProgress? { + + return try self.defaultStack.upgradeSQLiteStoreIfNeeded( + fileURL: fileURL, + configuration: configuration, + mappingModelBundles: mappingModelBundles, + completion: completion + ) + } + + /** + Using the `defaultStack`, checks for the required migrations needed for the store with the specified filename and configuration to be migrated to the `DataStack`'s managed object model version. This method throws an error if the store does not exist, if inspection of the store failed, or no mapping model was found/inferred. + + - parameter fileName: the local filename for the SQLite persistent store in the "Application Support" directory. + - parameter configuration: an optional configuration name from the model file. If not specified, defaults to `nil` which indicates the "Default" configuration. + - parameter mappingModelBundles: an optional array of bundles to search mapping model files from. If not set, defaults to the `NSBundle.allBundles()`. + :return: an array of `MigrationType`s indicating the chain of migrations required for the store; or `nil` if either inspection of the store failed, or no mapping model was found/inferred. `MigrationType` acts as a `Bool` and evaluates to `false` if no migration is required, and `true` if either a lightweight or custom migration is needed. + */ + public static func requiredMigrationsForSQLiteStore(fileName fileName: String, configuration: String? = nil, mappingModelBundles: [NSBundle] = NSBundle.allBundles() as [NSBundle]) throws -> [MigrationType] { + + return try self.defaultStack.requiredMigrationsForSQLiteStore( + fileName: fileName, + configuration: configuration, + mappingModelBundles: mappingModelBundles + ) + } + + /** + Using the `defaultStack`, checks if the store at the specified file URL and configuration needs to be migrated to the `DataStack`'s managed object model version. + + - parameter fileURL: the local file URL for the SQLite persistent store. + - parameter configuration: an optional configuration name from the model file. If not specified, defaults to `nil` which indicates the "Default" configuration. + - parameter mappingModelBundles: an optional array of bundles to search mapping model files from. If not set, defaults to the `NSBundle.allBundles()`. + :return: a `MigrationType` indicating the type of migration required for the store; or `nil` if either inspection of the store failed, or no mapping model was found/inferred. `MigrationType` acts as a `Bool` and evaluates to `false` if no migration is required, and `true` if either a lightweight or custom migration is needed. + */ + public static func requiredMigrationsForSQLiteStore(fileURL fileURL: NSURL = defaultSQLiteStoreURL, configuration: String? = nil, mappingModelBundles: [NSBundle] = NSBundle.allBundles() as [NSBundle]) throws -> [MigrationType] { + + return try self.defaultStack.requiredMigrationsForSQLiteStore( + fileURL: fileURL, + configuration: configuration, + mappingModelBundles: mappingModelBundles + ) + } +} diff --git a/CoreStore/Migrating/DataStack+Migration.swift b/CoreStore/Migrating/DataStack+Migration.swift index 9d50408..de71274 100644 --- a/CoreStore/Migrating/DataStack+Migration.swift +++ b/CoreStore/Migrating/DataStack+Migration.swift @@ -38,7 +38,7 @@ public extension DataStack { - parameter fileName: the local filename for the SQLite persistent store in the "Application Support" directory. A new SQLite file will be created if it does not exist. Note that if you have multiple configurations, you will need to specify a different `fileName` explicitly for each of them. - parameter configuration: an optional configuration name from the model file. If not specified, defaults to `nil`, the "Default" configuration. Note that if you have multiple configurations, you will need to specify a different `fileName` explicitly for each of them. - parameter mappingModelBundles: an optional array of bundles to search mapping model files from. If not set, defaults to the `NSBundle.allBundles()`. - - parameter completion: the closure to be executed on the main queue when the process completes, either due to success or failure. The closure's `PersistentStoreResult` argument indicates the result. If an error is thrown, this closure will not be executed. + - parameter completion: the closure to be executed on the main queue when the process completes, either due to success or failure. The closure's `PersistentStoreResult` argument indicates the result. This closure is NOT executed if an error is thrown, but will be executed with a `.Failure` result if an error occurs asynchronously. - returns: an `NSProgress` instance if a migration has started, or `nil` is no migrations are required */ public func addSQLiteStore(fileName fileName: String, configuration: String? = nil, mappingModelBundles: [NSBundle]? = nil, completion: (PersistentStoreResult) -> Void) throws -> NSProgress? { @@ -60,7 +60,7 @@ public extension DataStack { - parameter fileURL: the local file URL for the SQLite persistent store. A new SQLite file will be created if it does not exist. If not specified, defaults to a file URL pointing to a ".sqlite" file in the "Application Support" directory. Note that if you have multiple configurations, you will need to specify a different `fileURL` explicitly for each of them. - parameter configuration: an optional configuration name from the model file. If not specified, defaults to `nil`, the "Default" configuration. Note that if you have multiple configurations, you will need to specify a different `fileURL` explicitly for each of them. - parameter mappingModelBundles: an optional array of bundles to search mapping model files from. If not set, defaults to the `NSBundle.allBundles()`. - - parameter completion: the closure to be executed on the main queue when the process completes, either due to success or failure. The closure's `PersistentStoreResult` argument indicates the result. + - parameter completion: the closure to be executed on the main queue when the process completes, either due to success or failure. The closure's `PersistentStoreResult` argument indicates the result. This closure is NOT executed if an error is thrown, but will be executed with a `.Failure` result if an error occurs asynchronously. - returns: an `NSProgress` instance if a migration has started, or `nil` is no migrations are required */ public func addSQLiteStore(fileURL fileURL: NSURL = defaultSQLiteStoreURL, configuration: String? = nil, mappingModelBundles: [NSBundle]? = NSBundle.allBundles(), completion: (PersistentStoreResult) -> Void) throws -> NSProgress? { @@ -124,28 +124,38 @@ public extension DataStack { return } - let persistentStoreResult = self.addSQLiteStoreAndWait( - fileURL: fileURL, - configuration: configuration, - automigrating: false, - resetStoreOnMigrationFailure: false - ) - - completion(persistentStoreResult) + do { + + let store = try self.addSQLiteStoreAndWait( + fileURL: fileURL, + configuration: configuration, + automigrating: false, + resetStoreOnMigrationFailure: false + ) + + completion(PersistentStoreResult(store)) + } + catch { + + completion(PersistentStoreResult(error as NSError)) + } } ) } catch let error as NSError where error.code == NSFileReadNoSuchFileError && error.domain == NSCocoaErrorDomain { - let persistentStoreResult = self.addSQLiteStoreAndWait( + let store = try self.addSQLiteStoreAndWait( fileURL: fileURL, configuration: configuration, automigrating: false, resetStoreOnMigrationFailure: false ) - completion(persistentStoreResult) + GCDQueue.Main.async { + + completion(PersistentStoreResult(store)) + } return nil } catch { @@ -312,12 +322,16 @@ public extension DataStack { var operations = [NSOperation]() var cancelled = false - let progress = NSProgress(totalUnitCount: numberOfMigrations) + let progress = NSProgress(parent: nil, userInfo: nil) + progress.totalUnitCount = numberOfMigrations + // todo nsprogress crashing sometimes for (sourceModel, destinationModel, mappingModel, _) in migrationSteps { progress.becomeCurrentWithPendingUnitCount(1) - let childProgress = NSProgress(totalUnitCount: 100) + + let childProgress = NSProgress(parent: progress, userInfo: nil) + childProgress.totalUnitCount = 100 operations.append( NSBlockOperation { [weak self] in @@ -338,7 +352,6 @@ public extension DataStack { mappingModel: mappingModel, progress: childProgress ) - childProgress.setProgressHandler(nil) } catch { @@ -365,9 +378,8 @@ public extension DataStack { GCDQueue.Main.async { + progress.setProgressHandler(nil) completion(migrationResult ?? MigrationResult(migrationTypes)) - - withExtendedLifetime(progress) { (_: NSProgress) -> Void in } return } } diff --git a/CoreStore/Setting Up/CoreStore+Setup.swift b/CoreStore/Setting Up/CoreStore+Setup.swift index f34981b..20fccda 100644 --- a/CoreStore/Setting Up/CoreStore+Setup.swift +++ b/CoreStore/Setting Up/CoreStore+Setup.swift @@ -35,12 +35,12 @@ public extension CoreStore { /** Adds an in-memory store to the `defaultStack`. - - parameter configuration: an optional configuration name from the model file. If not specified, defaults to nil. - - returns: a `PersistentStoreResult` indicating success or failure. + - parameter configuration: an optional configuration name from the model file. If not specified, defaults to `nil`. + - returns: the `NSPersistentStore` added to the stack. */ - public static func addInMemoryStore(configuration: String? = nil) -> PersistentStoreResult { + public static func addInMemoryStore(configuration configuration: String? = nil) throws -> NSPersistentStore { - return self.defaultStack.addInMemoryStore(configuration: configuration) + return try self.defaultStack.addInMemoryStore(configuration: configuration) } /** @@ -50,11 +50,11 @@ public extension CoreStore { - parameter configuration: an optional configuration name from the model file. If not specified, defaults to nil. - parameter automigrating: Set to true to configure Core Data auto-migration, or false to disable. If not specified, defaults to true. - parameter resetStoreOnMigrationFailure: Set to true to delete the store on migration failure; or set to false to throw exceptions on failure instead. Typically should only be set to true when debugging, or if the persistent store can be recreated easily. If not specified, defaults to false - - returns: a `PersistentStoreResult` indicating success or failure. + - returns: the `NSPersistentStore` added to the stack. */ - public static func addSQLiteStoreAndWait(fileName fileName: String, configuration: String? = nil, automigrating: Bool = true, resetStoreOnMigrationFailure: Bool = false) -> PersistentStoreResult { + public static func addSQLiteStoreAndWait(fileName fileName: String, configuration: String? = nil, automigrating: Bool = true, resetStoreOnMigrationFailure: Bool = false) throws -> NSPersistentStore { - return self.defaultStack.addSQLiteStoreAndWait( + return try self.defaultStack.addSQLiteStoreAndWait( fileName: fileName, configuration: configuration, automigrating: automigrating, @@ -69,16 +69,15 @@ public extension CoreStore { - parameter configuration: an optional configuration name from the model file. If not specified, defaults to nil. - parameter automigrating: Set to true to configure Core Data auto-migration, or false to disable. If not specified, defaults to true. - parameter resetStoreOnMigrationFailure: Set to true to delete the store on migration failure; or set to false to throw exceptions on failure instead. Typically should only be set to true when debugging, or if the persistent store can be recreated easily. If not specified, defaults to false. - - returns: a `PersistentStoreResult` indicating success or failure. + - returns: the `NSPersistentStore` added to the stack. */ - public static func addSQLiteStoreAndWait(fileURL: NSURL = defaultSQLiteStoreURL, configuration: String? = nil, automigrating: Bool = true, resetStoreOnMigrationFailure: Bool = false) -> PersistentStoreResult { + public static func addSQLiteStoreAndWait(fileURL: NSURL = defaultSQLiteStoreURL, configuration: String? = nil, automigrating: Bool = true, resetStoreOnMigrationFailure: Bool = false) throws -> NSPersistentStore { - return self.defaultStack.addSQLiteStoreAndWait( + return try self.defaultStack.addSQLiteStoreAndWait( fileURL: fileURL, configuration: configuration, automigrating: automigrating, resetStoreOnMigrationFailure: resetStoreOnMigrationFailure ) } - } diff --git a/CoreStore/Setting Up/DataStack.swift b/CoreStore/Setting Up/DataStack.swift index 4dea818..1ae2dcc 100644 --- a/CoreStore/Setting Up/DataStack.swift +++ b/CoreStore/Setting Up/DataStack.swift @@ -67,7 +67,6 @@ public final class DataStack { self.coordinator = NSPersistentStoreCoordinator(managedObjectModel: model) self.rootSavingContext = NSManagedObjectContext.rootSavingContextForCoordinator(self.coordinator) self.mainContext = NSManagedObjectContext.mainContextForRootContext(self.rootSavingContext) - self.bundle = bundle self.model = model self.migrationChain = migrationChain @@ -75,7 +74,7 @@ public final class DataStack { } /** - Returns the `DataStack`'s model version. The version string is the same as the name of the .xcdatamodeld file. + Returns the `DataStack`'s model version. The version string is the same as the name of the version-specific .xcdatamodeld file. */ public var modelVersion: String { @@ -85,10 +84,10 @@ public final class DataStack { /** Adds an in-memory store to the stack. - - parameter configuration: an optional configuration name from the model file. If not specified, defaults to nil. - - returns: a `PersistentStoreResult` indicating success or failure. + - parameter configuration: an optional configuration name from the model file. If not specified, defaults to `nil`. + - returns: the `NSPersistentStore` added to the stack. */ - public func addInMemoryStore(configuration configuration: String? = nil) -> PersistentStoreResult { + public func addInMemoryStore(configuration configuration: String? = nil) throws -> NSPersistentStore { let coordinator = self.coordinator; @@ -114,25 +113,15 @@ public final class DataStack { if let store = store { self.updateMetadataForPersistentStore(store) - return PersistentStoreResult(store) + return store } - if let error = storeError { - - CoreStore.handleError( - error, - "Failed to add in-memory \(typeName(NSPersistentStore))." - ) - return PersistentStoreResult(error) - } - else { - - CoreStore.handleError( - NSError(coreStoreErrorCode: .UnknownError), - "Failed to add in-memory \(typeName(NSPersistentStore))." - ) - return PersistentStoreResult(.UnknownError) - } + let error = storeError ?? NSError(coreStoreErrorCode: .UnknownError) + CoreStore.handleError( + error, + "Failed to add in-memory \(typeName(NSPersistentStore)) to the stack." + ) + throw error } /** @@ -142,11 +131,11 @@ public final class DataStack { - parameter configuration: an optional configuration name from the model file. If not specified, defaults to `nil`, the "Default" configuration. Note that if you have multiple configurations, you will need to specify a different `fileName` explicitly for each of them. - parameter automigrating: Set to true to configure Core Data auto-migration, or false to disable. If not specified, defaults to true. - parameter resetStoreOnMigrationFailure: Set to true to delete the store on migration failure; or set to false to throw exceptions on failure instead. Typically should only be set to true when debugging, or if the persistent store can be recreated easily. If not specified, defaults to false - - returns: a `PersistentStoreResult` indicating success or failure. + - returns: the `NSPersistentStore` added to the stack. */ - public func addSQLiteStoreAndWait(fileName fileName: String, configuration: String? = nil, automigrating: Bool = true, resetStoreOnMigrationFailure: Bool = false) -> PersistentStoreResult { + public func addSQLiteStoreAndWait(fileName fileName: String, configuration: String? = nil, automigrating: Bool = true, resetStoreOnMigrationFailure: Bool = false) throws -> NSPersistentStore { - return self.addSQLiteStoreAndWait( + return try self.addSQLiteStoreAndWait( fileURL: applicationSupportDirectory.URLByAppendingPathComponent( fileName, isDirectory: false @@ -164,9 +153,9 @@ public final class DataStack { - parameter configuration: an optional configuration name from the model file. If not specified, defaults to `nil`, the "Default" configuration. Note that if you have multiple configurations, you will need to specify a different `fileURL` explicitly for each of them. - parameter automigrating: Set to true to configure Core Data auto-migration, or false to disable. If not specified, defaults to true. - parameter resetStoreOnMigrationFailure: Set to true to delete the store on migration failure; or set to false to throw exceptions on failure instead. Typically should only be set to true when debugging, or if the persistent store can be recreated easily. If not specified, defaults to false. - - returns: a `PersistentStoreResult` indicating success or failure. + - returns: the `NSPersistentStore` added to the stack. */ - public func addSQLiteStoreAndWait(fileURL fileURL: NSURL = defaultSQLiteStoreURL, configuration: String? = nil, automigrating: Bool = true, resetStoreOnMigrationFailure: Bool = false) -> PersistentStoreResult { + public func addSQLiteStoreAndWait(fileURL fileURL: NSURL = defaultSQLiteStoreURL, configuration: String? = nil, automigrating: Bool = true, resetStoreOnMigrationFailure: Bool = false) throws -> NSPersistentStore { CoreStore.assert( fileURL.fileURL, @@ -182,15 +171,16 @@ public final class DataStack { && isExistingStoreAutomigrating == automigrating && store.configurationName == (configuration ?? Into.defaultConfigurationName) { - return PersistentStoreResult(store) + return store } + let error = NSError(coreStoreErrorCode: .DifferentPersistentStoreExistsAtURL) CoreStore.handleError( - NSError(coreStoreErrorCode: .DifferentPersistentStoreExistsAtURL), + error, "Failed to add SQLite \(typeName(NSPersistentStore)) at \"\(fileURL)\" because a different \(typeName(NSPersistentStore)) at that URL already exists." ) - return PersistentStoreResult(.DifferentPersistentStoreExistsAtURL) + throw error } let fileManager = NSFileManager.defaultManager() @@ -230,7 +220,7 @@ public final class DataStack { if let store = store { self.updateMetadataForPersistentStore(store) - return PersistentStoreResult(store) + return store } if let error = storeError @@ -285,16 +275,16 @@ public final class DataStack { if let store = store { self.updateMetadataForPersistentStore(store) - return PersistentStoreResult(store) + return store } } + let error = storeError ?? NSError(coreStoreErrorCode: .UnknownError) CoreStore.handleError( - storeError ?? NSError(coreStoreErrorCode: .UnknownError), + error, "Failed to add SQLite \(typeName(NSPersistentStore)) at \"\(fileURL)\"." ) - - return PersistentStoreResult(.UnknownError) + throw error } @@ -303,7 +293,6 @@ public final class DataStack { internal let coordinator: NSPersistentStoreCoordinator internal let rootSavingContext: NSManagedObjectContext internal let mainContext: NSManagedObjectContext - internal let bundle: NSBundle internal let model: NSManagedObjectModel internal let migrationChain: MigrationChain internal let childTransactionQueue: GCDQueue = .createSerial("com.corestore.datastack.childtransactionqueue") diff --git a/CoreStore/Setting Up/PersistentStoreResult.swift b/CoreStore/Setting Up/PersistentStoreResult.swift index a50f9fa..e711ab4 100644 --- a/CoreStore/Setting Up/PersistentStoreResult.swift +++ b/CoreStore/Setting Up/PersistentStoreResult.swift @@ -30,26 +30,28 @@ import CoreData // MARK: - PersistentStoreResult /** -The `PersistentStoreResult` indicates the result of initializing the persistent store. +The `PersistentStoreResult` indicates the result of an asynchronous initialization of a persistent store. The `PersistentStoreResult` can be treated as a boolean: - let result = CoreStore.addSQLiteStoreAndWait() - if result { - // succeeded - } - else { - // failed - } + try! CoreStore.addSQLiteStore(completion: { (result: PersistentStoreResult) -> Void in + if result { + // succeeded + } + else { + // failed + } + }) or as an `enum`, where the resulting associated object can also be inspected: - let result = CoreStore.addSQLiteStoreAndWait() - switch result { - case .Success(let persistentStore): - // persistentStore is the related NSPersistentStore instance - case .Failure(let error): - // error is the NSError instance for the failure - } + try! CoreStore.addSQLiteStore(completion: { (result: PersistentStoreResult) -> Void in + switch result { + case .Success(let persistentStore): + // persistentStore is the related NSPersistentStore instance + case .Failure(let error): + // error is the NSError instance for the failure + } + }) ``` */ public enum PersistentStoreResult { diff --git a/CoreStoreDemo/CoreStoreDemo.xcodeproj/project.pbxproj b/CoreStoreDemo/CoreStoreDemo.xcodeproj/project.pbxproj index 5bd036d..b398311 100644 --- a/CoreStoreDemo/CoreStoreDemo.xcodeproj/project.pbxproj +++ b/CoreStoreDemo/CoreStoreDemo.xcodeproj/project.pbxproj @@ -11,7 +11,8 @@ B503FAE01AFDC71700F90881 /* ObjectObserverDemoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B503FADC1AFDC71700F90881 /* ObjectObserverDemoViewController.swift */; }; B503FAE11AFDC71700F90881 /* Palette.swift in Sources */ = {isa = PBXBuildFile; fileRef = B503FADD1AFDC71700F90881 /* Palette.swift */; }; B503FAE21AFDC71700F90881 /* PaletteTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B503FADE1AFDC71700F90881 /* PaletteTableViewCell.swift */; }; - B50D67911B4BCFED00124277 /* OrganismV3ToV2.xcmappingmodel in Sources */ = {isa = PBXBuildFile; fileRef = B50D67901B4BCFED00124277 /* OrganismV3ToV2.xcmappingmodel */; }; + B5125C121B521B78003A42C7 /* OrganismV2ToV3.xcmappingmodel in Sources */ = {isa = PBXBuildFile; fileRef = B5125C111B521B78003A42C7 /* OrganismV2ToV3.xcmappingmodel */; }; + B5125C141B521BA7003A42C7 /* OrganismV3ToV2.xcmappingmodel in Sources */ = {isa = PBXBuildFile; fileRef = B5125C131B521BA7003A42C7 /* OrganismV3ToV2.xcmappingmodel */; }; B52977D91B120B80003D50A5 /* ObserversViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52977D81B120B80003D50A5 /* ObserversViewController.swift */; }; B52977DD1B120F3B003D50A5 /* TransactionsDemoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52977DC1B120F3B003D50A5 /* TransactionsDemoViewController.swift */; }; B52977DF1B120F83003D50A5 /* MapKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B52977DE1B120F83003D50A5 /* MapKit.framework */; }; @@ -38,12 +39,12 @@ B583A9211AF5F542001F76AF /* CoreStore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = B583A91B1AF5F4F4001F76AF /* CoreStore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; B5D9C9191B20AB1900E64F0E /* GCDKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B5D9C9181B20AB1900E64F0E /* GCDKit.framework */; }; B5D9C91A1B20AB1900E64F0E /* GCDKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = B5D9C9181B20AB1900E64F0E /* GCDKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + B5E599321B5240F50084BD5F /* OrganismTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E599311B5240F50084BD5F /* OrganismTableViewCell.swift */; }; B5EE25851B36E23C0000406B /* OrganismV1.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5EE25841B36E23C0000406B /* OrganismV1.swift */; }; B5EE25871B36E2520000406B /* OrganismV2.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5EE25861B36E2520000406B /* OrganismV2.swift */; }; B5EE258C1B36E40D0000406B /* MigrationsDemoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5EE258B1B36E40D0000406B /* MigrationsDemoViewController.swift */; }; B5EE259B1B3EA4890000406B /* OrganismV3.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5EE259A1B3EA4890000406B /* OrganismV3.swift */; }; B5EE259E1B3EC1B20000406B /* OrganismProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5EE259D1B3EC1B20000406B /* OrganismProtocol.swift */; }; - B5F45A611B4AE5A700831F2F /* OrganismV2ToV3.xcmappingmodel in Sources */ = {isa = PBXBuildFile; fileRef = B5F45A601B4AE5A700831F2F /* OrganismV2ToV3.xcmappingmodel */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -97,7 +98,8 @@ B503FADC1AFDC71700F90881 /* ObjectObserverDemoViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObjectObserverDemoViewController.swift; sourceTree = ""; }; B503FADD1AFDC71700F90881 /* Palette.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Palette.swift; sourceTree = ""; }; B503FADE1AFDC71700F90881 /* PaletteTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PaletteTableViewCell.swift; sourceTree = ""; }; - B50D67901B4BCFED00124277 /* OrganismV3ToV2.xcmappingmodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcmappingmodel; name = OrganismV3ToV2.xcmappingmodel; path = "CoreStoreDemo/MIgrations Demo/OrganismV3ToV2.xcmappingmodel"; sourceTree = SOURCE_ROOT; }; + B5125C111B521B78003A42C7 /* OrganismV2ToV3.xcmappingmodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcmappingmodel; path = OrganismV2ToV3.xcmappingmodel; sourceTree = ""; }; + B5125C131B521BA7003A42C7 /* OrganismV3ToV2.xcmappingmodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcmappingmodel; path = OrganismV3ToV2.xcmappingmodel; sourceTree = ""; }; B52977D81B120B80003D50A5 /* ObserversViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObserversViewController.swift; sourceTree = ""; }; B52977DC1B120F3B003D50A5 /* TransactionsDemoViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TransactionsDemoViewController.swift; sourceTree = ""; }; B52977DE1B120F83003D50A5 /* MapKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MapKit.framework; path = System/Library/Frameworks/MapKit.framework; sourceTree = SDKROOT; }; @@ -124,6 +126,7 @@ B56965281B3582D30075EE4A /* MigrationDemo.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = MigrationDemo.xcdatamodel; sourceTree = ""; }; B583A9141AF5F4F3001F76AF /* CoreStore.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = CoreStore.xcodeproj; path = ../CoreStore.xcodeproj; sourceTree = ""; }; B5D9C9181B20AB1900E64F0E /* GCDKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = GCDKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B5E599311B5240F50084BD5F /* OrganismTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OrganismTableViewCell.swift; path = "CoreStoreDemo/MIgrations Demo/OrganismTableViewCell.swift"; sourceTree = SOURCE_ROOT; }; B5EE25801B36E1B00000406B /* MigrationDemoV2.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = MigrationDemoV2.xcdatamodel; sourceTree = ""; }; B5EE25841B36E23C0000406B /* OrganismV1.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OrganismV1.swift; sourceTree = ""; }; B5EE25861B36E2520000406B /* OrganismV2.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OrganismV2.swift; sourceTree = ""; }; @@ -131,7 +134,6 @@ B5EE258B1B36E40D0000406B /* MigrationsDemoViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MigrationsDemoViewController.swift; sourceTree = ""; }; B5EE259A1B3EA4890000406B /* OrganismV3.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OrganismV3.swift; sourceTree = ""; }; B5EE259D1B3EC1B20000406B /* OrganismProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OrganismProtocol.swift; sourceTree = ""; }; - B5F45A601B4AE5A700831F2F /* OrganismV2ToV3.xcmappingmodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcmappingmodel; path = OrganismV2ToV3.xcmappingmodel; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -265,9 +267,10 @@ B5EE25861B36E2520000406B /* OrganismV2.swift */, B5EE25841B36E23C0000406B /* OrganismV1.swift */, B5EE258B1B36E40D0000406B /* MigrationsDemoViewController.swift */, - B5F45A601B4AE5A700831F2F /* OrganismV2ToV3.xcmappingmodel */, + B5E599311B5240F50084BD5F /* OrganismTableViewCell.swift */, + B5125C111B521B78003A42C7 /* OrganismV2ToV3.xcmappingmodel */, B560070E1B3EC90F00A9A8F9 /* OrganismV2ToV3MigrationPolicy.swift */, - B50D67901B4BCFED00124277 /* OrganismV3ToV2.xcmappingmodel */, + B5125C131B521BA7003A42C7 /* OrganismV3ToV2.xcmappingmodel */, ); path = "Migrations Demo"; sourceTree = ""; @@ -380,6 +383,7 @@ files = ( B56965181B2E20CC0075EE4A /* TimeZone.swift in Sources */, B56965291B3582D30075EE4A /* MigrationDemo.xcdatamodeld in Sources */, + B5E599321B5240F50084BD5F /* OrganismTableViewCell.swift in Sources */, B5EE25851B36E23C0000406B /* OrganismV1.swift in Sources */, B52977DD1B120F3B003D50A5 /* TransactionsDemoViewController.swift in Sources */, B52977E41B121635003D50A5 /* Place.swift in Sources */, @@ -394,11 +398,10 @@ B566E3321B11DF3200F4F0C6 /* UserAccount.swift in Sources */, B54AAD521AF4D26E00848AE0 /* CoreStoreDemo.xcdatamodeld in Sources */, B5EE259B1B3EA4890000406B /* OrganismV3.swift in Sources */, - B5F45A611B4AE5A700831F2F /* OrganismV2ToV3.xcmappingmodel in Sources */, B503FAE11AFDC71700F90881 /* Palette.swift in Sources */, B503FAE21AFDC71700F90881 /* PaletteTableViewCell.swift in Sources */, - B50D67911B4BCFED00124277 /* OrganismV3ToV2.xcmappingmodel in Sources */, B560070F1B3EC90F00A9A8F9 /* OrganismV2ToV3MigrationPolicy.swift in Sources */, + B5125C141B521BA7003A42C7 /* OrganismV3ToV2.xcmappingmodel in Sources */, B503FADF1AFDC71700F90881 /* ListObserverDemoViewController.swift in Sources */, B54AAD4F1AF4D26E00848AE0 /* AppDelegate.swift in Sources */, B56964D71B231AE90075EE4A /* StackSetupDemo.xcdatamodeld in Sources */, @@ -406,6 +409,7 @@ B5EE259E1B3EC1B20000406B /* OrganismProtocol.swift in Sources */, B5EE258C1B36E40D0000406B /* MigrationsDemoViewController.swift in Sources */, B569651C1B30889A0075EE4A /* QueryingResultsViewController.swift in Sources */, + B5125C121B521B78003A42C7 /* OrganismV2ToV3.xcmappingmodel in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/CoreStoreDemo/CoreStoreDemo/Base.lproj/Main.storyboard b/CoreStoreDemo/CoreStoreDemo/Base.lproj/Main.storyboard index 732a228..1a2c4ed 100644 --- a/CoreStoreDemo/CoreStoreDemo/Base.lproj/Main.storyboard +++ b/CoreStoreDemo/CoreStoreDemo/Base.lproj/Main.storyboard @@ -22,8 +22,7 @@ HelveticaNeue-Light HelveticaNeue-Light HelveticaNeue-Light - HelveticaNeue-Light - HelveticaNeue-Light + HelveticaNeue-Thin HelveticaNeue-Light HelveticaNeue-Light HelveticaNeue-Light @@ -44,7 +43,8 @@ - + + @@ -123,118 +123,151 @@ - + - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + + + - - + + @@ -408,7 +441,7 @@ - + diff --git a/CoreStoreDemo/CoreStoreDemo/Fetching and Querying Demo/FetchingAndQueryingDemoViewController.swift b/CoreStoreDemo/CoreStoreDemo/Fetching and Querying Demo/FetchingAndQueryingDemoViewController.swift index 11e544e..2c7b6e4 100644 --- a/CoreStoreDemo/CoreStoreDemo/Fetching and Querying Demo/FetchingAndQueryingDemoViewController.swift +++ b/CoreStoreDemo/CoreStoreDemo/Fetching and Querying Demo/FetchingAndQueryingDemoViewController.swift @@ -15,7 +15,7 @@ private struct Static { static let timeZonesStack: DataStack = { let dataStack = DataStack() - dataStack.addSQLiteStoreAndWait( + try! dataStack.addSQLiteStoreAndWait( fileName: "TimeZoneDemo.sqlite", configuration: "FetchingAndQueryingDemo", resetStoreOnMigrationFailure: true diff --git a/CoreStoreDemo/CoreStoreDemo/List and Object Observers Demo/ListObserverDemoViewController.swift b/CoreStoreDemo/CoreStoreDemo/List and Object Observers Demo/ListObserverDemoViewController.swift index be2382b..8c1bc35 100644 --- a/CoreStoreDemo/CoreStoreDemo/List and Object Observers Demo/ListObserverDemoViewController.swift +++ b/CoreStoreDemo/CoreStoreDemo/List and Object Observers Demo/ListObserverDemoViewController.swift @@ -14,7 +14,7 @@ private struct Static { static let palettes: ListMonitor = { - CoreStore.addSQLiteStoreAndWait( + try! CoreStore.addSQLiteStoreAndWait( fileName: "ColorsDemo.sqlite", configuration: "ObservingDemo", resetStoreOnMigrationFailure: true diff --git a/CoreStoreDemo/CoreStoreDemo/Loggers Demo/CustomLoggerViewController.swift b/CoreStoreDemo/CoreStoreDemo/Loggers Demo/CustomLoggerViewController.swift index c25417a..f0debc7 100644 --- a/CoreStoreDemo/CoreStoreDemo/Loggers Demo/CustomLoggerViewController.swift +++ b/CoreStoreDemo/CoreStoreDemo/Loggers Demo/CustomLoggerViewController.swift @@ -30,7 +30,7 @@ class CustomLoggerViewController: UIViewController, CoreStoreLogger { super.viewDidLoad() - self.dataStack.addSQLiteStoreAndWait(fileName: "emptyStore.sqlite") + try! self.dataStack.addSQLiteStoreAndWait(fileName: "emptyStore.sqlite") CoreStore.logger = self } @@ -109,7 +109,7 @@ class CustomLoggerViewController: UIViewController, CoreStoreLogger { } case .Some(1): - self.dataStack.addSQLiteStoreAndWait(fileName: "emptyStore.sqlite", configuration: "invalidStore") + try! self.dataStack.addSQLiteStoreAndWait(fileName: "emptyStore.sqlite", configuration: "invalidStore") case .Some(2): self.dataStack.beginAsynchronous { (transaction) -> Void in diff --git a/CoreStoreDemo/CoreStoreDemo/MIgrations Demo/MigrationsDemoViewController.swift b/CoreStoreDemo/CoreStoreDemo/MIgrations Demo/MigrationsDemoViewController.swift index 6bc0c33..1b5d4a4 100644 --- a/CoreStoreDemo/CoreStoreDemo/MIgrations Demo/MigrationsDemoViewController.swift +++ b/CoreStoreDemo/CoreStoreDemo/MIgrations Demo/MigrationsDemoViewController.swift @@ -12,7 +12,7 @@ import CoreStore // MARK: - MigrationsDemoViewController -class MigrationsDemoViewController: UITableViewController { +class MigrationsDemoViewController: UIViewController { // MARK: UIViewController @@ -20,10 +20,9 @@ class MigrationsDemoViewController: UITableViewController { super.viewDidLoad() - let models = self.models if let segmentedControl = self.segmentedControl { - for (index, model) in models.enumerate() { + for (index, model) in self.models.enumerate() { segmentedControl.setTitle( model.label, @@ -31,55 +30,38 @@ class MigrationsDemoViewController: UITableViewController { ) } } + self.setDataStack(nil, model: nil, scrollToSelection: false) + } + + override func viewDidAppear(animated: Bool) { - let dataStack = DataStack(modelName: "MigrationDemo") - do { + super.viewDidAppear(animated) + + let modelMetadata = withExtendedLifetime(DataStack(modelName: "MigrationDemo")) { + (dataStack: DataStack) -> ModelMetadata in - let migrations = try dataStack.requiredMigrationsForSQLiteStore( - fileName: "MigrationDemo.sqlite" - ) - - let storeVersion = migrations.first?.sourceVersion ?? dataStack.modelVersion - for model in models { + let models = self.models + do { - if model.version == storeVersion { + let migrations = try dataStack.requiredMigrationsForSQLiteStore( + fileName: "MigrationDemo.sqlite" + ) + + let storeVersion = migrations.first?.sourceVersion ?? dataStack.modelVersion + for model in models { - self.selectModelVersion(model, animated: false) - return + if model.version == storeVersion { + + return model + } } } + catch _ { } + + return models.first! } - catch _ { } - self.selectModelVersion(self.models.first!, animated: false) - } - - - // MARK: UITableViewDataSource - - override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - - return self.models.count - } - - override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { - - let cell = tableView.dequeueReusableCellWithIdentifier("UITableViewCell", forIndexPath: indexPath) - cell.textLabel?.text = self.models[indexPath.row].version - return cell - } - - - // MARK: UITableViewDelegate - - override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? { - - return "Model Versions" - } - - override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { - - self.selectModelVersion(self.models[indexPath.row], animated: true) + self.selectModelVersion(modelMetadata) } @@ -111,28 +93,36 @@ class MigrationsDemoViewController: UITableViewController { ) ] - private var dataStack: DataStack? - private var organism: NSManagedObject? + private var _listMonitor: ListMonitor? + private var listMonitor: ListMonitor? { + + return self._listMonitor + } + private var _dataStack: DataStack? + private var dataStack: DataStack? { + + return self._dataStack + } + + private var _lastSelectedIndexPath: NSIndexPath? + private var lastSelectedIndexPath: NSIndexPath? { + + return self._lastSelectedIndexPath + } + + private func setSelectedIndexPath(indexPath: NSIndexPath, scrollToSelection: Bool) { + + self._lastSelectedIndexPath = indexPath + self.updateDisplay(reloadData: false, scrollToSelection: scrollToSelection, animated: true) + } + + @IBOutlet private dynamic weak var headerContainer: UIView? @IBOutlet private dynamic weak var titleLabel: UILabel? @IBOutlet private dynamic weak var organismLabel: UILabel? @IBOutlet private dynamic weak var segmentedControl: UISegmentedControl? @IBOutlet private dynamic weak var progressView: UIProgressView? - - @IBAction private dynamic func mutateBarButtonTapped(sender: AnyObject?) { - - if let dataStack = self.dataStack, let organism = self.organism { - - dataStack.beginSynchronous { (transaction) -> Void in - - let organism = transaction.edit(organism) - (organism as! OrganismProtocol).mutate() - - transaction.commit() - } - self.updateDisplayWithCompletion() - } - } + @IBOutlet private dynamic weak var tableView: UITableView? @IBAction private dynamic func segmentedControlValueChanged(sender: AnyObject?) { @@ -141,25 +131,24 @@ class MigrationsDemoViewController: UITableViewController { return } - self.selectModelVersion(self.models[index], animated: true) + self.selectModelVersion(self.models[index]) } - private func selectModelVersion(model: ModelMetadata, animated: Bool) { + private func selectModelVersion(model: ModelMetadata) { - if self.organism?.entity.managedObjectClassName == "\(model.entityType)" { + if self.dataStack?.modelVersion == model.version { return } - self.organism = nil - self.dataStack = nil + self.setDataStack(nil, model: nil, scrollToSelection: false) // explicitly trigger NSPersistentStore cleanup by deallocating the stack let dataStack = DataStack( modelName: "MigrationDemo", migrationChain: model.migrationChain ) - self.setEnabled(false, animated: animated) + self.setEnabled(false) let progress = try! dataStack.addSQLiteStore( fileName: "MigrationDemo.sqlite", completion: { [weak self] (result) -> Void in @@ -171,57 +160,50 @@ class MigrationsDemoViewController: UITableViewController { guard case .Success = result else { - strongSelf.setEnabled(true, animated: animated) + strongSelf.setEnabled(true) return } - strongSelf.dataStack = dataStack - if let organism = dataStack.fetchOne(From(model.entityType)) { + strongSelf.setDataStack(dataStack, model: model, scrollToSelection: true) + + let count = dataStack.queryValue(From(model.entityType), Select(.Count("dna"))) + if count > 0 { - strongSelf.organism = organism + strongSelf.setEnabled(true) } else { - dataStack.beginSynchronous { (transaction) -> Void in + dataStack.beginAsynchronous { (transaction) -> Void in - for _ in 0 ..< 100000 { + for i: Int64 in 1 ..< 10000 { - let organism = transaction.create(Into(model.entityType)) - (organism as! OrganismProtocol).mutate() + let organism = transaction.create(Into(model.entityType)) as! OrganismProtocol + organism.dna = i + organism.mutate() } - transaction.commit() + transaction.commit { result -> Void in + + self?.setEnabled(true) + } } - strongSelf.organism = dataStack.fetchOne(From(model.entityType))! } - - strongSelf.updateDisplayWithCompletion() - - let indexOfModel = strongSelf.models.map { $0.version }.indexOf(model.version)! - strongSelf.tableView.selectRowAtIndexPath( - NSIndexPath(forRow: indexOfModel, inSection: 0), - animated: false, - scrollPosition: .None - ) - strongSelf.segmentedControl?.selectedSegmentIndex = indexOfModel - strongSelf.setEnabled(true, animated: animated) } ) if let progress = progress { - self.updateDisplayWithProgress(progress) progress.setProgressHandler { [weak self] (progress) -> Void in - self?.updateDisplayWithProgress(progress) + self?.reloadTableHeaderWithProgress(progress) } } } - func setEnabled(enabled: Bool, animated: Bool) { + private func setEnabled(enabled: Bool) { - UIView.animateKeyframesWithDuration( - animated ? 0.2 : 0, + UIView.animateWithDuration( + 0.2, delay: 0, options: .BeginFromCurrentState, animations: { () -> Void in @@ -231,6 +213,8 @@ class MigrationsDemoViewController: UITableViewController { navigationItem.rightBarButtonItem?.enabled = enabled navigationItem.hidesBackButton = !enabled + self.segmentedControl?.enabled = enabled + if let tableView = self.tableView { tableView.alpha = enabled ? 1.0 : 0.5 @@ -241,18 +225,47 @@ class MigrationsDemoViewController: UITableViewController { ) } - func updateDisplayWithProgress(progress: NSProgress) { + private func setDataStack(dataStack: DataStack?, model: ModelMetadata?, scrollToSelection: Bool) { + + if let dataStack = dataStack, let model = model { + + self.segmentedControl?.selectedSegmentIndex = self.models.map { $0.version }.indexOf(model.version)! + + self._dataStack = dataStack + let listMonitor = dataStack.monitorList(From(model.entityType), OrderBy(.Descending("dna"))) + listMonitor.addObserver(self) + self._listMonitor = listMonitor + + if self.lastSelectedIndexPath == nil { + + if listMonitor.numberOfObjectsInSection(0) > 0 { + + self.setSelectedIndexPath(NSIndexPath(forRow: 0, inSection: 0), scrollToSelection: true) + } + } + } + else { + + self.segmentedControl?.selectedSegmentIndex = UISegmentedControlNoSegment + self._dataStack = nil + self._listMonitor = nil + } + + self.updateDisplay(reloadData: true, scrollToSelection: scrollToSelection, animated: false) + } + + private func reloadTableHeaderWithProgress(progress: NSProgress) { self.progressView?.setProgress(Float(progress.fractionCompleted), animated: true) self.titleLabel?.text = "Migrating: \(progress.localizedDescription)" self.organismLabel?.text = "Incremental step \(progress.localizedAdditionalDescription)" } - func updateDisplayWithCompletion() { + private func updateDisplay(reloadData reloadData: Bool, scrollToSelection: Bool, animated: Bool) { var lines = [String]() var organismType = "" - if let organism = self.organism { + if let indexPath = self.lastSelectedIndexPath, let organism = self.listMonitor?[indexPath] { for property in organism.entity.properties { @@ -265,6 +278,102 @@ class MigrationsDemoViewController: UITableViewController { self.titleLabel?.text = organismType self.organismLabel?.text = "\n".join(lines) self.progressView?.progress = 0 - self.tableView.tableHeaderView?.setNeedsLayout() + + self.headerContainer?.setNeedsLayout() + + guard let tableView = self.tableView else { + + return + } + + if reloadData { + + tableView.reloadData() + } + + tableView.layoutIfNeeded() + + if let indexPath = self.lastSelectedIndexPath where indexPath.row < tableView.numberOfRowsInSection(0) { + + tableView.selectRowAtIndexPath(indexPath, + animated: scrollToSelection && animated, + scrollPosition: scrollToSelection ? .Middle : .None + ) + } + } +} + + +// MARK: - MigrationsDemoViewController: ListObserver + +extension MigrationsDemoViewController: ListObserver { + + // MARK: ListObserver + + func listMonitorWillChange(monitor: ListMonitor) { } + + func listMonitorDidChange(monitor: ListMonitor) { + + if self.lastSelectedIndexPath == nil && self.listMonitor?.numberOfObjectsInSection(0) > 0 { + + self.tableView?.reloadData() + self.setSelectedIndexPath(NSIndexPath(forRow: 0, inSection: 0), scrollToSelection: false) + } + else { + + self.updateDisplay(reloadData: true, scrollToSelection: true, animated: true) + } + } +} + + +// MARK: - MigrationsDemoViewController: UITableViewDataSource, UITableViewDelegate + +extension MigrationsDemoViewController: UITableViewDataSource, UITableViewDelegate { + + // MARK: UITableViewDataSource + + @objc dynamic func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + + return self.listMonitor?.numberOfObjectsInSection(0) ?? 0 + } + + @objc dynamic func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { + + let cell = tableView.dequeueReusableCellWithIdentifier("OrganismTableViewCell", forIndexPath: indexPath) as! OrganismTableViewCell + + let dna = (self.listMonitor?[indexPath] as? OrganismProtocol)?.dna.description ?? "" + cell.dnaLabel?.text = "DNA: \(dna)" + cell.mutateButtonHandler = { [weak self] _ -> Void in + + guard let strongSelf = self, + let dataStack = strongSelf.dataStack, + let organism = strongSelf.listMonitor?[indexPath] else { + + return + } + + strongSelf.setSelectedIndexPath(indexPath, scrollToSelection: false) + strongSelf.setEnabled(false) + dataStack.beginAsynchronous { (transaction) -> Void in + + let organism = transaction.edit(organism) as! OrganismProtocol + organism.mutate() + + transaction.commit { _ -> Void in + + self?.setEnabled(true) + } + } + } + return cell + } + + + // MARK: UITableViewDelegate + + @objc dynamic func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { + + self.setSelectedIndexPath(indexPath, scrollToSelection: false) } } diff --git a/CoreStoreDemo/CoreStoreDemo/MIgrations Demo/OrganismProtocol.swift b/CoreStoreDemo/CoreStoreDemo/MIgrations Demo/OrganismProtocol.swift index e3bc567..0307b57 100644 --- a/CoreStoreDemo/CoreStoreDemo/MIgrations Demo/OrganismProtocol.swift +++ b/CoreStoreDemo/CoreStoreDemo/MIgrations Demo/OrganismProtocol.swift @@ -8,7 +8,9 @@ import Foundation -protocol OrganismProtocol { +protocol OrganismProtocol: class { + + var dna: Int64 { get set } func mutate() } \ No newline at end of file diff --git a/CoreStoreDemo/CoreStoreDemo/MIgrations Demo/OrganismTableViewCell.swift b/CoreStoreDemo/CoreStoreDemo/MIgrations Demo/OrganismTableViewCell.swift new file mode 100644 index 0000000..285d057 --- /dev/null +++ b/CoreStoreDemo/CoreStoreDemo/MIgrations Demo/OrganismTableViewCell.swift @@ -0,0 +1,22 @@ +// +// OrganismTableViewCell.swift +// CoreStoreDemo +// +// Created by John Rommel Estropia on 2015/07/12. +// Copyright © 2015 John Rommel Estropia. All rights reserved. +// + +import UIKit + +class OrganismTableViewCell: UITableViewCell { + + @IBOutlet weak dynamic var dnaLabel: UILabel? + @IBOutlet weak dynamic var mutateButton: UIButton? + + var mutateButtonHandler: (() -> Void)? + + @IBAction dynamic func mutateButtonTouchUpInside(sender: UIButton?) { + + self.mutateButtonHandler?() + } +} diff --git a/CoreStoreDemo/CoreStoreDemo/MIgrations Demo/OrganismV1.swift b/CoreStoreDemo/CoreStoreDemo/MIgrations Demo/OrganismV1.swift index f19bb6b..5d24149 100644 --- a/CoreStoreDemo/CoreStoreDemo/MIgrations Demo/OrganismV1.swift +++ b/CoreStoreDemo/CoreStoreDemo/MIgrations Demo/OrganismV1.swift @@ -11,6 +11,7 @@ import CoreData class OrganismV1: NSManagedObject, OrganismProtocol { + @NSManaged var dna: Int64 @NSManaged var hasHead: Bool @NSManaged var hasTail: Bool diff --git a/CoreStoreDemo/CoreStoreDemo/MIgrations Demo/OrganismV2.swift b/CoreStoreDemo/CoreStoreDemo/MIgrations Demo/OrganismV2.swift index 26b3ac7..00341dc 100644 --- a/CoreStoreDemo/CoreStoreDemo/MIgrations Demo/OrganismV2.swift +++ b/CoreStoreDemo/CoreStoreDemo/MIgrations Demo/OrganismV2.swift @@ -10,7 +10,8 @@ import Foundation import CoreData class OrganismV2: NSManagedObject, OrganismProtocol { - + + @NSManaged var dna: Int64 @NSManaged var hasHead: Bool @NSManaged var hasTail: Bool @NSManaged var numberOfFlippers: Int32 diff --git a/CoreStoreDemo/CoreStoreDemo/MIgrations Demo/OrganismV2ToV3.xcmappingmodel/xcmapping.xml b/CoreStoreDemo/CoreStoreDemo/MIgrations Demo/OrganismV2ToV3.xcmappingmodel/xcmapping.xml index c63107a..80e10b6 100644 --- a/CoreStoreDemo/CoreStoreDemo/MIgrations Demo/OrganismV2ToV3.xcmappingmodel/xcmapping.xml +++ b/CoreStoreDemo/CoreStoreDemo/MIgrations Demo/OrganismV2ToV3.xcmappingmodel/xcmapping.xml @@ -4,8 +4,8 @@ 134481920 - C2402043-3353-41B2-AE4E-809CAB3D0628 - 107 + C1A5998D-0F2D-40D2-8299-2B2804420D2B + 109 @@ -45,41 +45,55 @@ - hasTail - + dna + - - CoreStoreDemo/MigrationDemo.xcdatamodeld/MigrationDemoV2.xcdatamodel - YnBsaXN0MDDUAAEAAgADAAQABQAGBW8FcFgkdmVyc2lvblgkb2JqZWN0c1kkYXJjaGl2ZXJUJHRv -cBIAAYagrxCWAAcACAAXADMANAA1AD0APgBZAFoAWwBhAGIAbgCEAIUAhgCHAIgAiQCKAIsAjACNAKYAqQCwALYAxQDUANcA5gD1APgAWAEIARcBGwEfAS4BNAE1AT0BTAFNAVYBYAFhAWIBYwF4AXkBgQGCAYMBjwGjAaQBpQGmAacBqAGpAaoBqwG6AckB2AHcAesB+gIJAhgCJwIzAkUCRgJHAkgCSQJKAksCTAJbAmoCeQKIAokCmAKnArYCvgLTAtQC3ALoAvwDCwMaAykDLQM8A0sDWgNpA3gDhAOWA6UDtAPDA9ID4QPwA/8EFAQVBB0EKQQ9BEwEWwRqBG4EfQSMBJsEqgS5BMUE1wTmBOcE9gUFBRQFFQUkBTMFQgVDBUYFTwVTBVcFWwVjBWYFagVrVSRudWxs1wAJAAoACwAMAA0ADgAPABAAEQASABMAFAATABZfEA9feGRfcm9vdFBhY2thZ2VWJGNsYXNzXF94ZF9jb21tZW50c18QEF94ZF9tb2RlbE1hbmFnZXJfEBVfY29uZmlndXJhdGlvbnNCeU5hbWVdX3hkX21vZGVsTmFtZV8QF19tb2RlbFZlcnNpb25JZGVudGlmaWVygAKAlYCSgACAk4AAgJTeABgAGQAaABsAHAAdAB4ACgAfACAAIQAiACMAJAAlACYAJwAoACUAEwArACwALQAuAC8AJQAlABNfEBxYREJ1Y2tldEZvckNsYXNzZXN3YXNFbmNvZGVkXxAaWERCdWNrZXRGb3JQYWNrYWdlc3N0b3JhZ2VfEBxYREJ1Y2tldEZvckludGVyZmFjZXNzdG9yYWdlXxAPX3hkX293bmluZ01vZGVsXxAdWERCdWNrZXRGb3JQYWNrYWdlc3dhc0VuY29kZWRWX293bmVyXxAbWERCdWNrZXRGb3JEYXRhVHlwZXNzdG9yYWdlW192aXNpYmlsaXR5XxAZWERCdWNrZXRGb3JDbGFzc2Vzc3RvcmFnZVVfbmFtZV8QH1hEQnVja2V0Rm9ySW50ZXJmYWNlc3dhc0VuY29kZWRfEB5YREJ1Y2tldEZvckRhdGFUeXBlc3dhc0VuY29kZWRfEBBfdW5pcXVlRWxlbWVudElEgASAkICOgAGABIAAgI+AkRAAgAWAA4AEgASAAFBTWUVT0wA2ADcACgA4ADoAPFdOUy5rZXlzWk5TLm9iamVjdHOhADmABqEAO4AHgCVYT3JnYW5pc23fEBAAPwBAAEEAQgAdAEMARAAfAEUARgAKACEARwBIACQASQBKAEsAJQAlABAATwBQAC0AJQBKAFMAOQBKAFYAVwBYXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zZHVwbGljYXRlc18QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNzdG9yYWdlW19pc0Fic3RyYWN0gAmALYAEgASAAoAKgIuABIAJgI2ABoAJgIyACAgS5npa1VdvcmRlcmVk0wA2ADcACgBcAF4APKEAXYALoQBfgAyAJV5YRF9QU3RlcmVvdHlwZdkAHQAhAGMACgAkAGQAHwBJAGUAOwBdAEoAaQATACUALQBYAG1fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WAB4ALgAmALIAAgAQIgA3TADYANwAKAG8AeQA8qQBwAHEAcgBzAHQAdQB2AHcAeIAOgA+AEIARgBKAE4AUgBWAFqkAegB7AHwAfQB+AH8AgACBAIKAF4AbgByAHoAfgCGAI4AmgCqAJV8QE1hEUE1Db21wb3VuZEluZGV4ZXNfEBBYRF9QU0tfZWxlbWVudElEXxAZWERQTVVuaXF1ZW5lc3NDb25zdHJhaW50c18QGlhEX1BTS192ZXJzaW9uSGFzaE1vZGlm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FXEVchVzFXUVdxV4FXkVexV8FbsVvRW/FcEVwxXEFcUVxhXHFckVyxXMFc0VzxXQFg8WERYTFhUWFxYYFhkWGhYbFh0WHxYgFiEWIxYkFmMWZRZnFmkWaxZsFm0WbhZvFnEWcxZ0FnUWdxZ4FnsWuha8Fr4WwBbCFsMWxBbFFsYWyBbKFssWzBbOFs8XDhcQFxIXFBcWFxcXGBcZFxoXHBceFx8XIBciFyMXYhdkF2YXaBdqF2sXbBdtF24XcBdyF3MXdBd2F3cXgBeOF5sXqRe2F8kX4BfyGD0YYBiAGKAYohikGKYYqBiqGKsYrBiuGK8YsRiyGLQYthi3GLgYuhi7GMAYzRjSGNQY1hjbGN0Y3xjhGQYZKhlRGXUZdxl5GXsZfRl/GYEZghmEGZEZohmkGaYZqBmqGawZrhmwGbIZwxnFGccZyRnLGc0ZzxnRGdMZ1RoUGhYaGBoaGhwaHRoeGh8aIBoiGiQaJRomGigaKRpoGmoabBpuGnAacRpyGnMadBp2GngaeRp6GnwafRq8Gr4awBrCGsQaxRrGGscayBrKGswazRrOGtAa0RreGt8a4BriGyEbIxslGycbKRsqGysbLBstGy8bMRsyGzMbNRs2G3Ubdxt5G3sbfRt+G38bgBuBG4MbhRuGG4cbiRuKG8kbyxvNG88b0RvSG9Mb1BvVG9cb2RvaG9sb3RveHB0cHxwhHCMcJRwmHCccKBwpHCscLRwuHC8cMRwyHHEccxx1HHcceRx6HHscfBx9HH8cgRyCHIMchRyGHKsczxz2HRodHB0eHSAdIh0kHSYdJx0pHTYdRR1HHUkdSx1NHU8dUR1THWIdZB1mHWgdah1sHW4dcB1yHbEdsx21HbcduR26HbsdvB29Hb8dwR3CHcMdxR3GHgUeBx4JHgseDR4OHg8eEB4RHhMeFR4WHhceGR4aHlkeWx5dHl8eYR5iHmMeZB5lHmceaR5qHmsebR5uHq0erx6xHrMetR62HrceuB65HrsevR6+Hr8ewR7CHwEfAx8FHwcfCR8KHwsfDB8NHw8fER8SHxMfFR8WH1UfVx9ZH1sfXR9eH18fYB9hH2MfZR9mH2cfaR9qH6kfqx+tH68fsR+yH7MftB+1H7cfuR+6H7sfvR++IAkgLCBMIGwgbiBwIHIgdCB2IHcgeCB6IHsgfSB+IIAggiCDIIQghiCHIIwgmSCeIKAgoiCnIKkgqyCtINIg9iEdIUEhQyFFIUchSSFLIU0hTiFQIV0hbiFwIXIhdCF2IXgheiF8IX4hjyGRIZMhlSGXIZkhmyGdIZ8hoSHgIeIh5CHmIegh6SHqIesh7CHuIfAh8SHyIfQh9SI0IjYiOCI6IjwiPSI+Ij8iQCJCIkQiRSJGIkgiSSKIIooijCKOIpAikSKSIpMilCKWIpgimSKaIpwinSKqIqsirCKuIu0i7yLxIvMi9SL2Ivci+CL5Ivsi/SL+Iv8jASMCI0EjQyNFI0cjSSNKI0sjTCNNI08jUSNSI1MjVSNWI5UjlyOZI5sjnSOeI58joCOhI6MjpSOmI6cjqSOqI+kj6yPtI+8j8SPyI/Mj9CP1I/cj+SP6I/sj/SP+JD0kPyRBJEMkRSRGJEckSCRJJEskTSROJE8kUSRSJHckmyTCJOYk6CTqJOwk7iTwJPIk8yT1JQIlESUTJRUlFyUZJRslHSUfJS4lMCUyJTQlNiU4JTolPCU+JX0lfyWBJYMlhSWGJYcliCWJJYsljSWOJY8lkSWSJZQl0yXVJdcl2SXbJdwl3SXeJd8l4SXjJeQl5SXnJegmJyYpJismLSYvJjAmMSYyJjMmNSY3JjgmOSY7JjwmeyZ9Jn8mgSaDJoQmhSaGJocmiSaLJowmjSaPJpAmkibRJtMm1SbXJtkm2ibbJtwm3SbfJuEm4ibjJuUm5iclJycnKScrJy0nLicvJzAnMSczJzUnNic3JzknOid5J3snfSd/J4EngieDJ4QnhSeHJ4kniieLJ40njieZJ6InoyelJ64nuSfIJ9Mn4Sf2KAooISgzKEAoQShCKEQoUShSKFMoVShiKGMoZChmKG8ofiiLKJoorCjAKNco6SjyKPMo9SkCKQMpBCkGKQcpECkaKSEpKSk7KUApRQAAAAAAAAICAAAAAAAABXMAAAAAAAAAAAAAAAAAAClH - - CoreStoreDemo/MigrationDemo.xcdatamodeld/MigrationDemoV3.xcdatamodel - YnBsaXN0MDDUAAEAAgADAAQABQAGBrMGtFgkdmVyc2lvblgkb2JqZWN0c1kkYXJjaGl2ZXJUJHRv -cBIAAYagrxCuAAcACAAXADMANAA1AD0APgBZAFoAWwBhAGIAbgCEAIUAhgCHAIgAiQCKAIsAjACNAKYAqQCwALYAxQDUANcA5gD1APgAWAEIARcBGwEfAS4BNAE1AT0BTAFNAVYBYgFjAWQBZQFmAXsBfAGEAYUBhgGSAaYBpwGoAakBqgGrAawBrQGuAb0BzAHbAd8B7gH9AgwCGwIqAjYCSAJJAkoCSwJMAk0CTgJPAl4CXwJuAn0CjAKNApwCqwK6AsIC1wLYAuAC7AMAAw8DHgMtAzEDQANPA14DbQN8A4gDmgOpA7gDxwPWA9cD5gP1BAQEGQQaBCIELgRCBFEEYARvBHMEggSRBKAErwS+BMoE3ATrBPoFCQUYBScFNgVFBVoFWwVjBW8FgwWSBaEFsAW0BcMF0gXhBfAF/wYLBh0GLAY7BkoGWQZoBncGhgaHBooGkwaXBpsGnwanBqoGrgavVSRudWxs1wAJAAoACwAMAA0ADgAPABAAEQASABMAFAATABZfEA9feGRfcm9vdFBhY2thZ2VWJGNsYXNzXF94ZF9jb21tZW50c18QEF94ZF9tb2RlbE1hbmFnZXJfEBVfY29uZmlndXJhdGlvbnNCeU5hbWVdX3hkX21vZGVsTmFtZV8QF19tb2RlbFZlcnNpb25JZGVudGlmaWVygAKArYCqgACAq4AAgKzeABgAGQAaABsAHAAdAB4ACgAfACAAIQAiACMAJAAlACYAJwAoACUAEwArACwALQAuAC8AJQAlABNfEBxYREJ1Y2tldEZvckNsYXNzZXN3YXNFbmNvZGVkXxAaWERCdWNrZXRGb3JQYWNrYWdlc3N0b3JhZ2VfEBxYREJ1Y2tldEZvckludGVyZmFjZXNzdG9yYWdlXxAPX3hkX293bmluZ01vZGVsXxAdWERCdWNrZXRGb3JQYWNrYWdlc3dhc0VuY29kZWRWX293bmVyXxAbWERCdWNrZXRGb3JEYXRhVHlwZXNzdG9yYWdlW192aXNpYmlsaXR5XxAZWERCdWNrZXRGb3JDbGFzc2Vzc3RvcmFnZVVfbmFtZV8QH1hEQnVja2V0Rm9ySW50ZXJmYWNlc3dhc0VuY29kZWRfEB5YREJ1Y2tldEZvckRhdGFUeXBlc3dhc0VuY29kZWRfEBBfdW5pcXVlRWxlbWVudElEgASAqICmgAGABIAAgKeAqRAAgAWAA4AEgASAAFBTWUVT0wA2ADcACgA4ADoAPFdOUy5rZXlzWk5TLm9iamVjdHOhADmABqEAO4AHgCVYT3JnYW5pc23fEBAAPwBAAEEAQgAdAEMARAAfAEUARgAKACEARwBIACQASQBKAEsAJQAlABAATwBQAC0AJQBKAFMAOQBKAFYAVwBYXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zZHVwbGljYXRlc18QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNzdG9yYWdlW19pc0Fic3RyYWN0gAmALYAEgASAAoAKgKOABIAJgKWABoAJgKSACAgS+vUm0VdvcmRlcmVk0wA2ADcACgBcAF4APKEAXYALoQBfgAyAJV5YRF9QU3RlcmVvdHlwZdkAHQAhAGMACgAkAGQAHwBJAGUAOwBdAEoAaQATACUALQBYAG1fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WAB4ALgAmALIAAgAQIgA3TADYANwAKAG8AeQA8qQBwAHEAcgBzAHQAdQB2AHcAeIAOgA+AEIARgBKAE4AUgBWAFqkAegB7AHwAfQB+AH8AgACBAIKAF4AbgByAHoAfgCGAI4AmgCqAJV8QE1hEUE1Db21wb3VuZEluZGV4ZXNfEBBYRF9QU0tfZWxlbWVudElEXxAZWERQTVVuaXF1ZW5lc3NDb25zdHJhaW50c18QGlhEX1BTS192ZXJzaW9uSGFzaE1vZGlmaWVyXxAZWERfUFNLX2ZldGNoUmVxdWVzdHNBcnJheV8QEVhEX1BTS19pc0Fic3RyYWN0XxAPWERfUFNLX3VzZXJJbmZvXxATWERfUFNLX2NsYXNzTWFwcGluZ18QFlhEX1BTS19lbnRpdHlDbGFzc05hbWXfEA8AjgCPAJAAHQCRAJIAkwAfAJQACgAhAJUAlgAkAJcAEwCZABMAXwBYAFgAWAAtAFgAoABwAFgAWAATAFhVX3R5cGVYX2RlZmF1bHRcX2Fzc29jaWF0aW9uW19pc1JlYWRPbmx5WV9pc1N0YXRpY1lfaXNVbmlxdWVaX2lzRGVyaXZlZFpfaXNPcmRlcmVkXF9pc0NvbXBvc2l0ZVdfaXNMZWFmgACAGIAAgAwICAgIgBqADggIgAAI0gA3AAoApwCooIAZ0gCqAKsArACtWiRjbGFzc25hbWVYJGNsYXNzZXNeTlNNdXRhYmxlQXJyYXmjAKwArgCvV05TQXJyYXlYTlNPYmplY3TSAKoAqwCxALJfEBBYRFVNTFByb3BlcnR5SW1wpACzALQAtQCvXxAQWERVTUxQcm9wZXJ0eUltcF8QFFhEVU1MTmFtZWRFbGVtZW50SW1wXxAPWERVTUxFbGVtZW50SW1w3xAPAI4AjwCQAB0AkQCSAJMAHwCUAAoAIQCVAJYAJACXABMAEwATAF8AWABYAFgALQBYAKAAcQBYAFgAEwBYgACAAIAAgAwICAgIgBqADwgIgAAI3xAPAI4AjwCQAB0AkQCSAJMAHwCUAAoAIQCVAJYAJACXABMAxwATAF8AWABYAFgALQBYAKAAcgBYAFgAEwBYgACAHYAAgAwICAgIgBqAEAgIgAAI0gA3AAoA1QCooIAZ3xAPAI4AjwCQAB0AkQCSAJMAHwCUAAoAIQCVAJYAJACXABMAEwATAF8AWABYAFgALQBYAKAAcwBYAFgAEwBYgACAAIAAgAwICAgIgBqAEQgIgAAI3xAPAI4AjwCQAB0AkQCSAJMAHwCUAAoAIQCVAJYAJACXABMA6AATAF8AWABYAFgALQBYAKAAdABYAFgAEwBYgACAIIAAgAwICAgIgBqAEggIgAAI0gA3AAoA9gCooIAZ3xAPAI4AjwCQAB0AkQCSAJMAHwCUAAoAIQCVAJYAJACXABMA+gATAF8AWABYAFgALQBYAKAAdQBYAFgAEwBYgACAIoAAgAwICAgIgBqAEwgIgAAICN8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATAQoAEwBfAFgAWABYAC0AWACgAHYAWABYABMAWIAAgCSAAIAMCAgICIAagBQICIAACNMANgA3AAoBGAEZADygoIAl0gCqAKsBHAEdXxATTlNNdXRhYmxlRGljdGlvbmFyeaMBHAEeAK9cTlNEaWN0aW9uYXJ53xAPAI4AjwCQAB0AkQCSAJMAHwCUAAoAIQCVAJYAJACXABMBIQATAF8AWABYAFgALQBYAKAAdwBYAFgAEwBYgACAJ4AAgAwICAgIgBqAFQgIgAAI1gAhAAoAJABJAB0AHwEvATAAEwBYABMALYAogCmAAAiAAF8QFFhER2VuZXJpY1JlY29yZENsYXNz0gCqAKsBNgE3XVhEVU1MQ2xhc3NJbXCmATgBOQE6ATsBPACvXVhEVU1MQ2xhc3NJbXBfEBJYRFVNTENsYXNzaWZpZXJJbXBfEBFYRFVNTE5hbWVzcGFjZUltcF8QFFhEVU1MTmFtZWRFbGVtZW50SW1wXxAPWERVTUxFbGVtZW50SW1w3xAPAI4AjwCQAB0AkQCSAJMAHwCUAAoAIQCVAJYAJACXABMBPwATAF8AWABYAFgALQBYAKAAeABYAFgAEwBYgACAK4AAgAwICAgIgBqAFggIgAAIXxAYQ29yZVN0b3JlRGVtby5PcmdhbmlzbVYz0gCqAKsBTgFPXxASWERVTUxTdGVyZW90eXBlSW1wpwFQAVEBUgFTAVQBVQCvXxASWERVTUxTdGVyZW90eXBlSW1wXVhEVU1MQ2xhc3NJbXBfEBJYRFVNTENsYXNzaWZpZXJJbXBfEBFYRFVNTE5hbWVzcGFjZUltcF8QFFhEVU1MTmFtZWRFbGVtZW50SW1wXxAPWERVTUxFbGVtZW50SW1w0wA2ADcACgFXAVwAPKQBWAFZAVoBW4AugC+AMIAxpAFdAV4BXwFggDKAXYB1gIyAJV1udW1iZXJPZkxpbWJzXGhhc1ZlcnRlYnJhZVdoYXNUYWlsV2hhc0hlYWTfEBIAjgCPAJABZwAdAJIAkwFoAB8AkQFpAJQACgAhAJUAlgAkAJcAEwATABMAJQA7AFgAWAFxAC0AWABKAFgBdQFYAFgAWAF5AFhfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIAHCAiANAiACQiAXIAuCAiAMwgSKeri9tMANgA3AAoBfQGAADyiAX4Bf4A1gDaiAYEBgoA3gEqAJV8QElhEX1BQcm9wU3RlcmVvdHlwZV8QElhEX1BBdHRfU3RlcmVvdHlwZdkAHQAhAYcACgAkAYgAHwBJAYkBXQF+AEoAaQATACUALQBYAZFfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WAMoA1gAmALIAAgAQIgDjTADYANwAKAZMBnAA8qAGUAZUBlgGXAZgBmQGaAZuAOYA6gDuAPIA9gD6AP4BAqAGdAZ4BnwGgAaEBogGjAaSAQYBCgEOARYBGgEeASIBJgCVfEBtYRF9QUFNLX2lzU3RvcmVkSW5UcnV0aEZpbGVfEBtYRF9QUFNLX3ZlcnNpb25IYXNoTW9kaWZpZXJfEBBYRF9QUFNLX3VzZXJJbmZvXxARWERfUFBTS19pc0luZGV4ZWRfEBJYRF9QUFNLX2lzT3B0aW9uYWxfEBpYRF9QUFNLX2lzU3BvdGxpZ2h0SW5kZXhlZF8QEVhEX1BQU0tfZWxlbWVudElEXxATWERfUFBTS19pc1RyYW5zaWVudN8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATAPoAEwGBAFgAWABYAC0AWACgAZQAWABYABMAWIAAgCKAAIA3CAgICIAagDkICIAACN8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATABMAEwGBAFgAWABYAC0AWACgAZUAWABYABMAWIAAgACAAIA3CAgICIAagDoICIAACN8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATAc4AEwGBAFgAWABYAC0AWACgAZYAWABYABMAWIAAgESAAIA3CAgICIAagDsICIAACNMANgA3AAoB3AHdADygoIAl3xAPAI4AjwCQAB0AkQCSAJMAHwCUAAoAIQCVAJYAJACXABMA+gATAYEAWABYAFgALQBYAKABlwBYAFgAEwBYgACAIoAAgDcICAgIgBqAPAgIgAAI3xAPAI4AjwCQAB0AkQCSAJMAHwCUAAoAIQCVAJYAJACXABMA+gATAYEAWABYAFgALQBYAKABmABYAFgAEwBYgACAIoAAgDcICAgIgBqAPQgIgAAI3xAPAI4AjwCQAB0AkQCSAJMAHwCUAAoAIQCVAJYAJACXABMA+gATAYEAWABYAFgALQBYAKABmQBYAFgAEwBYgACAIoAAgDcICAgIgBqAPggIgAAI3xAPAI4AjwCQAB0AkQCSAJMAHwCUAAoAIQCVAJYAJACXABMAEwATAYEAWABYAFgALQBYAKABmgBYAFgAEwBYgACAAIAAgDcICAgIgBqAPwgIgAAI3xAPAI4AjwCQAB0AkQCSAJMAHwCUAAoAIQCVAJYAJACXABMA+gATAYEAWABYAFgALQBYAKABmwBYAFgAEwBYgACAIoAAgDcICAgIgBqAQAgIgAAI2QAdACECKwAKACQCLAAfAEkCLQFdAX8ASgBpABMAJQAtAFgCNV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYAygDaACYAsgACABAiAS9MANgA3AAoCNwI/ADynAjgCOQI6AjsCPAI9Aj6ATIBNgE6AT4BQgFGAUqcCQAJBAkICQwJEAkUCRoBTgFWAVoBXgFmAWoBbgCVfEB1YRF9QQXR0S19kZWZhdWx0VmFsdWVBc1N0cmluZ18QKFhEX1BBdHRLX2FsbG93c0V4dGVybmFsQmluYXJ5RGF0YVN0b3JhZ2VfEBdYRF9QQXR0S19taW5WYWx1ZVN0cmluZ18QFlhEX1BBdHRLX2F0dHJpYnV0ZVR5cGVfEBdYRF9QQXR0S19tYXhWYWx1ZVN0cmluZ18QHVhEX1BBdHRLX3ZhbHVlVHJhbnNmb3JtZXJOYW1lXxAgWERfUEF0dEtfcmVndWxhckV4cHJlc3Npb25TdHJpbmffEA8AjgCPAJAAHQCRAJIAkwAfAJQACgAhAJUAlgAkAJcAEwJRABMBggBYAFgAWAAtAFgAoAI4AFgAWAATAFiAAIBUgACASggICAiAGoBMCAiAAAhRMN8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATAPoAEwGCAFgAWABYAC0AWACgAjkAWABYABMAWIAAgCKAAIBKCAgICIAagE0ICIAACN8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATABMAEwGCAFgAWABYAC0AWACgAjoAWABYABMAWIAAgACAAIBKCAgICIAagE4ICIAACN8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATAn8AEwGCAFgAWABYAC0AWACgAjsAWABYABMAWIAAgFiAAIBKCAgICIAagE8ICIAACBDI3xAPAI4AjwCQAB0AkQCSAJMAHwCUAAoAIQCVAJYAJACXABMAEwATAYIAWABYAFgALQBYAKACPABYAFgAEwBYgACAAIAAgEoICAgIgBqAUAgIgAAI3xAPAI4AjwCQAB0AkQCSAJMAHwCUAAoAIQCVAJYAJACXABMAEwATAYIAWABYAFgALQBYAKACPQBYAFgAEwBYgACAAIAAgEoICAgIgBqAUQgIgAAI3xAPAI4AjwCQAB0AkQCSAJMAHwCUAAoAIQCVAJYAJACXABMAEwATAYIAWABYAFgALQBYAKACPgBYAFgAEwBYgACAAIAAgEoICAgIgBqAUggIgAAI0gCqAKsCuwK8XVhEUE1BdHRyaWJ1dGWmAr0CvgK/AsACwQCvXVhEUE1BdHRyaWJ1dGVcWERQTVByb3BlcnR5XxAQWERVTUxQcm9wZXJ0eUltcF8QFFhEVU1MTmFtZWRFbGVtZW50SW1wXxAPWERVTUxFbGVtZW50SW1w3xASAI4AjwCQAsMAHQCSAJMCxAAfAJECxQCUAAoAIQCVAJYAJACXABMAEwATACUAOwBYAFgCzQAtAFgASgBYAXUBWQBYAFgC1QBYXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkgACAAIAAgASABwgIgF8IgAkIgFyALwgIgF4IEpYiK7XTADYANwAKAtkC3AA8ogF+AX+ANYA2ogLdAt6AYIBrgCXZAB0AIQLhAAoAJALiAB8ASQLjAV4BfgBKAGkAEwAlAC0AWALrXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgF2ANYAJgCyAAIAECIBh0wA2ADcACgLtAvYAPKgBlAGVAZYBlwGYAZkBmgGbgDmAOoA7gDyAPYA+gD+AQKgC9wL4AvkC+gL7AvwC/QL+gGKAY4BkgGaAZ4BogGmAaoAl3xAPAI4AjwCQAB0AkQCSAJMAHwCUAAoAIQCVAJYAJACXABMA+gATAt0AWABYAFgALQBYAKABlABYAFgAEwBYgACAIoAAgGAICAgIgBqAOQgIgAAI3xAPAI4AjwCQAB0AkQCSAJMAHwCUAAoAIQCVAJYAJACXABMAEwATAt0AWABYAFgALQBYAKABlQBYAFgAEwBYgACAAIAAgGAICAgIgBqAOggIgAAI3xAPAI4AjwCQAB0AkQCSAJMAHwCUAAoAIQCVAJYAJACXABMDIAATAt0AWABYAFgALQBYAKABlgBYAFgAEwBYgACAZYAAgGAICAgIgBqAOwgIgAAI0wA2ADcACgMuAy8APKCggCXfEA8AjgCPAJAAHQCRAJIAkwAfAJQACgAhAJUAlgAkAJcAEwD6ABMC3QBYAFgAWAAtAFgAoAGXAFgAWAATAFiAAIAigACAYAgICAiAGoA8CAiAAAjfEA8AjgCPAJAAHQCRAJIAkwAfAJQACgAhAJUAlgAkAJcAEwD6ABMC3QBYAFgAWAAtAFgAoAGYAFgAWAATAFiAAIAigACAYAgICAiAGoA9CAiAAAjfEA8AjgCPAJAAHQCRAJIAkwAfAJQACgAhAJUAlgAkAJcAEwD6ABMC3QBYAFgAWAAtAFgAoAGZAFgAWAATAFiAAIAigACAYAgICAiAGoA+CAiAAAjfEA8AjgCPAJAAHQCRAJIAkwAfAJQACgAhAJUAlgAkAJcAEwATABMC3QBYAFgAWAAtAFgAoAGaAFgAWAATAFiAAIAAgACAYAgICAiAGoA/CAiAAAjfEA8AjgCPAJAAHQCRAJIAkwAfAJQACgAhAJUAlgAkAJcAEwD6ABMC3QBYAFgAWAAtAFgAoAGbAFgAWAATAFiAAIAigACAYAgICAiAGoBACAiAAAjZAB0AIQN9AAoAJAN+AB8ASQN/AV4BfwBKAGkAEwAlAC0AWAOHXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgF2ANoAJgCyAAIAECIBs0wA2ADcACgOJA5EAPKcCOAI5AjoCOwI8Aj0CPoBMgE2AToBPgFCAUYBSpwOSA5MDlAOVA5YDlwOYgG2AboBvgHCAcoBzgHSAJd8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATABMAEwLeAFgAWABYAC0AWACgAjgAWABYABMAWIAAgACAAIBrCAgICIAagEwICIAACN8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATAPoAEwLeAFgAWABYAC0AWACgAjkAWABYABMAWIAAgCKAAIBrCAgICIAagE0ICIAACN8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATABMAEwLeAFgAWABYAC0AWACgAjoAWABYABMAWIAAgACAAIBrCAgICIAagE4ICIAACN8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATA8kAEwLeAFgAWABYAC0AWACgAjsAWABYABMAWIAAgHGAAIBrCAgICIAagE8ICIAACBEDIN8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATABMAEwLeAFgAWABYAC0AWACgAjwAWABYABMAWIAAgACAAIBrCAgICIAagFAICIAACN8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATABMAEwLeAFgAWABYAC0AWACgAj0AWABYABMAWIAAgACAAIBrCAgICIAagFEICIAACN8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATABMAEwLeAFgAWABYAC0AWACgAj4AWABYABMAWIAAgACAAIBrCAgICIAagFIICIAACN8QEgCOAI8AkAQFAB0AkgCTBAYAHwCRBAcAlAAKACEAlQCWACQAlwATABMAEwAlADsAWABYBA8ALQBYAEoAWAF1AVoAWABYBBcAWF8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgAcICIB3CIAJCIBcgDAICIB2CBKt9VyU0wA2ADcACgQbBB4APKIBfgF/gDWANqIEHwQggHiAg4Al2QAdACEEIwAKACQEJAAfAEkEJQFfAX4ASgBpABMAJQAtAFgELV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYB1gDWACYAsgACABAiAedMANgA3AAoELwQ4ADyoAZQBlQGWAZcBmAGZAZoBm4A5gDqAO4A8gD2APoA/gECoBDkEOgQ7BDwEPQQ+BD8EQIB6gHuAfIB+gH+AgICBgIKAJd8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATAPoAEwQfAFgAWABYAC0AWACgAZQAWABYABMAWIAAgCKAAIB4CAgICIAagDkICIAACN8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATABMAEwQfAFgAWABYAC0AWACgAZUAWABYABMAWIAAgACAAIB4CAgICIAagDoICIAACN8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATBGIAEwQfAFgAWABYAC0AWACgAZYAWABYABMAWIAAgH2AAIB4CAgICIAagDsICIAACNMANgA3AAoEcARxADygoIAl3xAPAI4AjwCQAB0AkQCSAJMAHwCUAAoAIQCVAJYAJACXABMA+gATBB8AWABYAFgALQBYAKABlwBYAFgAEwBYgACAIoAAgHgICAgIgBqAPAgIgAAI3xAPAI4AjwCQAB0AkQCSAJMAHwCUAAoAIQCVAJYAJACXABMA+gATBB8AWABYAFgALQBYAKABmABYAFgAEwBYgACAIoAAgHgICAgIgBqAPQgIgAAI3xAPAI4AjwCQAB0AkQCSAJMAHwCUAAoAIQCVAJYAJACXABMA+gATBB8AWABYAFgALQBYAKABmQBYAFgAEwBYgACAIoAAgHgICAgIgBqAPggIgAAI3xAPAI4AjwCQAB0AkQCSAJMAHwCUAAoAIQCVAJYAJACXABMAEwATBB8AWABYAFgALQBYAKABmgBYAFgAEwBYgACAAIAAgHgICAgIgBqAPwgIgAAI3xAPAI4AjwCQAB0AkQCSAJMAHwCUAAoAIQCVAJYAJACXABMA+gATBB8AWABYAFgALQBYAKABmwBYAFgAEwBYgACAIoAAgHgICAgIgBqAQAgIgAAI2QAdACEEvwAKACQEwAAfAEkEwQFfAX8ASgBpABMAJQAtAFgEyV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYB1gDaACYAsgACABAiAhNMANgA3AAoEywTTADynAjgCOQI6AjsCPAI9Aj6ATIBNgE6AT4BQgFGAUqcE1ATVBNYE1wTYBNkE2oCFgIaAh4CIgImAioCLgCXfEA8AjgCPAJAAHQCRAJIAkwAfAJQACgAhAJUAlgAkAJcAEwATABMEIABYAFgAWAAtAFgAoAI4AFgAWAATAFiAAIAAgACAgwgICAiAGoBMCAiAAAjfEA8AjgCPAJAAHQCRAJIAkwAfAJQACgAhAJUAlgAkAJcAEwD6ABMEIABYAFgAWAAtAFgAoAI5AFgAWAATAFiAAIAigACAgwgICAiAGoBNCAiAAAjfEA8AjgCPAJAAHQCRAJIAkwAfAJQACgAhAJUAlgAkAJcAEwATABMEIABYAFgAWAAtAFgAoAI6AFgAWAATAFiAAIAAgACAgwgICAiAGoBOCAiAAAjfEA8AjgCPAJAAHQCRAJIAkwAfAJQACgAhAJUAlgAkAJcAEwPJABMEIABYAFgAWAAtAFgAoAI7AFgAWAATAFiAAIBxgACAgwgICAiAGoBPCAiAAAjfEA8AjgCPAJAAHQCRAJIAkwAfAJQACgAhAJUAlgAkAJcAEwATABMEIABYAFgAWAAtAFgAoAI8AFgAWAATAFiAAIAAgACAgwgICAiAGoBQCAiAAAjfEA8AjgCPAJAAHQCRAJIAkwAfAJQACgAhAJUAlgAkAJcAEwATABMEIABYAFgAWAAtAFgAoAI9AFgAWAATAFiAAIAAgACAgwgICAiAGoBRCAiAAAjfEA8AjgCPAJAAHQCRAJIAkwAfAJQACgAhAJUAlgAkAJcAEwATABMEIABYAFgAWAAtAFgAoAI+AFgAWAATAFiAAIAAgACAgwgICAiAGoBSCAiAAAjfEBIAjgCPAJAFRgAdAJIAkwVHAB8AkQVIAJQACgAhAJUAlgAkAJcAEwATABMAJQA7AFgAWAVQAC0AWABKAFgBdQFbAFgAWAVYAFhfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIAHCAiAjgiACQiAXIAxCAiAjQgSNFefFdMANgA3AAoFXAVfADyiAX4Bf4A1gDaiBWAFYYCPgJqAJdkAHQAhBWQACgAkBWUAHwBJBWYBYAF+AEoAaQATACUALQBYBW5fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WAjIA1gAmALIAAgAQIgJDTADYANwAKBXAFeQA8qAGUAZUBlgGXAZgBmQGaAZuAOYA6gDuAPIA9gD6AP4BAqAV6BXsFfAV9BX4FfwWABYGAkYCSgJOAlYCWgJeAmICZgCXfEA8AjgCPAJAAHQCRAJIAkwAfAJQACgAhAJUAlgAkAJcAEwD6ABMFYABYAFgAWAAtAFgAoAGUAFgAWAATAFiAAIAigACAjwgICAiAGoA5CAiAAAjfEA8AjgCPAJAAHQCRAJIAkwAfAJQACgAhAJUAlgAkAJcAEwATABMFYABYAFgAWAAtAFgAoAGVAFgAWAATAFiAAIAAgACAjwgICAiAGoA6CAiAAAjfEA8AjgCPAJAAHQCRAJIAkwAfAJQACgAhAJUAlgAkAJcAEwWjABMFYABYAFgAWAAtAFgAoAGWAFgAWAATAFiAAICUgACAjwgICAiAGoA7CAiAAAjTADYANwAKBbEFsgA8oKCAJd8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATAPoAEwVgAFgAWABYAC0AWACgAZcAWABYABMAWIAAgCKAAICPCAgICIAagDwICIAACN8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATAPoAEwVgAFgAWABYAC0AWACgAZgAWABYABMAWIAAgCKAAICPCAgICIAagD0ICIAACN8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATAPoAEwVgAFgAWABYAC0AWACgAZkAWABYABMAWIAAgCKAAICPCAgICIAagD4ICIAACN8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATABMAEwVgAFgAWABYAC0AWACgAZoAWABYABMAWIAAgACAAICPCAgICIAagD8ICIAACN8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATAPoAEwVgAFgAWABYAC0AWACgAZsAWABYABMAWIAAgCKAAICPCAgICIAagEAICIAACNkAHQAhBgAACgAkBgEAHwBJBgIBYAF/AEoAaQATACUALQBYBgpfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WAjIA2gAmALIAAgAQIgJvTADYANwAKBgwGFAA8pwI4AjkCOgI7AjwCPQI+gEyATYBOgE+AUIBRgFKnBhUGFgYXBhgGGQYaBhuAnICdgJ6An4CggKGAooAl3xAPAI4AjwCQAB0AkQCSAJMAHwCUAAoAIQCVAJYAJACXABMAEwATBWEAWABYAFgALQBYAKACOABYAFgAEwBYgACAAIAAgJoICAgIgBqATAgIgAAI3xAPAI4AjwCQAB0AkQCSAJMAHwCUAAoAIQCVAJYAJACXABMA+gATBWEAWABYAFgALQBYAKACOQBYAFgAEwBYgACAIoAAgJoICAgI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HaUdpx2pHasdrR2vHbEdsx3yHfQd9h34Hfod+x38Hf0d/h4AHgIeAx4EHgYeBx5GHkgeSh5MHk4eTx5QHlEeUh5UHlYeVx5YHloeWx6aHpwenh6gHqIeox6kHqUeph6oHqoeqx6sHq4erx7uHvAe8h70HvYe9x74Hvke+h78Hv4e/x8AHwIfAx8GH0UfRx9JH0sfTR9OH08fUB9RH1MfVR9WH1cfWR9aH5kfmx+dH58foR+iH6MfpB+lH6cfqR+qH6sfrR+uH+0f7x/xH/Mf9R/2H/cf+B/5H/sf/R/+H/8gASACIE0gcCCQILAgsiC0ILYguCC6ILsgvCC+IL8gwSDCIMQgxiDHIMggyiDLINAg3SDiIOQg5iDrIO0g7yDxIRYhOiFhIYUhhyGJIYshjSGPIZEhkiGUIaEhsiG0IbYhuCG6IbwhviHAIcIh0yHVIdch2SHbId0h3yHhIeMh5SIkIiYiKCIqIiwiLSIuIi8iMCIyIjQiNSI2IjgiOSJ4InoifCJ+IoAigSKCIoMihCKGIogiiSKKIowijSLMIs4i0CLSItQi1SLWItci2CLaItwi3SLeIuAi4SLuIu8i8CLyIzEjMyM1IzcjOSM6IzsjPCM9Iz8jQSNCI0MjRSNGI4UjhyOJI4sjjSOOI48jkCORI5MjlSOWI5cjmSOaI9kj2yPdI98j4SPiI+Mj5CPlI+cj6SPqI+sj7SPuJC0kLyQxJDMkNSQ2JDckOCQ5JDskPSQ+JD8kQSRCJIEkgySFJIckiSSKJIskjCSNJI8kkSSSJJMklSSWJLsk3yUGJSolLCUuJTAlMiU0JTYlNyU5JUYlVSVXJVklWyVdJV8lYSVjJXIldCV2JXgleiV8JX4lgCWCJcElwyXFJcclySXKJcslzCXNJc8l0SXSJdMl1SXWJhUmFyYZJhsmHSYeJh8mICYhJiMmJSYmJicmKSYqJmkmayZtJm8mcSZyJnMmdCZ1JncmeSZ6JnsmfSZ+Jr0mvybBJsMmxSbGJscmyCbJJssmzSbOJs8m0SbSJxEnEycVJxcnGScaJxsnHCcdJx8nISciJyMnJScmJ2UnZydpJ2snbSduJ28ncCdxJ3MndSd2J3cneSd6J7knuye9J78nwSfCJ8MnxCfFJ8cnySfKJ8snzSfOKBkoPChcKHwofiiAKIIohCiGKIcoiCiKKIsojSiOKJAokiiTKJQoliiXKJwoqSiuKLAosii3KLkouyi9KOIpBiktKVEpUylVKVcpWSlbKV0pXilgKW0pfimAKYIphCmGKYgpiimMKY4pnymhKaMppSmnKakpqymtKa8psSnwKfIp9Cn2Kfgp+Sn6Kfsp/Cn+KgAqASoCKgQqBSpEKkYqSCpKKkwqTSpOKk8qUCpSKlQqVSpWKlgqWSqYKpoqnCqeKqAqoSqiKqMqpCqmKqgqqSqqKqwqrSq6KrsqvCq+Kv0q/ysBKwMrBSsGKwcrCCsJKwsrDSsOKw8rESsSK1ErUytVK1crWStaK1srXCtdK18rYStiK2MrZStmK6UrpyupK6srrSuuK68rsCuxK7MrtSu2K7cruSu6K/kr+yv9K/8sASwCLAMsBCwFLAcsCSwKLAssDSwOLE0sTyxRLFMsVSxWLFcsWCxZLFssXSxeLF8sYSxiLIcsqyzSLPYs+Cz6LPws/i0ALQItAy0FLRItIS0jLSUtJy0pLSstLS0vLT4tQC1CLUQtRi1ILUotTC1OLY0tjy2RLZMtlS2WLZctmC2ZLZstnS2eLZ8toS2iLeEt4y3lLect6S3qLest7C3tLe8t8S3yLfMt9S32LjUuNy45LjsuPS4+Lj8uQC5BLkMuRS5GLkcuSS5KLokuiy6NLo8ukS6SLpMulC6VLpcumS6aLpsunS6eLt0u3y7hLuMu5S7mLucu6C7pLusu7S7uLu8u8S7yLzEvMy81LzcvOS86LzsvPC89Lz8vQS9CL0MvRS9GL4Uvhy+JL4svjS+OL48vkC+RL5MvlS+WL5cvmS+aL6Uvri+vL7Evui/FL9Qv3y/tMAIwFjAtMD8wTDBNME4wUDBdMF4wXzBhMG4wbzBwMHIwezCKMJcwpjC4MMww4zD1MP4w/zEBMQ4xDzEQMRIxEzEcMSYxLTE1MUcxTDFRAAAAAAAAAgIAAAAAAAAGtwAAAAAAAAAAAAAAAAAAMVM= - - - - - hasHead - - - - hasVertebrae - - - - numberOfLimbs - - - + CoreStoreDemo.OrganismV2ToV3MigrationPolicy Organism Undefined 1 Organism 1 - - + + + + + + numberOfLimbs + + + + hasVertebrae + + + + hasHead + + + + hasTail + + + + CoreStoreDemo/MigrationDemo.xcdatamodeld/MigrationDemoV2.xcdatamodel + YnBsaXN0MDDUAAEAAgADAAQABQAGBqAGoVgkdmVyc2lvblgkb2JqZWN0c1kkYXJjaGl2ZXJUJHRv +cBIAAYagrxCtAAcACAAXADMANAA1AD0APgBZAFoAWwBhAGIAbgCCAIMAhACFAIYAhwCIAIkAigCjAKYArQCzAMIA0QDgAOMAWADzAQIBBgEKARkBHwEgASgBNwE4AUEBTQFOAU8BUAFRAWYBZwFvAXABcQF9AZEBkgGTAZQBlQGWAZcBmAGZAagBtwHGAcoB2QHoAekB+AIHAhYCIgI0AjUCNgI3AjgCOQI6AjsCSgJZAmgCdwJ4AocClgKlAq0CwgLDAssC1wLrAvoDCQMYAxwDKwM6A0kDWANnA3MDhQOUA6MDsgPBA8ID0QPgA+8EBAQFBA0EGQQtBDwESwRaBF4EbQR8BIsEmgSpBLUExwTWBNcE5gT1BQQFBQUUBSMFMgVHBUgFUAVcBXAFfwWOBZ0FoQWwBb8FzgXdBewF+AYKBhkGKAY3BkYGVQZkBnMGdAZ3BoAGhAaIBowGlAaXBpsGnFUkbnVsbNcACQAKAAsADAANAA4ADwAQABEAEgATABQAEwAWXxAPX3hkX3Jvb3RQYWNrYWdlViRjbGFzc1xfeGRfY29tbWVudHNfEBBfeGRfbW9kZWxNYW5hZ2VyXxAVX2NvbmZpZ3VyYXRpb25zQnlOYW1lXV94ZF9tb2RlbE5hbWVfEBdfbW9kZWxWZXJzaW9uSWRlbnRpZmllcoACgKyAqYAAgKqAAICr3gAYABkAGgAbABwAHQAeAAoAHwAgACEAIgAjACQAJQAmACcAKAAlABMAKwAsAC0ALgAvACUAJQATXxAcWERCdWNrZXRGb3JDbGFzc2Vzd2FzRW5jb2RlZF8QGlhEQnVja2V0Rm9yUGFja2FnZXNzdG9yYWdlXxAcWERCdWNrZXRGb3JJbnRlcmZhY2Vzc3RvcmFnZV8QD194ZF9vd25pbmdNb2RlbF8QHVhEQnVja2V0Rm9yUGFja2FnZXN3YXNFbmNvZGVkVl9vd25lcl8QG1hEQnVja2V0Rm9yRGF0YVR5cGVzc3RvcmFnZVtfdmlzaWJpbGl0eV8QGVhEQnVja2V0Rm9yQ2xhc3Nlc3N0b3JhZ2VVX25hbWVfEB9YREJ1Y2tldEZvckludGVyZmFjZXN3YXNFbmNvZGVkXxAeWERCdWNrZXRGb3JEYXRhVHlwZXN3YXNFbmNvZGVkXxAQX3VuaXF1ZUVsZW1lbnRJRIAEgKeApYABgASAAICmgKgQAIAFgAOABIAEgABQU1lFU9MANgA3AAoAOAA6ADxXTlMua2V5c1pOUy5vYmplY3RzoQA5gAahADuAB4AiWE9yZ2FuaXNt3xAQAD8AQABBAEIAHQBDAEQAHwBFAEYACgAhAEcASAAkAEkASgBLACUAJQAQAE8AUAAtACUASgBTADkASgBWAFcAWF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc2R1cGxpY2F0ZXNfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zc3RvcmFnZVtfaXNBYnN0cmFjdIAJgCqABIAEgAKACoCigASACYCkgAaACYCjgAgIEiJt3CdXb3JkZXJlZNMANgA3AAoAXABeADyhAF2AC6EAX4AMgCJeWERfUFN0ZXJlb3R5cGXZAB0AIQBjAAoAJABkAB8ASQBlADsAXQBKAGkAEwAlAC0AWABtXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgAeAC4AJgCmAAIAECIAN0wA2ADcACgBvAHgAPKgAcABxAHIAcwB0AHUAdgB3gA6AD4AQgBGAEoATgBSAFagAeQB6AHsAfAB9AH4AfwCAgBaAGoAbgByAHoAggCOAJ4AiXxATWERQTUNvbXBvdW5kSW5kZXhlc18QEFhEX1BTS19lbGVtZW50SURfEBpYRF9QU0tfdmVyc2l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UExUTFxMYEz0TYROIE6wTrhOwE7ITtBO2E7gTuRO7E8gT1xPZE9sT3RPfE+ET4xPlE/QT9hP4E/oT/BP+FAAUAhQEFCQUTxRpFIIUnBS8FN8VHhUgFSIVJBUmFScVKBUpFSoVLBUuFS8VMBUyFTMVchV0FXYVeBV6FXsVfBV9FX4VgBWCFYMVhBWGFYcVxhXIFcoVzBXOFc8V0BXRFdIV1BXWFdcV2BXaFdsWGhYcFh4WIBYiFiMWJBYlFiYWKBYqFisWLBYuFi8WMhZxFnMWdRZ3FnkWehZ7FnwWfRZ/FoEWghaDFoUWhhbFFscWyRbLFs0WzhbPFtAW0RbTFtUW1hbXFtkW2hcZFxsXHRcfFyEXIhcjFyQXJRcnFykXKhcrFy0XLhc3F0UXUhdgF20XgBeXF6kX9BgXGDcYVxhZGFsYXRhfGGEYYhhjGGUYZhhoGGkYaxhtGG4YbxhxGHIYdxiEGIkYixiNGJIYlBiWGJgYvRjhGQgZLBkuGTAZMhk0GTYZOBk5GTsZSBlZGVsZXRlfGWEZYxllGWcZaRl6GXwZfhmAGYIZhBmGGYgZihmMGcsZzRnPGdEZ0xnUGdUZ1hnXGdkZ2xncGd0Z3xngGh8aIRojGiUaJxooGikaKhorGi0aLxowGjEaMxo0GnMadRp3Gnkaexp8Gn0afhp/GoEagxqEGoUahxqIGpUalhqXGpka2BraGtwa3hrgGuEa4hrjGuQa5hroGuka6hrsGu0bLBsuGzAbMhs0GzUbNhs3GzgbOhs8Gz0bPhtAG0EbgBuCG4QbhhuIG4kbihuLG4wbjhuQG5EbkhuUG5Ub1BvWG9gb2hvcG90b3hvfG+Ab4hvkG+Ub5hvoG+kcKBwqHCwcLhwwHDEcMhwzHDQcNhw4HDkcOhw8HD0cYhyGHK0c0RzTHNUc1xzZHNsc3RzeHOAc7Rz8HP4dAB0CHQQdBh0IHQodGR0bHR0dHx0hHSMdJR0nHSkdaB1qHWwdbh1wHXEdch1zHXQddh14HXkdeh18HX0dvB2+HcAdwh3EHcUdxh3HHcgdyh3MHc0dzh3QHdEeEB4SHhQeFh4YHhkeGh4bHhweHh4gHiEeIh4kHiUeZB5mHmgeah5sHm0ebh5vHnAech50HnUedh54HnkefB67Hr0evx7BHsMexB7FHsYexx7JHssezB7NHs8e0B8PHxEfEx8VHxcfGB8ZHxofGx8dHx8fIB8hHyMfJB9jH2UfZx9pH2sfbB9tH24fbx9xH3MfdB91H3cfeB/DH+YgBiAmICggKiAsIC4gMCAxIDIgNCA1IDcgOCA6IDwgPSA+IEAgQSBGIFMgWCBaIFwgYSBjIGUgZyCMILAg1yD7IP0g/yEBIQMhBSEHIQghCiEXISghKiEsIS4hMCEyITQhNiE4IUkhSyFNIU8hUSFTIVUhVyFZIVshmiGcIZ4hoCGiIaMhpCGlIaYhqCGqIashrCGuIa8h7iHwIfIh9CH2Ifch+CH5Ifoh/CH+If8iACICIgMiQiJEIkYiSCJKIksiTCJNIk4iUCJSIlMiVCJWIlciZCJlImYiaCKnIqkiqyKtIq8isCKxIrIisyK1IrciuCK5IrsivCL7Iv0i/yMBIwMjBCMFIwYjByMJIwsjDCMNIw8jECNPI1EjUyNVI1cjWCNZI1ojWyNdI18jYCNhI2MjZCOjI6UjpyOpI6sjrCOtI64jryOxI7MjtCO1I7cjuCP3I/kj+yP9I/8kACQBJAIkAyQFJAckCCQJJAskDCQxJFUkfCSgJKIkpCSmJKgkqiSsJK0kryS8JMskzSTPJNEk0yTVJNck2SToJOok7CTuJPAk8iT0JPYk+CU3JTklOyU9JT8lQCVBJUIlQyVFJUclSCVJJUslTCVOJY0ljyWRJZMllSWWJZclmCWZJZslnSWeJZ8loSWiJeEl4yXlJecl6SXqJesl7CXtJe8l8SXyJfMl9SX2JjUmNyY5JjsmPSY+Jj8mQCZBJkMmRSZGJkcmSSZKJkwmiyaNJo8mkSaTJpQmlSaWJpcmmSabJpwmnSafJqAm3ybhJuMm5SbnJugm6SbqJusm7SbvJvAm8SbzJvQnMyc1JzcnOSc7JzwnPSc+Jz8nQSdDJ0QnRSdHJ0gnkye2J9Yn9if4J/on/Cf+KAAoASgCKAQoBSgHKAgoCigMKA0oDigQKBEoFigjKCgoKigsKDEoMyg1KDcoXCiAKKcoyyjNKM8o0SjTKNUo1yjYKNoo5yj4KPoo/Cj+KQApAikEKQYpCCkZKRspHSkfKSEpIyklKScpKSkrKWopbCluKXApcilzKXQpdSl2KXgpeil7KXwpfil/Kb4pwCnCKcQpxinHKcgpySnKKcwpzinPKdAp0inTKhIqFCoWKhgqGiobKhwqHSoeKiAqIiojKiQqJionKjQqNSo2Kjgqdyp5KnsqfSp/KoAqgSqCKoMqhSqHKogqiSqLKowqyyrNKs8q0SrTKtQq1SrWKtcq2SrbKtwq3SrfKuArHyshKyMrJSsnKygrKSsqKysrLSsvKzArMSszKzQrcyt1K3creSt7K3wrfSt+K38rgSuDK4QrhSuHK4grxyvJK8srzSvPK9Ar0SvSK9Mr1SvXK9gr2SvbK9wsASwlLEwscCxyLHQsdix4LHosfCx9LH8sjCybLJ0snyyhLKMspSynLKksuCy6LLwsvizALMIsxCzGLMgtBy0JLQstDS0PLRAtES0SLRMtFS0XLRgtGS0bLRwtWy1dLV8tYS1jLWQtZS1mLWctaS1rLWwtbS1vLXAtry2xLbMttS23LbgtuS26LbstvS2/LcAtwS3DLcQuAy4FLgcuCS4LLgwuDS4OLg8uES4TLhQuFS4XLhguVy5ZLlsuXS5fLmAuYS5iLmMuZS5nLmguaS5rLmwuqy6tLq8usS6zLrQutS62LrcuuS67LrwuvS6/LsAu/y8BLwMvBS8HLwgvCS8KLwsvDS8PLxAvES8TLxQvHy8oLykvKy80Lz8vTi9ZL2cvfC+QL6cvuS/GL8cvyC/KL9cv2C/ZL9sv6C/pL+ov7C/1MAQwETAgMDIwRjBdMG8weDB5MHswiDCJMIowjDCNMJYwoDCnMK8wwTDGMMsAAAAAAAACAgAAAAAAAAakAAAAAAAAAAAAAAAAAAAwzQ== + + CoreStoreDemo/MigrationDemo.xcdatamodeld/MigrationDemoV3.xcdatamodel + YnBsaXN0MDDUAAEAAgADAAQABQAGB+QH5VgkdmVyc2lvblgkb2JqZWN0c1kkYXJjaGl2ZXJUJHRv +cBIAAYagrxDFAAcACAAXADMANAA1AD0APgBZAFoAWwBhAGIAbgCCAIMAhACFAIYAhwCIAIkAigCjAKYArQCzAMIA0QDgAOMAWADzAQIBBgEKARkBHwEgASgBNwE4AUEBTwFQAVEBUgFTAVQBaQFqAXIBcwF0AYABlAGVAZYBlwGYAZkBmgGbAZwBqwG6AckBzQHcAesB+gIJAhgCJAI2AjcCOAI5AjoCOwI8Aj0CTAJNAlwCawJ6AnsCigKZAqgCsALFAsYCzgLaAu4C/QMMAxsDHwMuAz0DTANbA2oDdgOIA5cDpgO1A8QDxQPUA+MD8gQHBAgEEAQcBDAEPwROBF0EYQRwBH8EgASPBJ4ErQS5BMsE2gTpBPgFBwUIBRcFJgU1BUoFSwVTBV8FcwWCBZEFoAWkBbMFwgXRBeAF7wX7Bg0GHAYrBjoGSQZYBmcGdgaLBowGlAagBrQGwwbSBuEG5Qb0BwMHEgchBzAHPAdOB10HbAd7B4oHmQeoB7cHuAe7B8QHyAfMB9AH2AfbB98H4FUkbnVsbNcACQAKAAsADAANAA4ADwAQABEAEgATABQAEwAWXxAPX3hkX3Jvb3RQYWNrYWdlViRjbGFzc1xfeGRfY29tbWVudHNfEBBfeGRfbW9kZWxNYW5hZ2VyXxAVX2NvbmZpZ3VyYXRpb25zQnlOYW1lXV94ZF9tb2RlbE5hbWVfEBdfbW9kZWxWZXJzaW9uSWRlbnRpZmllcoACgMSAwYAAgMKAAIDD3gAYABkAGgAbABwAHQAeAAoAHwAgACEAIgAjACQAJQAmACcAKAAlABMAKwAsAC0ALgAvACUAJQATXxAcWERCdWNrZXRGb3JDbGFzc2Vzd2FzRW5jb2RlZF8QGlhEQnVja2V0Rm9yUGFja2FnZXNzdG9yYWdlXxAcWERCdWNrZXRGb3JJbnRlcmZhY2Vzc3RvcmFnZV8QD194ZF9vd25pbmdNb2RlbF8QHVhEQnVja2V0Rm9yUGFja2FnZXN3YXNFbmNvZGVkVl9vd25lcl8QG1hEQnVja2V0Rm9yRGF0YVR5cGVzc3RvcmFnZVtfdmlzaWJpbGl0eV8QGVhEQnVja2V0Rm9yQ2xhc3Nlc3N0b3JhZ2VVX25hbWVfEB9YREJ1Y2tldEZvckludGVyZmFjZXN3YXNFbmNvZGVkXxAeWERCdWNrZXRGb3JEYXRhVHlwZXN3YXNFbmNvZGVkXxAQX3VuaXF1ZUVsZW1lbnRJRIAEgL+AvYABgASAAIC+gMAQAIAFgAOABIAEgABQU1lFU9MANgA3AAoAOAA6ADxXTlMua2V5c1pOUy5vYmplY3RzoQA5gAahADuAB4AiWE9yZ2FuaXNt3xAQAD8AQABBAEIAHQBDAEQAHwBFAEYACgAhAEcASAAkAEkASgBLACUAJQAQAE8AUAAtACUASgBTADkASgBWAFcAWF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc2R1cGxpY2F0ZXNfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zc3RvcmFnZVtfaXNBYnN0cmFjdIAJgCqABIAEgAKACoC6gASACYC8gAaACYC7gAgIEu7HTMhXb3JkZXJlZNMANgA3AAoAXABeADyhAF2AC6EAX4AMgCJeWERfUFN0ZXJlb3R5cGXZAB0AIQBjAAoAJABkAB8ASQBlADsAXQBKAGkAEwAlAC0AWABtXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgAeAC4AJgCmAAIAECIAN0wA2ADcACgBvAHgAPKgAcABxAHIAcwB0AHUAdgB3gA6AD4AQgBGAEoATgBSAFagAeQB6AHsAfAB9AH4AfwCAgBaAGoAbgByAHoAggCOAJ4AiXxATWERQTUN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TACQAlAATABMAEwaSAFgAWABYAC0AWACdAiYAWABYABMAWIAAgACAAICxCAgICIAZgEoICIAACN8QDwCLAIwAjQAdAI4AjwCQAB8AkQAKACEAkgCTACQAlAATAOUAEwaSAFgAWABYAC0AWACdAicAWABYABMAWIAAgB+AAICxCAgICIAZgEsICIAACN8QDwCLAIwAjQAdAI4AjwCQAB8AkQAKACEAkgCTACQAlAATABMAEwaSAFgAWABYAC0AWACdAigAWABYABMAWIAAgACAAICxCAgICIAZgEwICIAACN8QDwCLAIwAjQAdAI4AjwCQAB8AkQAKACEAkgCTACQAlAATA7cAEwaSAFgAWABYAC0AWACdAikAWABYABMAWIAAgG+AAICxCAgICIAZgE0ICIAACN8QDwCLAIwAjQAdAI4AjwCQAB8AkQAKACEAkgCTACQAlAATABMAEwaSAFgAWABYAC0AWACdAioAWABYABMAWIAAgACAAICxCAgICIAZgE4ICIAACN8QDwCLAIwAjQAdAI4AjwCQAB8AkQAKACEAkgCTACQAlAATABMAEwaSAFgAWABYAC0AWACdAisAWABYABMAWIAAgACAAICxCAgICIAZgE8ICIAACN8QDwCLAIwAjQAdAI4AjwCQAB8AkQAKACEAkgCTACQAlAATABMAEwaSAFgAWABYAC0AWACdAiwAWABYABMAWIAAgACAAICxCAgICIAZgFAICIAACFpkdXBsaWNhdGVz0gA3AAoHuQCloIAY0gCnAKgHvAe9WlhEUE1FbnRpdHmnB74HvwfAB8EHwgfDAKxaWERQTUVudGl0eV1YRFVNTENsYXNzSW1wXxASWERVTUxDbGFzc2lmaWVySW1wXxARWERVTUxOYW1lc3BhY2VJbXBfEBRYRFVNTE5hbWVkRWxlbWVudEltcF8QD1hEVU1MRWxlbWVudEltcNMANgA3AAoHxQfGADygoIAi0wA2ADcACgfJB8oAPKCggCLTADYANwAKB80HzgA8oKCAItIApwCoB9EH0l5YRE1vZGVsUGFja2FnZaYH0wfUB9UH1gfXAKxeWERNb2RlbFBhY2thZ2VfEA9YRFVNTFBhY2thZ2VJbXBfEBFYRFVNTE5hbWVzcGFjZUltcF8QFFhEVU1MTmFtZWRFbGVtZW50SW1wXxAPWERVTUxFbGVtZW50SW1w0gA3AAoH2QCloIAY0wA2ADcACgfcB90APKCggCJQ0gCnAKgH4QfiWVhEUE1Nb2RlbKMH4QfjAKxXWERNb2RlbF8QD05TS2V5ZWRBcmNoaXZlctEH5gAoVHJvb3SAAQAIABkAIgArADUAOgA/AcwB0gHvAgECCAIVAigCQAJOAmgCagJsAm4CcAJyAnQCdgKvAs4C6wMKAxwDPANDA2EDbQOJA48DsQPSA+UD5wPpA+sD7QPvA/ED8wP1A/cD+QP7A/0D/wQBBAIEBgQTBBsEJgQpBCsELgQwBDIEOwR+BKIExgTpBRAFMAVXBX4FngXCBeYF8gX0BfYF+AX6BfwF/gYABgIGBAYGBggGCgYMBg4GDwYUBhwGKQYsBi4GMQYzBjUGRAZpBo0GtAbYBtoG3AbeBuAG4gbkBuUG5wb0BwUHBwcJBwsHDQcPBxEHEwcVByYHKAcqBywHLgcwBzIHNAc2BzgHTgdhB34HmgeuB8AH1gfvCC4INAg9CEoIVghgCGoIdQiACI0IlQiXCJkImwidCJ4InwigCKEIowilCKYIpwipCKoIswi0CLYIvwjKCNMI4gjpCPEI+gkDCRYJHwkyCUkJWwmaCZwJngmgCaIJowmkCaUJpgmoCaoJqwmsCa4JrwnuCfAJ8gn0CfYJ9wn4CfkJ+gn8Cf4J/woACgIKAwpCCkQKRgpICkoKSwpMCk0KTgpQClIKUwpUClYKVwpgCmEKYwqiCqQKpgqoCqoKqwqsCq0KrgqwCrIKswq0CrYKtwq4CvcK+Qr7Cv0K/wsACwELAgsDCwULBwsICwkLCwsMCxkLGgsbCx0LJgs8C0MLUAuPC5ELkwuVC5cLmAuZC5oLmwudC58LoAuhC6MLpAu9C78LwQvDC8QLxgvdC+YL9AwBDA8MJAw4DE8MYQygDKIMpAymDKgMqQyqDKsMrAyuDLAMsQyyDLQMtQzQDNkM7gz9DRINIA01DUkNYA1yDX8Nig2MDY4NkA2SDZQNnw2hDaMNpQ2nDakNqw25DcYNyg3SDdoOJQ5IDmgOiA6KDowOjg6QDpIOkw6UDpYOlw6ZDpoOnA6eDp8OoA6iDqMOqA61DroOvA6+DsMOxQ7HDskO3g7zDxgPPA9jD4cPiQ+LD40Pjw+RD5MPlA+WD6MPtA+2D7gPug+8D74PwA/CD8QP1Q/XD9kP2w/dD98P4Q/jD+UP5xAFECMQNhBKEF8QfBCQEKYQ5RDnEOkQ6xDtEO4Q7xDwEPEQ8xD1EPYQ9xD5EPoRORE7ET0RPxFBEUIRQxFEEUURRxFJEUoRSxFNEU4RjRGPEZERkxGVEZYRlxGYEZkRmxGdEZ4RnxGhEaIRrxGwEbERsxHyEfQR9hH4EfoR+xH8Ef0R/hIAEgISAxIEEgYSBxJGEkgSShJMEk4STxJQElESUhJUElYSVxJYEloSWxKaEpwSnhKgEqISoxKkEqUSphKoEqoSqxKsEq4SrxLuEvAS8hL0EvYS9xL4EvkS+hL8Ev4S/xMAEwITAxNCE0QTRhNIE0oTSxNME00TThNQE1ITUxNUE1YTVxN8E6ATxxPrE+0T7xPxE/MT9RP3E/gT+hQHFBYUGBQaFBwUHhQgFCIUJBQzFDUUNxQ5FDsUPRQ/FEEUQxRjFI4UqBTBFNsU+xUeFV0VXxVhFWMVZRVmFWcVaBVpFWsVbRVuFW8VcRVyFXQVsxW1FbcVuRW7FbwVvRW+Fb8VwRXDFcQVxRXHFcgWBxYJFgsWDRYPFhAWERYSFhMWFRYXFhgWGRYbFhwWWxZdFl8WYRZjFmQWZRZmFmcWaRZrFmwWbRZvFnAWchaxFrMWtRa3FrkWuha7FrwWvRa/FsEWwhbDFsUWxhcFFwcXCRcLFw0XDhcPFxAXERcTFxUXFhcXFxkXGhdZF1sXXRdfF2EXYhdjF2QXZRdnF2kXahdrF20Xbhd3F4UXkhegF60XwBfXF+kYNBhXGHcYlxiZGJsYnRifGKEYohijGKUYphioGKkYqxitGK4YrxixGLIYtxjEGMkYyxjNGNIY1BjWGNgY/RkhGUgZbBluGXAZchl0GXYZeBl5GXsZiBmZGZsZnRmfGaEZoxmlGacZqRm6GbwZvhnAGcIZxBnGGcgZyhnMGgsaDRoPGhEaExoUGhUaFhoXGhkaGxocGh0aHxogGl8aYRpjGmUaZxpoGmkaahprGm0abxpwGnEacxp0GrMatRq3Grkauxq8Gr0avhq/GsEawxrEGsUaxxrIGtUa1hrXGtkbGBsaGxwbHhsgGyEbIhsjGyQbJhsoGykbKhssGy0bbBtuG3Abcht0G3Ubdht3G3gbeht8G30bfhuAG4EbwBvCG8QbxhvIG8kbyhvLG8wbzhvQG9Eb0hvUG9UcFBwWHBgcGhwcHB0cHhwfHCAcIhwkHCUcJhwoHCkcaBxqHGwcbhxwHHEcchxzHHQcdhx4HHkcehx8HH0cohzGHO0dER0THRUdFx0ZHRsdHR0eHSAdLR08HT4dQB1CHUQdRh1IHUodWR1bHV0dXx1hHWMdZR1nHWkdqB2qHawdrh2wHbEdsh2zHbQdth24Hbkduh28Hb0d/B3+HgAeAh4EHgUeBh4HHggeCh4MHg0eDh4QHhEeUB5SHlQeVh5YHlkeWh5bHlweXh5gHmEeYh5kHmUepB6mHqgeqh6sHq0erh6vHrAesh60HrUeth64HrkevB77Hv0e/x8BHwMfBB8FHwYfBx8JHwsfDB8NHw8fEB9PH1EfUx9VH1cfWB9ZH1ofWx9dH18fYB9hH2MfZB+jH6Ufpx+pH6sfrB+tH64frx+xH7MftB+1H7cfuCADICYgRiBmIGggaiBsIG4gcCBxIHIgdCB1IHcgeCB6IHwgfSB+IIAggSCGIJMgmCCaIJwgoSCjIKUgpyDMIPAhFyE7IT0hPyFBIUMhRSFHIUghSiFXIWghaiFsIW4hcCFyIXQhdiF4IYkhiyGNIY8hkSGTIZUhlyGZIZsh2iHcId4h4CHiIeMh5CHlIeYh6CHqIesh7CHuIe8iLiIwIjIiNCI2IjciOCI5IjoiPCI+Ij8iQCJCIkMigiKEIoYiiCKKIosijCKNIo4ikCKSIpMilCKWIpcipCKlIqYiqCLnIuki6yLtIu8i8CLxIvIi8yL1Ivci+CL5Ivsi/CM7Iz0jPyNBI0MjRCNFI0YjRyNJI0sjTCNNI08jUCNRI5AjkiOUI5YjmCOZI5ojmyOcI54joCOhI6IjpCOlI+Qj5iPoI+oj7CPtI+4j7yPwI/Ij9CP1I/Yj+CP5JDgkOiQ8JD4kQCRBJEIkQyREJEYkSCRJJEokTCRNJHIkliS9JOEk4yTlJOck6STrJO0k7iTwJP0lDCUOJRAlEiUUJRYlGCUaJSklKyUtJS8lMSUzJTUlNyU5JXgleiV8JX4lgCWBJYIlgyWEJYYliCWJJYoljCWNJcwlziXQJdIl1CXVJdYl1yXYJdol3CXdJd4l4CXhJiAmIiYkJiYmKCYpJiomKyYsJi4mMCYxJjImNCY1JnQmdiZ4JnomfCZ9Jn4mfyaAJoImhCaFJoYmiCaJJowmyybNJs8m0SbTJtQm1SbWJtcm2SbbJtwm3SbfJuAnHychJyMnJScnJygnKScqJysnLScvJzAnMSczJzQncyd1J3cneSd7J3wnfSd+J38ngSeDJ4QnhSeHJ4gn0yf2KBYoNig4KDooPCg+KEAoQShCKEQoRShHKEgoSihMKE0oTihQKFEoVihjKGgoaihsKHEocyh1KHconCjAKOcpCykNKQ8pESkTKRUpFykYKRopJyk4KTopPCk+KUApQilEKUYpSClZKVspXSlfKWEpYyllKWcpaSlrKaoprCmuKbApsimzKbQptSm2Kbgpuim7Kbwpvim/Kf4qACoCKgQqBioHKggqCSoKKgwqDioPKhAqEioTKlIqVCpWKlgqWipbKlwqXSpeKmAqYipjKmQqZipnKnQqdSp2Kngqtyq5KrsqvSq/KsAqwSrCKsMqxSrHKsgqySrLKswrCysNKw8rESsTKxQrFSsWKxcrGSsbKxwrHSsfKyArXythK2MrZStnK2graStqK2srbStvK3ArcStzK3Qrsyu1K7cruSu7K7wrvSu+K78rwSvDK8QrxSvHK8gsBywJLAssDSwPLBAsESwSLBMsFSwXLBgsGSwbLBwsQSxlLIwssCyyLLQstiy4LLosvCy9LL8szCzbLN0s3yzhLOMs5SznLOks+Cz6LPws/i0ALQItBC0GLQgtRy1JLUstTS1PLVAtUS1SLVMtVS1XLVgtWS1bLVwtmy2dLZ8toS2jLaQtpS2mLactqS2rLawtrS2vLbAt7y3xLfMt9S33Lfgt+S36Lfst/S3/LgAuAS4DLgQuQy5FLkcuSS5LLkwuTS5OLk8uUS5TLlQuVS5XLlguly6ZLpsunS6fLqAuoS6iLqMupS6nLqguqS6rLqwu6y7tLu8u8S7zLvQu9S72Lvcu+S77Lvwu/S7/LwAvPy9BL0MvRS9HL0gvSS9KL0svTS9PL1AvUS9TL1Qvny/CL+IwAjAEMAYwCDAKMAwwDTAOMBAwETATMBQwFjAYMBkwGjAcMB0wJjAzMDgwOjA8MEEwQzBFMEcwbDCQMLcw2zDdMN8w4TDjMOUw5zDoMOow9zEIMQoxDDEOMRAxEjEUMRYxGDEpMSsxLTEvMTExMzE1MTcxOTE7MXoxfDF+MYAxgjGDMYQxhTGGMYgxijGLMYwxjjGPMc4x0DHSMdQx1jHXMdgx2THaMdwx3jHfMeAx4jHjMiIyJDImMigyKjIrMiwyLTIuMjAyMjIzMjQyNjI3MkQyRTJGMkgyhzKJMosyjTKPMpAykTKSMpMylTKXMpgymTKbMpwy2zLdMt8y4TLjMuQy5TLmMucy6TLrMuwy7TLvMvAzLzMxMzMzNTM3MzgzOTM6MzszPTM/M0AzQTNDM0QzgzOFM4cziTOLM4wzjTOOM48zkTOTM5QzlTOXM5gz1zPZM9sz3TPfM+Az4TPiM+Mz5TPnM+gz6TPrM+w0ETQ1NFw0gDSCNIQ0hjSINIo0jDSNNI80nDSrNK00rzSxNLM0tTS3NLk0yDTKNMw0zjTQNNI01DTWNNg1FzUZNRs1HTUfNSA1ITUiNSM1JTUnNSg1KTUrNSw1azVtNW81cTVzNXQ1dTV2NXc1eTV7NXw1fTV/NYA1vzXBNcM1xTXHNcg1yTXKNcs1zTXPNdA10TXTNdQ2EzYVNhc2GTYbNhw2HTYeNh82ITYjNiQ2JTYnNig2ZzZpNms2bTZvNnA2cTZyNnM2dTZ3Nng2eTZ7Nnw2uza9Nr82wTbDNsQ2xTbGNsc2yTbLNsw2zTbPNtA3DzcRNxM3FTcXNxg3GTcaNxs3HTcfNyA3ITcjNyQ3Lzc4Nzk3OzdEN083XjdpN3c3jDegN7c3yTfWN9c32DfaN+c36DfpN+s3+Df5N/o3/DgFOBQ4ITgwOEI4VjhtOH84iDiJOIs4mDiZOJo4nDidOKY4sDi3OL840TjWONsAAAAAAAACAgAAAAAAAAfoAAAAAAAAAAAAAAAAAAA43Q== + + + + + Organism + Undefined + 0 + Organism + 1 + + \ No newline at end of file diff --git a/CoreStoreDemo/CoreStoreDemo/MIgrations Demo/OrganismV3.swift b/CoreStoreDemo/CoreStoreDemo/MIgrations Demo/OrganismV3.swift index 3f00d4c..e34d5f0 100644 --- a/CoreStoreDemo/CoreStoreDemo/MIgrations Demo/OrganismV3.swift +++ b/CoreStoreDemo/CoreStoreDemo/MIgrations Demo/OrganismV3.swift @@ -10,7 +10,8 @@ import Foundation import CoreData class OrganismV3: NSManagedObject, OrganismProtocol { - + + @NSManaged var dna: Int64 @NSManaged var hasHead: Bool @NSManaged var hasTail: Bool @NSManaged var numberOfLimbs: Int32 diff --git a/CoreStoreDemo/CoreStoreDemo/MIgrations Demo/OrganismV3ToV2.xcmappingmodel/xcmapping.xml b/CoreStoreDemo/CoreStoreDemo/MIgrations Demo/OrganismV3ToV2.xcmappingmodel/xcmapping.xml index 02e5679..30118b0 100644 --- a/CoreStoreDemo/CoreStoreDemo/MIgrations Demo/OrganismV3ToV2.xcmappingmodel/xcmapping.xml +++ b/CoreStoreDemo/CoreStoreDemo/MIgrations Demo/OrganismV3ToV2.xcmappingmodel/xcmapping.xml @@ -5,7 +5,7 @@ 134481920 8160C973-F2E8-4296-AC28-7329092D6700 - 106 + 107 @@ -46,12 +46,12 @@ CoreStoreDemo/MigrationDemo.xcdatamodeld/MigrationDemoV3.xcdatamodel - YnBsaXN0MDDUAAEAAgADAAQABQAGBrMGtFgkdmVyc2lvblgkb2JqZWN0c1kkYXJjaGl2ZXJUJHRv -cBIAAYagrxCuAAcACAAXADMANAA1AD0APgBZAFoAWwBhAGIAbgCEAIUAhgCHAIgAiQCKAIsAjACNAKYAqQCwALYAxQDUANcA5gD1APgAWAEIARcBGwEfAS4BNAE1AT0BTAFNAVYBYgFjAWQBZQFmAXsBfAGEAYUBhgGSAaYBpwGoAakBqgGrAawBrQGuAb0BzAHbAd8B7gH9AgwCGwIqAjYCSAJJAkoCSwJMAk0CTgJPAl4CXwJuAn0CjAKNApwCqwK6AsIC1wLYAuAC7AMAAw8DHgMtAzEDQANPA14DbQN8A4gDmgOpA7gDxwPWA9cD5gP1BAQEGQQaBCIELgRCBFEEYARvBHMEggSRBKAErwS+BMoE3ATrBPoFCQUYBScFNgVFBVoFWwVjBW8FgwWSBaEFsAW0BcMF0gXhBfAF/wYLBh0GLAY7BkoGWQZoBncGhgaHBooGkwaXBpsGnwanBqoGrgavVSRudWxs1wAJAAoACwAMAA0ADgAPABAAEQASABMAFAATABZfEA9feGRfcm9vdFBhY2thZ2VWJGNsYXNzXF94ZF9jb21tZW50c18QEF94ZF9tb2RlbE1hbmFnZXJfEBVfY29uZmlndXJhdGlvbnNCeU5hbWVdX3hkX21vZGVsTmFtZV8QF19tb2RlbFZlcnNpb25JZGVudGlmaWVygAKArYCqgACAq4AAgKzeABgAGQAaABsAHAAdAB4ACgAfACAAIQAiACMAJAAlACYAJwAoACUAEwArACwALQAuAC8AJQAlABNfEBxYREJ1Y2tldEZvckNsYXNzZXN3YXNFbmNvZGVkXxAaWERCdWNrZXRGb3JQYWNrYWdlc3N0b3JhZ2VfEBxYREJ1Y2tldEZvckludGVyZmFjZXNzdG9yYWdlXxAPX3hkX293bmluZ01vZGVsXxAdWERCdWNrZXRGb3JQYWNrYWdlc3dhc0VuY29kZWRWX293bmVyXxAbWERCdWNrZXRGb3JEYXRhVHlwZXNzdG9yYWdlW192aXNpYmlsaXR5XxAZWERCdWNrZXRGb3JDbGFzc2Vzc3RvcmFnZVVfbmFtZV8QH1hEQnVja2V0Rm9ySW50ZXJmYWNlc3dhc0VuY29kZWRfEB5YREJ1Y2tldEZvckRhdGFUeXBlc3dhc0VuY29kZWRfEBBfdW5pcXVlRWxlbWVudElEgASAqICmgAGABIAAgKeAqRAAgAWAA4AEgASAAFBTWUVT0wA2ADcACgA4ADoAPFdOUy5rZXlzWk5TLm9iamVjdHOhADmABqEAO4AHgCVYT3JnYW5pc23fEBAAPwBAAEEAQgAdAEMARAAfAEUARgAKACEARwBIACQASQBKAEsAJQAlABAATwBQAC0AJQBKAFMAOQBKAFYAVwBYXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zZHVwbGljYXRlc18QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNzdG9yYWdlW19pc0Fic3RyYWN0gAmALYAEgASAAoAKgKOABIAJgKWABoAJgKSACAgSborVM1dvcmRlcmVk0wA2ADcACgBcAF4APKEAXYALoQBfgAyAJV5YRF9QU3RlcmVvdHlwZdkAHQAhAGMACgAkAGQAHwBJAGUAOwBdAEoAaQATACUALQBYAG1fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WAB4ALgAmALIAAgAQIgA3TADYANwAKAG8AeQA8qQBwAHEAcgBzAHQAdQB2AHcAeIAOgA+AEIARgBKAE4AUgBWAFqkAegB7AHwAfQB+AH8AgACBAIKAF4AbgByAHoAfgCGAI4AmgCqAJV8QE1hEUE1Db21wb3VuZEluZGV4ZXNfEBBYRF9QU0tfZWxlbWVudElEXxAZWERQ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kwAfAJQACgAhAJUAlgAkAJcAEwWjABMFYABYAFgAWAAtAFgAoAGWAFgAWAATAFiAAICUgACAjwgICAiAGoA7CAiAAAjTADYANwAKBbEFsgA8oKCAJd8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATAPoAEwVgAFgAWABYAC0AWACgAZcAWABYABMAWIAAgCKAAICPCAgICIAagDwICIAACN8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATAPoAEwVgAFgAWABYAC0AWACgAZgAWABYABMAWIAAgCKAAICPCAgICIAagD0ICIAACN8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATAPoAEwVgAFgAWABYAC0AWACgAZkAWABYABMAWIAAgCKAAICPCAgICIAagD4ICIAACN8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATABMAEwVgAFgAWABYAC0AWACgAZoAWABYABMAWIAAgACAAICPCAgICIAagD8ICIAACN8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATAPoAEwVgAFgAWABYAC0AWACgAZsAWABYABMAWIAAgCKAAICPCAgICIAagEAICIAACNkAHQAhBgAACgAkBgEAHwBJBgIBYAF/AEoAaQATACUALQBYBgpfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WAjIA2gAmALIAAgAQIgJvTADYANwAKBgwGFAA8pwI4AjkCOgI7AjwCPQI+gEyATYBOgE+AUIBRgFKnBhUGFgYXBhgGGQYaBhuAnICdgJ6An4CggKGAooAl3xAPAI4AjwCQAB0AkQCSAJMAHwCUAAoAIQCVAJYAJACXABMAEwATBWEAWABYAFgALQBYAKACOABYAFgAEwBYgACAAIAAgJoICAgIgBqATAgIgAAI3xAPAI4AjwCQAB0AkQCSAJMAHwCUAAoAIQCVAJYAJACXABMA+gATBWEAWABYAFgALQBYAKACOQBYAFgAEwBYgACAIoAAgJoICAgI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HaUdpx2pHasdrR2vHbEdsx3yHfQd9h34Hfod+x38Hf0d/h4AHgIeAx4EHgYeBx5GHkgeSh5MHk4eTx5QHlEeUh5UHlYeVx5YHloeWx6aHpwenh6gHqIeox6kHqUeph6oHqoeqx6sHq4erx7uHvAe8h70HvYe9x74Hvke+h78Hv4e/x8AHwIfAx8GH0UfRx9JH0sfTR9OH08fUB9RH1MfVR9WH1cfWR9aH5kfmx+dH58foR+iH6MfpB+lH6cfqR+qH6sfrR+uH+0f7x/xH/Mf9R/2H/cf+B/5H/sf/R/+H/8gASACIE0gcCCQILAgsiC0ILYguCC6ILsgvCC+IL8gwSDCIMQgxiDHIMggyiDLINAg3SDiIOQg5iDrIO0g7yDxIRYhOiFhIYUhhyGJIYshjSGPIZEhkiGUIaEhsiG0IbYhuCG6IbwhviHAIcIh0yHVIdch2SHbId0h3yHhIeMh5SIkIiYiKCIqIiwiLSIuIi8iMCIyIjQiNSI2IjgiOSJ4InoifCJ+IoAigSKCIoMihCKGIogiiSKKIowijSLMIs4i0CLSItQi1SLWItci2CLaItwi3SLeIuAi4SLuIu8i8CLyIzEjMyM1IzcjOSM6IzsjPCM9Iz8jQSNCI0MjRSNGI4UjhyOJI4sjjSOOI48jkCORI5MjlSOWI5cjmSOaI9kj2yPdI98j4SPiI+Mj5CPlI+cj6SPqI+sj7SPuJC0kLyQxJDMkNSQ2JDckOCQ5JDskPSQ+JD8kQSRCJIEkgySFJIckiSSKJIskjCSNJI8kkSSSJJMklSSWJLsk3yUGJSolLCUuJTAlMiU0JTYlNyU5JUYlVSVXJVklWyVdJV8lYSVjJXIldCV2JXgleiV8JX4lgCWCJcElwyXFJcclySXKJcslzCXNJc8l0SXSJdMl1SXWJhUmFyYZJhsmHSYeJh8mICYhJiMmJSYmJicmKSYqJmkmayZtJm8mcSZyJnMmdCZ1JncmeSZ6JnsmfSZ+Jr0mvybBJsMmxSbGJscmyCbJJssmzSbOJs8m0SbSJxEnEycVJxcnGScaJxsnHCcdJx8nISciJyMnJScmJ2UnZydpJ2snbSduJ28ncCdxJ3MndSd2J3cneSd6J7knuye9J78nwSfCJ8MnxCfFJ8cnySfKJ8snzSfOKBkoPChcKHwofiiAKIIohCiGKIcoiCiKKIsojSiOKJAokiiTKJQoliiXKJwoqSiuKLAosii3KLkouyi9KOIpBiktKVEpUylVKVcpWSlbKV0pXilgKW0pfimAKYIphCmGKYgpiimMKY4pnymhKaMppSmnKakpqymtKa8psSnwKfIp9Cn2Kfgp+Sn6Kfsp/Cn+KgAqASoCKgQqBSpEKkYqSCpKKkwqTSpOKk8qUCpSKlQqVSpWKlgqWSqYKpoqnCqeKqAqoSqiKqMqpCqmKqgqqSqqKqwqrSq6KrsqvCq+Kv0q/ysBKwMrBSsGKwcrCCsJKwsrDSsOKw8rESsSK1ErUytVK1crWStaK1srXCtdK18rYStiK2MrZStmK6UrpyupK6srrSuuK68rsCuxK7MrtSu2K7cruSu6K/kr+yv9K/8sASwCLAMsBCwFLAcsCSwKLAssDSwOLE0sTyxRLFMsVSxWLFcsWCxZLFssXSxeLF8sYSxiLIcsqyzSLPYs+Cz6LPws/i0ALQItAy0FLRItIS0jLSUtJy0pLSstLS0vLT4tQC1CLUQtRi1ILUotTC1OLY0tjy2RLZMtlS2WLZctmC2ZLZstnS2eLZ8toS2iLeEt4y3lLect6S3qLest7C3tLe8t8S3yLfMt9S32LjUuNy45LjsuPS4+Lj8uQC5BLkMuRS5GLkcuSS5KLokuiy6NLo8ukS6SLpMulC6VLpcumS6aLpsunS6eLt0u3y7hLuMu5S7mLucu6C7pLusu7S7uLu8u8S7yLzEvMy81LzcvOS86LzsvPC89Lz8vQS9CL0MvRS9GL4Uvhy+JL4svjS+OL48vkC+RL5MvlS+WL5cvmS+aL6Uvri+vL7Evui/FL9Qv3y/tMAIwFjAtMD8wTDBNME4wUDBdMF4wXzBhMG4wbzBwMHIwezCKMJcwpjC4MMww4zD1MP4w/zEBMQ4xDzEQMRIxEzEcMSYxLTE1MUcxTDFRAAAAAAAAAgIAAAAAAAAGtwAAAAAAAAAAAAAAAAAAMVM= + YnBsaXN0MDDUAAEAAgADAAQABQAGB+QH5VgkdmVyc2lvblgkb2JqZWN0c1kkYXJjaGl2ZXJUJHRv +cBIAAYagrxDFAAcACAAXADMANAA1AD0APgBZAFoAWwBhAGIAbgCCAIMAhACFAIYAhwCIAIkAigCjAKYArQCzAMIA0QDgAOMAWADzAQIBBgEKARkBHwEgASgBNwE4AUEBTwFQAVEBUgFTAVQBaQFqAXIBcwF0AYABlAGVAZYBlwGYAZkBmgGbAZwBqwG6AckBzQHcAesB+gIJAhgCJAI2AjcCOAI5AjoCOwI8Aj0CTAJNAlwCawJ6AnsCigKZAqgCsALFAsYCzgLaAu4C/QMMAxsDHwMuAz0DTANbA2oDdgOIA5cDpgO1A8QDxQPUA+MD8gQHBAgEEAQcBDAEPwROBF0EYQRwBH8EgASPBJ4ErQS5BMsE2gTpBPgFBwUIBRcFJgU1BUoFSwVTBV8FcwWCBZEFoAWkBbMFwgXRBeAF7wX7Bg0GHAYrBjoGSQZYBmcGdgaLBowGlAagBrQGwwbSBuEG5Qb0BwMHEgchBzAHPAdOB10HbAd7B4oHmQeoB7cHuAe7B8QHyAfMB9AH2AfbB98H4FUkbnVsbNcACQAKAAsADAANAA4ADwAQABEAEgATABQAEwAWXxAPX3hkX3Jvb3RQYWNrYWdlViRjbGFzc1xfeGRfY29tbWVudHNfEBBfeGRfbW9kZWxNYW5hZ2VyXxAVX2NvbmZpZ3VyYXRpb25zQnlOYW1lXV94ZF9tb2RlbE5hbWVfEBdfbW9kZWxWZXJzaW9uSWRlbnRpZmllcoACgMSAwYAAgMKAAIDD3gAYABkAGgAbABwAHQAeAAoAHwAgACEAIgAjACQAJQAmACcAKAAlABMAKwAsAC0ALgAvACUAJQATXxAcWERCdWNrZXRGb3JDbGFzc2Vzd2FzRW5jb2RlZF8QGlhEQnVja2V0Rm9yUGFja2FnZXNzdG9yYWdlXxAcWERCdWNrZXRGb3JJbnRlcmZhY2Vzc3RvcmFnZV8QD194ZF9vd25pbmdNb2RlbF8QHVhEQnVja2V0Rm9yUGFja2FnZXN3YXNFbmNvZGVkVl9vd25lcl8QG1hEQnVja2V0Rm9yRGF0YVR5cGVzc3RvcmFnZVtfdmlzaWJpbGl0eV8QGVhEQnVja2V0Rm9yQ2xhc3Nlc3N0b3JhZ2VVX25hbWVfEB9YREJ1Y2tldEZvckludGVyZmFjZXN3YXNFbmNvZGVkXxAeWERCdWNrZXRGb3JEYXRhVHlwZXN3YXNFbmNvZGVkXxAQX3VuaXF1ZUVsZW1lbnRJRIAEgL+AvYABgASAAIC+gMAQAIAFgAOABIAEgABQU1lFU9MANgA3AAoAOAA6ADxXTlMua2V5c1pOUy5vYmplY3RzoQA5gAahADuAB4AiWE9yZ2FuaXNt3xAQAD8AQABBAEIAHQBDAEQAHwBFAEYACgAhAEcASAAkAEkASgBLACUAJQAQAE8AUAAtACUASgBTADkASgBWAFcAWF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc2R1cGxpY2F0ZXNfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zc3RvcmFnZVtfaXNBYnN0cmFjdIAJgCqABIAEgAKACoC6gASACYC8gAaACYC7gAgIEpznnxdXb3JkZXJlZNMANgA3AAoAXABeADyhAF2AC6EAX4AMgCJeWERfUFN0ZXJlb3R5cGXZAB0AIQBjAAoAJABkAB8ASQBlADsAXQBKAGkAEwAlAC0AWABtXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgAeAC4AJgCmAAIAECIAN0wA2ADcACgBvAHgAPKgAcABxAHIAcwB0AHUAdgB3gA6AD4AQgBGAEoATgBSAFagAeQB6AHsAfAB9AH4AfwCAgBaAGoAbgByAHoAggCOAJ4AiXxATWERQTUN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JbXDSADcACgfZAKWggBjTADYANwAKB9wH3QA8oKCAIlDSAKcAqAfhB+JZWERQTU1vZGVsowfhB+MArFdYRE1vZGVsXxAPTlNLZXllZEFyY2hpdmVy0QfmAChUcm9vdIABAAgAGQAiACsANQA6AD8BzAHSAe8CAQIIAhUCKAJAAk4CaAJqAmwCbgJwAnICdAJ2Aq8CzgLrAwoDHAM8A0MDYQNtA4kDjwOxA9ID5QPnA+kD6wPtA+8D8QPzA/UD9wP5A/sD/QP/BAEEAgQGBBMEGwQmBCkEKwQuBDAEMgQ7BH4EogTGBOkFEAUwBVcFfgWeBcIF5gXyBfQF9gX4BfoF/AX+BgAGAgYEBgYGCAYKBgwGDgYPBhQGHAYpBiwGLgYxBjMGNQZEBmkGjQa0BtgG2gbcBt4G4AbiBuQG5QbnBvQHBQcHBwkHCwcNBw8HEQcTBxUHJgcoByoHLAcuBzAHMgc0BzYHOAdOB2EHfgeaB64HwAfWB+8ILgg0CD0ISghWCGAIagh1CIAIjQiVCJcImQibCJ0IngifCKAIoQijCKUIpginCKkIqgizCLQItgi/CMoI0wjiCOkI8Qj6CQMJFgkfCTIJSQlbCZoJnAmeCaAJogmjCaQJpQmmCagJqgmrCawJrgmvCe4J8AnyCfQJ9gn3CfgJ+Qn6CfwJ/gn/CgAKAgoDCkIKRApGCkgKSgpLCkwKTQpOClAKUgpTClQKVgpXCmAKYQpjCqIKpAqmCqgKqgqrCqwKrQquCrAKsgqzCrQKtgq3CrgK9wr5CvsK/Qr/CwALAQsCCwMLBQsHCwgLCQsLCwwLGQsaCxsLHQsmCzwLQwtQC48LkQuTC5ULlwuYC5kLmgubC50LnwugC6ELowukC70LvwvBC8MLxAvGC90L5gv0DAEMDwwkDDgMTwxhDKAMogykDKYMqAypDKoMqwysDK4MsAyxDLIMtAy1DNAM2QzuDP0NEg0gDTUNSQ1gDXINfw2KDYwNjg2QDZINlA2fDaENow2lDacNqQ2rDbkNxg3KDdIN2g4lDkgOaA6IDooOjA6ODpAOkg6TDpQOlg6XDpkOmg6cDp4Onw6gDqIOow6oDrUOug68Dr4Oww7FDscOyQ7eDvMPGA88D2MPhw+JD4sPjQ+PD5EPkw+UD5YPow+0D7YPuA+6D7wPvg/AD8IPxA/VD9cP2Q/bD90P3w/hD+MP5Q/nEAUQIxA2EEoQXxB8EJAQphDlEOcQ6RDrEO0Q7hDvEPAQ8RDzEPUQ9hD3EPkQ+hE5ETsRPRE/EUERQhFDEUQRRRFHEUkRShFLEU0RThGNEY8RkRGTEZURlhGXEZgRmRGbEZ0RnhGfEaERohGvEbARsRGzEfIR9BH2EfgR+hH7EfwR/RH+EgASAhIDEgQSBhIHEkYSSBJKEkwSThJPElASURJSElQSVhJXElgSWhJbEpoSnBKeEqASohKjEqQSpRKmEqgSqhKrEqwSrhKvEu4S8BLyEvQS9hL3EvgS+RL6EvwS/hL/EwATAhMDE0ITRBNGE0gTShNLE0wTTRNOE1ATUhNTE1QTVhNXE3wToBPHE+sT7RPvE/ET8xP1E/cT+BP6FAcUFhQYFBoUHBQeFCAUIhQkFDMUNRQ3FDkUOxQ9FD8UQRRDFGMUjhSoFMEU2xT7FR4VXRVfFWEVYxVlFWYVZxVoFWkVaxVtFW4VbxVxFXIVdBWzFbUVtxW5FbsVvBW9Fb4VvxXBFcMVxBXFFccVyBYHFgkWCxYNFg8WEBYRFhIWExYVFhcWGBYZFhsWHBZbFl0WXxZhFmMWZBZlFmYWZxZpFmsWbBZtFm8WcBZyFrEWsxa1FrcWuRa6FrsWvBa9Fr8WwRbCFsMWxRbGFwUXBxcJFwsXDRcOFw8XEBcRFxMXFRcWFxcXGRcaF1kXWxddF18XYRdiF2MXZBdlF2cXaRdqF2sXbRduF3cXhReSF6AXrRfAF9cX6Rg0GFcYdxiXGJkYmxidGJ8YoRiiGKMYpRimGKgYqRirGK0YrhivGLEYshi3GMQYyRjLGM0Y0hjUGNYY2Bj9GSEZSBlsGW4ZcBlyGXQZdhl4GXkZexmIGZkZmxmdGZ8ZoRmjGaUZpxmpGboZvBm+GcAZwhnEGcYZyBnKGcwaCxoNGg8aERoTGhQaFRoWGhcaGRobGhwaHRofGiAaXxphGmMaZRpnGmgaaRpqGmsabRpvGnAacRpzGnQasxq1GrcauRq7GrwavRq+Gr8awRrDGsQaxRrHGsga1RrWGtca2RsYGxobHBseGyAbIRsiGyMbJBsmGygbKRsqGywbLRtsG24bcBtyG3QbdRt2G3cbeBt6G3wbfRt+G4AbgRvAG8IbxBvGG8gbyRvKG8sbzBvOG9Ab0RvSG9Qb1RwUHBYcGBwaHBwcHRweHB8cIBwiHCQcJRwmHCgcKRxoHGocbBxuHHAccRxyHHMcdBx2HHgceRx6HHwcfRyiHMYc7R0RHRMdFR0XHRkdGx0dHR4dIB0tHTwdPh1AHUIdRB1GHUgdSh1ZHVsdXR1fHWEdYx1lHWcdaR2oHaodrB2uHbAdsR2yHbMdtB22HbgduR26HbwdvR38Hf4eAB4CHgQeBR4GHgceCB4KHgweDR4OHhAeER5QHlIeVB5WHlgeWR5aHlseXB5eHmAeYR5iHmQeZR6kHqYeqB6qHqwerR6uHq8esB6yHrQetR62HrgeuR68Hvse/R7/HwEfAx8EHwUfBh8HHwkfCx8MHw0fDx8QH08fUR9TH1UfVx9YH1kfWh9bH10fXx9gH2EfYx9kH6MfpR+nH6kfqx+sH60frh+vH7Efsx+0H7Uftx+4IAMgJiBGIGYgaCBqIGwgbiBwIHEgciB0IHUgdyB4IHogfCB9IH4ggCCBIIYgkyCYIJognCChIKMgpSCnIMwg8CEXITshPSE/IUEhQyFFIUchSCFKIVchaCFqIWwhbiFwIXIhdCF2IXghiSGLIY0hjyGRIZMhlSGXIZkhmyHaIdwh3iHgIeIh4yHkIeUh5iHoIeoh6yHsIe4h7yIuIjAiMiI0IjYiNyI4IjkiOiI8Ij4iPyJAIkIiQyKCIoQihiKIIooiiyKMIo0ijiKQIpIikyKUIpYilyKkIqUipiKoIuci6SLrIu0i7yLwIvEi8iLzIvUi9yL4Ivki+yL8IzsjPSM/I0EjQyNEI0UjRiNHI0kjSyNMI00jTyNQI1EjkCOSI5QjliOYI5kjmiObI5wjniOgI6EjoiOkI6Uj5CPmI+gj6iPsI+0j7iPvI/Aj8iP0I/Uj9iP4I/kkOCQ6JDwkPiRAJEEkQiRDJEQkRiRIJEkkSiRMJE0kciSWJL0k4STjJOUk5yTpJOsk7STuJPAk/SUMJQ4lECUSJRQlFiUYJRolKSUrJS0lLyUxJTMlNSU3JTkleCV6JXwlfiWAJYElgiWDJYQlhiWIJYkliiWMJY0lzCXOJdAl0iXUJdUl1iXXJdgl2iXcJd0l3iXgJeEmICYiJiQmJiYoJikmKiYrJiwmLiYwJjEmMiY0JjUmdCZ2JngmeiZ8Jn0mfiZ/JoAmgiaEJoUmhiaIJokmjCbLJs0mzybRJtMm1CbVJtYm1ybZJtsm3CbdJt8m4CcfJyEnIyclJycnKCcpJyonKyctJy8nMCcxJzMnNCdzJ3Undyd5J3snfCd9J34nfyeBJ4MnhCeFJ4cniCfTJ/YoFig2KDgoOig8KD4oQChBKEIoRChFKEcoSChKKEwoTShOKFAoUShWKGMoaChqKGwocShzKHUodyicKMAo5ykLKQ0pDykRKRMpFSkXKRgpGiknKTgpOik8KT4pQClCKUQpRilIKVkpWyldKV8pYSljKWUpZylpKWspqimsKa4psCmyKbMptCm1KbYpuCm6KbspvCm+Kb8p/ioAKgIqBCoGKgcqCCoJKgoqDCoOKg8qECoSKhMqUipUKlYqWCpaKlsqXCpdKl4qYCpiKmMqZCpmKmcqdCp1KnYqeCq3Krkquyq9Kr8qwCrBKsIqwyrFKscqyCrJKssqzCsLKw0rDysRKxMrFCsVKxYrFysZKxsrHCsdKx8rICtfK2ErYytlK2craCtpK2orayttK28rcCtxK3MrdCuzK7Urtyu5K7srvCu9K74rvyvBK8MrxCvFK8cryCwHLAksCywNLA8sECwRLBIsEywVLBcsGCwZLBssHCxBLGUsjCywLLIstCy2LLgsuiy8LL0svyzMLNss3SzfLOEs4yzlLOcs6Sz4LPos/Cz+LQAtAi0ELQYtCC1HLUktSy1NLU8tUC1RLVItUy1VLVctWC1ZLVstXC2bLZ0tny2hLaMtpC2lLaYtpy2pLastrC2tLa8tsC3vLfEt8y31Lfct+C35Lfot+y39Lf8uAC4BLgMuBC5DLkUuRy5JLksuTC5NLk4uTy5RLlMuVC5VLlcuWC6XLpkumy6dLp8uoC6hLqIuoy6lLqcuqC6pLqsurC7rLu0u7y7xLvMu9C71LvYu9y75Lvsu/C79Lv8vAC8/L0EvQy9FL0cvSC9JL0ovSy9NL08vUC9RL1MvVC+fL8Iv4jACMAQwBjAIMAowDDANMA4wEDARMBMwFDAWMBgwGTAaMBwwHTAiMC8wNDA2MDgwPTA/MEEwQzBoMIwwszDXMNkw2zDdMN8w4TDjMOQw5jDzMQQxBjEIMQoxDDEOMRAxEjEUMSUxJzEpMSsxLTEvMTExMzE1MTcxdjF4MXoxfDF+MX8xgDGBMYIxhDGGMYcxiDGKMYsxyjHMMc4x0DHSMdMx1DHVMdYx2DHaMdsx3DHeMd8yHjIgMiIyJDImMicyKDIpMioyLDIuMi8yMDIyMjMyQDJBMkIyRDKDMoUyhzKJMosyjDKNMo4yjzKRMpMylDKVMpcymDLXMtky2zLdMt8y4DLhMuIy4zLlMucy6DLpMusy7DMrMy0zLzMxMzMzNDM1MzYzNzM5MzszPDM9Mz8zQDN/M4EzgzOFM4cziDOJM4ozizONM48zkDORM5MzlDPTM9Uz1zPZM9sz3DPdM94z3zPhM+Mz5DPlM+cz6DQNNDE0WDR8NH40gDSCNIQ0hjSINIk0izSYNKc0qTSrNK00rzSxNLM0tTTENMY0yDTKNMw0zjTQNNI01DUTNRU1FzUZNRs1HDUdNR41HzUhNSM1JDUlNSc1KDVnNWk1azVtNW81cDVxNXI1czV1NXc1eDV5NXs1fDW7Nb01vzXBNcM1xDXFNcY1xzXJNcs1zDXNNc810DYPNhE2EzYVNhc2GDYZNho2GzYdNh82IDYhNiM2JDZjNmU2ZzZpNms2bDZtNm42bzZxNnM2dDZ1Nnc2eDa3Nrk2uza9Nr82wDbBNsI2wzbFNsc2yDbJNss2zDcLNw03DzcRNxM3FDcVNxY3FzcZNxs3HDcdNx83IDcrNzQ3NTc3N0A3SzdaN2U3czeIN5w3szfFN9I30zfUN9Y34zfkN+U35zf0N/U39jf4OAE4EDgdOCw4PjhSOGk4eziEOIU4hziUOJU4ljiYOJk4ojisOLM4uzjNONI41wAAAAAAAAICAAAAAAAAB+gAAAAAAAAAAAAAAAAAADjZ CoreStoreDemo/MigrationDemo.xcdatamodeld/MigrationDemoV2.xcdatamodel - YnBsaXN0MDDUAAEAAgADAAQABQAGBW8FcFgkdmVyc2lvblgkb2JqZWN0c1kkYXJjaGl2ZXJUJHRv -cBIAAYagrxCWAAcACAAXADMANAA1AD0APgBZAFoAWwBhAGIAbgCEAIUAhgCHAIgAiQCKAIsAjACNAKYAqQCwALYAxQDUANcA5gD1APgAWAEIARcBGwEfAS4BNAE1AT0BTAFNAVYBYAFhAWIBYwF4AXkBgQGCAYMBjwGjAaQBpQGmAacBqAGpAaoBqwG6AckB2AHcAesB+gIJAhgCJwIzAkUCRgJHAkgCSQJKAksCTAJbAmoCeQKIAokCmAKnArYCvgLTAtQC3ALoAvwDCwMaAykDLQM8A0sDWgNpA3gDhAOWA6UDtAPDA9ID4QPwA/8EFAQVBB0EKQQ9BEwEWwRqBG4EfQSMBJsEqgS5BMUE1wTmBOcE9gUFBRQFFQUkBTMFQgVDBUYFTwVTBVcFWwVjBWYFagVrVSRudWxs1wAJAAoACwAMAA0ADgAPABAAEQASABMAFAATABZfEA9feGRfcm9vdFBhY2thZ2VWJGNsYXNzXF94ZF9jb21tZW50c18QEF94ZF9tb2RlbE1hbmFnZXJfEBVfY29uZmlndXJhdGlvbnNCeU5hbWVdX3hkX21vZGVsTmFtZV8QF19tb2RlbFZlcnNpb25JZGVudGlmaWVygAKAlYCSgACAk4AAgJTeABgAGQAaABsAHAAdAB4ACgAfACAAIQAiACMAJAAlACYAJwAoACUAEwArACwALQAuAC8AJQAlABNfEBxYREJ1Y2tldEZvckNsYXNzZXN3YXNFbmNvZGVkXxAaWERCdWNrZXRGb3JQYWNrYWdlc3N0b3JhZ2VfEBxYREJ1Y2tldEZvckludGVyZmFjZXNzdG9yYWdlXxAPX3hkX293bmluZ01vZGVsXxAdWERCdWNrZXRGb3JQYWNrYWdlc3dhc0VuY29kZWRWX293bmVyXxAbWERCdWNrZXRGb3JEYXRhVHlwZXNzdG9yYWdlW192aXNpYmlsaXR5XxAZWERCdWNrZXRGb3JDbGFzc2Vzc3RvcmFnZVVfbmFtZV8QH1hEQnVja2V0Rm9ySW50ZXJmYWNlc3dhc0VuY29kZWRfEB5YREJ1Y2tldEZvckRhdGFUeXBlc3dhc0VuY29kZWRfEBBfdW5pcXVlRWxlbWVudElEgASAkICOgAGABIAAgI+AkRAAgAWAA4AEgASAAFBTWUVT0wA2ADcACgA4ADoAPFdOUy5rZXlzWk5TLm9iamVjdHOhADmABqEAO4AHgCVYT3JnYW5pc23fEBAAPwBAAEEAQgAdAEMARAAfAEUARgAKACEARwBIACQASQBKAEsAJQAlABAATwBQAC0AJQBKAFMAOQBKAFYAVwBYXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zZHVwbGljYXRlc18QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNzdG9yYWdlW19pc0Fic3RyYWN0gAmALYAEgASAAoAKgIuABIAJgI2ABoAJgIyACAgSoyHsjFdvcmRlcmVk0wA2ADcACgBcAF4APKEAXYALoQBfgAyAJV5YRF9QU3RlcmVvdHlwZdkAHQAhAGMACgAkAGQAHwBJAGUAOwBdAEoAaQATACUALQBYAG1fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WAB4ALgAmALIAAgAQIgA3TADYANwAKAG8AeQA8qQBwAHEAcgBzAHQAdQB2AHcAeIAOgA+AEIARgBKAE4AUgBWAFqkAegB7AHwAfQB+AH8AgACBAIKAF4AbgByAHoAfgCGAI4AmgCqAJV8QE1hEUE1Db21wb3VuZEluZGV4ZXNfEBBYRF9QU0tfZWxlbWVudElEXxAZWERQTVVuaXF1ZW5lc3NDb25zdHJhaW50c18QGlhEX1BTS192ZXJzaW9uSGFzaE1vZGlmaWVyXxAZWERfUFNLX2ZldGNoUmVxdWVzdHNBcnJheV8QEVhEX1BTS19pc0Fic3RyYWN0XxAPWERfUFNLX3VzZXJJbmZvXxATWERfUFNLX2NsYXNzTWFwcGluZ18QFlhEX1BTS19lbnRpdHlDbGFzc05hbWXfEA8AjgCPAJAAHQCRAJIAkwAfAJQACgAhAJUAlgAkAJcAEwCZABMAXwBYAFgAWAAtAFgAoABwAFgAWAATAFhVX3R5cGVYX2RlZmF1bHRcX2Fzc29jaWF0aW9uW19pc1JlYWRPbmx5WV9pc1N0YXRpY1lfaXNVbmlxdWVaX2lzRGVyaXZlZFpfaXNPcmRlcmVkXF9pc0NvbXBvc2l0ZVdfaXNMZWFmgACAGIAAgAwICAgIgBqADggIgAAI0gA3AAoApwCooIAZ0gCqAKsArACtWiRjbGFzc25hbWVYJGNsYXNzZXNeTlNNdXRhYmxlQXJyYXmjAKwArgCvV05TQXJyYXlYTlNPYmplY3TSAKoAqwCxALJfEBBYRFVNTFByb3BlcnR5SW1wpACzALQAtQCvXxAQWERVTUxQcm9wZXJ0eUltcF8QFFhEVU1MTmFtZWRFbGVtZW50SW1wXxAPWERVTUxFbGVtZW50SW1w3xAPAI4AjwCQAB0AkQCSAJMAHwCUAAoAIQCVAJYAJACXABMAEwATAF8AWABYAFgALQBYAKAAcQBYAFgAEwBYgACAAIAAgAwICAgIgBqADwgIgAAI3xAPAI4AjwCQAB0AkQCSAJMAHwCUAAoAIQCVAJYAJACXABMAxwATAF8AWABYAFgALQBYAKAAcgBYAFgAEwBYgACAHYAAgAwICAgIgBqAEAgIgAAI0gA3AAoA1QCooIAZ3xAPAI4AjwCQAB0AkQCSAJMAHwCUAAoAIQCVAJYAJACXABMAEwATAF8AWABYAFgALQBYAKAAcwBYAFgAEwBYgACAAIAAgAwICAgIgBqAEQgIgAAI3xAPAI4AjwCQAB0AkQCSAJMAHwCUAAoAIQCVAJYAJACXABMA6AATAF8AWABYAFgALQBYAKAAdABYAFgAEwBYgACAIIAAgAwICAgIgBqAEggIgAAI0gA3AAoA9gCooIAZ3xAPAI4AjwCQAB0AkQCSAJMAHwCUAAoAIQCVAJYAJACXABMA+gATAF8AWABYAFgALQBYAKAAdQBYAFgAEwBYgACAIoAAgAwICAgIgBqAEwgIgAAICN8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATAQoAEwBfAFgAWABYAC0AWACgAHYAWABYABMAWIAAgCSAAIAMCAgICIAagBQICIAACNMANgA3AAoBGAEZADygoIAl0gCqAKsBHAEdXxATTlNNdXRhYmxlRGljdGlvbmFyeaMBHAEeAK9cTlNEaWN0aW9uYXJ53xAPAI4AjwCQAB0AkQCSAJMAHwCUAAoAIQCVAJYAJACXABMBIQATAF8AWABYAFgALQBYAKAAdwBYAFgAEwBYgACAJ4AAgAwICAgIgBqAFQgIgAAI1gAhAAoAJABJAB0AHwEvATAAEwBYABMALYAogCmAAAiAAF8QFFhER2VuZXJpY1JlY29yZENsYXNz0gCqAKsBNgE3XVhEVU1MQ2xhc3NJbXCmATgBOQE6ATsBPACvXVhEVU1MQ2xhc3NJbXBfEBJYRFVNTENsYXNzaWZpZXJJbXBfEBFYRFVNTE5hbWVzcGFjZUltcF8QFFhEVU1MTmFtZWRFbGVtZW50SW1wXxAPWERVTUxFbGVtZW50SW1w3xAPAI4AjwCQAB0AkQCSAJMAHwCUAAoAIQCVAJYAJACXABMBPwATAF8AWABYAFgALQBYAKAAeABYAFgAEwBYgACAK4AAgAwICAgIgBqAFggIgAAIXxAYQ29yZVN0b3JlRGVtby5PcmdhbmlzbVYy0gCqAKsBTgFPXxASWERVTUxTdGVyZW90eXBlSW1wpwFQAVEBUgFTAVQBVQCvXxASWERVTUxTdGVyZW90eXBlSW1wXVhEVU1MQ2xhc3NJbXBfEBJYRFVNTENsYXNzaWZpZXJJbXBfEBFYRFVNTE5hbWVzcGFjZUltcF8QFFhEVU1MTmFtZWRFbGVtZW50SW1wXxAPWERVTUxFbGVtZW50SW1w0wA2ADcACgFXAVsAPKMBWAFZAVqALoAvgDCjAVwBXQFegDGAW4BygCVXaGFzSGVhZFdoYXNUYWlsXxAQbnVtYmVyT2ZGbGlwcGVyc98QEgCOAI8AkAFkAB0AkgCTAWUAHwCRAWYAlAAKACEAlQCWACQAlwATABMAEwAlADsAWABYAW4ALQBYAEoAWAFyAVgAWABYAXYAWF8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgAcICIAzCIAJCIBagC4ICIAyCBImhXLB0wA2ADcACgF6AX0APKIBewF8gDSANaIBfgF/gDaASYAlXxASWERfUFByb3BTdGVyZW90eXBlXxASWERfUEF0dF9TdGVyZW90eXBl2QAdACEBhAAKACQBhQAfAEkBhgFcAXsASgBpABMAJQAtAFgBjl8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYAxgDSACYAsgACABAiAN9MANgA3AAoBkAGZADyoAZEBkgGTAZQBlQGWAZcBmIA4gDmAOoA7gDyAPYA+gD+oAZoBmwGcAZ0BngGfAaABoYBAgEGAQoBEgEWARoBHgEiAJV8QG1hEX1BQU0tfaXNTdG9yZWRJblRydXRoRmlsZV8QG1hEX1BQU0tfdmVyc2lvbkhhc2hNb2RpZmllcl8QEFhEX1BQU0tfdXNlckluZm9fEBFYRF9QUFNLX2lzSW5kZXhlZF8QElhEX1BQU0tfaXNPcHRpb25hbF8QGlhEX1BQU0tfaXNTcG90bGlnaHRJbmRleGVkXxARWERfUFBTS19lbGVtZW50SURfEBNYRF9QUFNLX2lzVHJhbnNpZW503xAPAI4AjwCQAB0AkQCSAJMAHwCUAAoAIQCVAJYAJACXABMA+gATAX4AWABYAFgALQBYAKABkQBYAFgAEwBYgACAIoAAgDYICAgIgBqAOAgIgAAI3xAPAI4AjwCQAB0AkQCSAJMAHwCUAAoAIQCVAJYAJACXABMAEwATAX4AWABYAFgALQBYAKABkgBYAFgAEwBYgACAAIAAgDYICAgIgBqAOQgIgAAI3xAPAI4AjwCQAB0AkQCSAJMAHwCUAAoAIQCVAJYAJACXABMBywATAX4AWABYAFgALQBYAKABkwBYAFgAEwBYgACAQ4AAgDYICAgIgBqAOggIgAAI0wA2ADcACgHZAdoAPKCggCXfEA8AjgCPAJAAHQCRAJIAkwAfAJQACgAhAJUAlgAkAJcAEwD6ABMBfgBYAFgAWAAtAFgAoAGUAFgAWAATAFiAAIAigACANggICAiAGoA7CAiAAAjfEA8AjgCPAJAAHQCRAJIAkwAfAJQACgAhAJUAlgAkAJcAEwD6ABMBfgBYAFgAWAAtAFgAoAGVAFgAWAATAFiAAIAigACANggICAiAGoA8CAiAAAjfEA8AjgCPAJAAHQCRAJIAkwAfAJQACgAhAJUAlgAkAJcAEwD6ABMBfgBYAFgAWAAtAFgAoAGWAFgAWAATAFiAAIAigACANggICAiAGoA9CAiAAAjfEA8AjgCPAJAAHQCRAJIAkwAfAJQACgAhAJUAlgAkAJcAEwATABMBfgBYAFgAWAAtAFgAoAGXAFgAWAATAFiAAIAAgACANggICAiAGoA+CAiAAAjfEA8AjgCPAJAAHQCRAJIAkwAfAJQACgAhAJUAlgAkAJcAEwD6ABMBfgBYAFgAWAAtAFgAoAGYAFgAWAATAFiAAIAigACANggICAiAGoA/CAiAAAjZAB0AIQIoAAoAJAIpAB8ASQIqAVwBfABKAGkAEwAlAC0AWAIyXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgDGANYAJgCyAAIAECIBK0wA2ADcACgI0AjwAPKcCNQI2AjcCOAI5AjoCO4BLgEyATYBOgE+AUIBRpwI9Aj4CPwJAAkECQgJDgFKAU4BUgFWAV4BYgFmAJV8QHVhEX1BBdHRLX2RlZmF1bHRWYWx1ZUFzU3RyaW5nXxAoWERfUEF0dEtfYWxsb3dzRXh0ZXJuYWxCaW5hcnlEYXRhU3RvcmFnZV8QF1hEX1BBdHRLX21pblZhbHVlU3RyaW5nXxAWWERfUEF0dEtfYXR0cmlidXRlVHlwZV8QF1hEX1BBdHRLX21heFZhbHVlU3RyaW5nXxAdWERfUEF0dEtfdmFsdWVUcmFuc2Zvcm1lck5hbWVfECBYRF9QQXR0S19yZWd1bGFyRXhwcmVzc2lvblN0cmluZ98QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATABMAEwF/AFgAWABYAC0AWACgAjUAWABYABMAWIAAgACAAIBJCAgICIAagEsICIAACN8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATAPoAEwF/AFgAWABYAC0AWACgAjYAWABYABMAWIAAgCKAAIBJCAgICIAagEwICIAACN8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATABMAEwF/AFgAWABYAC0AWACgAjcAWABYABMAWIAAgACAAIBJCAgICIAagE0ICIAACN8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATAnsAEwF/AFgAWABYAC0AWACgAjgAWABYABMAWIAAgFaAAIBJCAgICIAagE4ICIAACBEDIN8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATABMAEwF/AFgAWABYAC0AWACgAjkAWABYABMAWIAAgACAAIBJCAgICIAagE8ICIAACN8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATABMAEwF/AFgAWABYAC0AWACgAjoAWABYABMAWIAAgACAAIBJCAgICIAagFAICIAACN8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATABMAEwF/AFgAWABYAC0AWACgAjsAWABYABMAWIAAgACAAIBJCAgICIAagFEICIAACNIAqgCrArcCuF1YRFBNQXR0cmlidXRlpgK5AroCuwK8Ar0Ar11YRFBNQXR0cmlidXRlXFhEUE1Qcm9wZXJ0eV8QEFhEVU1MUHJvcGVydHlJbXBfEBRYRFVNTE5hbWVkRWxlbWVudEltcF8QD1hEVU1MRWxlbWVudEltcN8QEgCOAI8AkAK/AB0AkgCTAsAAHwCRAsEAlAAKACEAlQCWACQAlwATABMAEwAlADsAWABYAskALQBYAEoAWAFyAVkAWABYAtEAWF8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgAcICIBdCIAJCIBagC8ICIBcCBLqY2x60wA2ADcACgLVAtgAPKIBewF8gDSANaIC2QLagF6AaYAl2QAdACEC3QAKACQC3gAfAEkC3wFdAXsASgBpABMAJQAtAFgC518QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYBbgDSACYAsgACABAiAX9MANgA3AAoC6QLyADyoAZEBkgGTAZQBlQGWAZcBmIA4gDmAOoA7gDyAPYA+gD+oAvMC9AL1AvYC9wL4AvkC+oBggGGAYoBkgGWAZoBngGiAJd8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATAPoAEwLZAFgAWABYAC0AWACgAZEAWABYABMAWIAAgCKAAIBeCAgICIAagDgICIAACN8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATABMAEwLZAFgAWABYAC0AWACgAZIAWABYABMAWIAAgACAAIBeCAgICIAagDkICIAACN8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATAxwAEwLZAFgAWABYAC0AWACgAZMAWABYABMAWIAAgGOAAIBeCAgICIAagDoICIAACNMANgA3AAoDKgMrADygoIAl3xAPAI4AjwCQAB0AkQCSAJMAHwCUAAoAIQCVAJYAJACXABMA+gATAtkAWABYAFgALQBYAKABlABYAFgAEwBYgACAIoAAgF4ICAgIgBqAOwgIgAAI3xAPAI4AjwCQAB0AkQCSAJMAHwCUAAoAIQCVAJYAJACXABMA+gATAtkAWABYAFgALQBYAKABlQBYAFgAEwBYgACAIoAAgF4ICAgIgBqAPAgIgAAI3xAPAI4AjwCQAB0AkQCSAJMAHwCUAAoAIQCVAJYAJACXABMA+gATAtkAWABYAFgALQBYAKABlgBYAFgAEwBYgACAIoAAgF4ICAgIgBqAPQgIgAAI3xAPAI4AjwCQAB0AkQCSAJMAHwCUAAoAIQCVAJYAJACXABMAEwATAtkAWABYAFgALQBYAKABlwBYAFgAEwBYgACAAIAAgF4ICAgIgBqAPggIgAAI3xAPAI4AjwCQAB0AkQCSAJMAHwCUAAoAIQCVAJYAJACXABMA+gATAtkAWABYAFgALQBYAKABmABYAFgAEwBYgACAIoAAgF4ICAgIgBqAPwgIgAAI2QAdACEDeQAKACQDegAfAEkDewFdAXwASgBpABMAJQAtAFgDg18QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYBbgDWACYAsgACABAiAatMANgA3AAoDhQONADynAjUCNgI3AjgCOQI6AjuAS4BMgE2AToBPgFCAUacDjgOPA5ADkQOSA5MDlIBrgGyAbYBugG+AcIBxgCXfEA8AjgCPAJAAHQCRAJIAkwAfAJQACgAhAJUAlgAkAJcAEwATABMC2gBYAFgAWAAtAFgAoAI1AFgAWAATAFiAAIAAgACAaQgICAiAGoBLCAiAAAjfEA8AjgCPAJAAHQCRAJIAkwAfAJQACgAhAJUAlgAkAJcAEwD6ABMC2gBYAFgAWAAtAFgAoAI2AFgAWAATAFiAAIAigACAaQgICAiAGoBMCAiAAAjfEA8AjgCPAJAAHQCRAJIAkwAfAJQACgAhAJUAlgAkAJcAEwATABMC2gBYAFgAWAAtAFgAoAI3AFgAWAATAFiAAIAAgACAaQgICAiAGoBNCAiAAAjfEA8AjgCPAJAAHQCRAJIAkwAfAJQACgAhAJUAlgAkAJcAEwJ7ABMC2gBYAFgAWAAtAFgAoAI4AFgAWAATAFiAAIBWgACAaQgICAiAGoBOCAiAAAjfEA8AjgCPAJAAHQCRAJIAkwAfAJQACgAhAJUAlgAkAJcAEwATABMC2gBYAFgAWAAtAFgAoAI5AFgAWAATAFiAAIAAgACAaQgICAiAGoBPCAiAAAjfEA8AjgCPAJAAHQCRAJIAkwAfAJQACgAhAJUAlgAkAJcAEwATABMC2gBYAFgAWAAtAFgAoAI6AFgAWAATAFiAAIAAgACAaQgICAiAGoBQCAiAAAjfEA8AjgCPAJAAHQCRAJIAkwAfAJQACgAhAJUAlgAkAJcAEwATABMC2gBYAFgAWAAtAFgAoAI7AFgAWAATAFiAAIAAgACAaQgICAiAGoBRCAiAAAjfEBIAjgCPAJAEAAAdAJIAkwQBAB8AkQQCAJQACgAhAJUAlgAkAJcAEwATABMAJQA7AFgAWAQKAC0AWABKAFgBcgFaAFgAWAQSAFhfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIAHCAiAdAiACQiAWoAwCAiAcwgSpZwbCtMANgA3AAoEFgQZADyiAXsBfIA0gDWiBBoEG4B1gICAJdkAHQAhBB4ACgAkBB8AHwBJBCABXgF7AEoAaQATACUALQBYBChfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WAcoA0gAmALIAAgAQIgHbTADYANwAKBCoEMwA8qAGRAZIBkwGUAZUBlgGXAZiAOIA5gDqAO4A8gD2APoA/qAQ0BDUENgQ3BDgEOQQ6BDuAd4B4gHmAe4B8gH2AfoB/gCXfEA8AjgCPAJAAHQCRAJIAkwAfAJQACgAhAJUAlgAkAJcAEwD6ABMEGgBYAFgAWAAtAFgAoAGRAFgAWAATAFiAAIAigACAdQgICAiAGoA4CAiAAAjfEA8AjgCPAJAAHQCRAJIAkwAfAJQACgAhAJUAlgAkAJcAEwATABMEGgBYAFgAWAAtAFgAoAGSAFgAWAATAFiAAIAAgACAdQgICAiAGoA5CAiAAAjfEA8AjgCPAJAAHQCRAJIAkwAfAJQACgAhAJUAlgAkAJcAEwRdABMEGgBYAFgAWAAtAFgAoAGTAFgAWAATAFiAAIB6gACAdQgICAiAGoA6CAiAAAjTADYANwAKBGsEbAA8oKCAJd8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATAPoAEwQaAFgAWABYAC0AWACgAZQAWABYABMAWIAAgCKAAIB1CAgICIAagDsICIAACN8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATAPoAEwQaAFgAWABYAC0AWACgAZUAWABYABMAWIAAgCKAAIB1CAgICIAagDwICIAACN8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATAPoAEwQaAFgAWABYAC0AWACgAZYAWABYABMAWIAAgCKAAIB1CAgICIAagD0ICIAACN8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATABMAEwQaAFgAWABYAC0AWACgAZcAWABYABMAWIAAgACAAIB1CAgICIAagD4ICIAACN8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATAPoAEwQaAFgAWABYAC0AWACgAZgAWABYABMAWIAAgCKAAIB1CAgICIAagD8ICIAACNkAHQAhBLoACgAkBLsAHwBJBLwBXgF8AEoAaQATACUALQBYBMRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WAcoA1gAmALIAAgAQIgIHTADYANwAKBMYEzgA8pwI1AjYCNwI4AjkCOgI7gEuATIBNgE6AT4BQgFGnBM8E0ATRBNIE0wTUBNWAgoCEgIWAhoCIgImAioAl3xAPAI4AjwCQAB0AkQCSAJMAHwCUAAoAIQCVAJYAJACXABME2QATBBsAWABYAFgALQBYAKACNQBYAFgAEwBYgACAg4AAgIAICAgIgBqASwgIgAAIUTDfEA8AjgCPAJAAHQCRAJIAkwAfAJQACgAhAJUAlgAkAJcAEwD6ABMEGwBYAFgAWAAtAFgAoAI2AFgAWAATAFiAAIAigACAgAgICAiAGoBMCAiAAAjfEA8AjgCPAJAAHQCRAJIAkwAfAJQACgAhAJUAlgAkAJcAEwATABMEGwBYAFgAWAAtAFgAoAI3AFgAWAATAFiAAIAAgACAgAgICAiAGoBNCAiAAAjfEA8AjgCPAJAAHQCRAJIAkwAfAJQACgAhAJUAlgAkAJcAEwUHABMEGwBYAFgAWAAtAFgAoAI4AFgAWAATAFiAAICHgACAgAgICAiAGoBOCAiAAAgQyN8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATABMAEwQbAFgAWABYAC0AWACgAjkAWABYABMAWIAAgACAAICACAgICIAagE8ICIAACN8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATABMAEwQbAFgAWABYAC0AWACgAjoAWABYABMAWIAAgACAAICACAgICIAagFAICIAACN8QDwCOAI8AkAAdAJEAkgCTAB8AlAAKACEAlQCWACQAlwATABMAEwQbAFgAWABYAC0AWACgAjsAWABYABMAWIAAgACAAICACAgICIAagFEICIAACFpkdXBsaWNhdGVz0gA3AAoFRACooIAZ0gCqAKsFRwVIWlhEUE1FbnRpdHmnBUkFSgVLBUwFTQVOAK9aWERQTUVudGl0eV1YRFVNTENsYXNzSW1wXxASWERVTUxDbGFzc2lmaWVySW1wXxARWERVTUxOYW1lc3BhY2VJbXBfEBRYRFVNTE5hbWVkRWxlbWVudEltcF8QD1hEVU1MRWxlbWVudEltcNMANgA3AAoFUAVRADygoIAl0wA2ADcACgVUBVUAPKCggCXTADYANwAKBVgFWQA8oKCAJdIAqgCrBVwFXV5YRE1vZGVsUGFja2FnZaYFXgVfBWAFYQViAK9eWERNb2RlbFBhY2thZ2VfEA9YRFVNTFBhY2thZ2VJbXBfEBFYRFVNTE5hbWVzcGFjZUltcF8QFFhEVU1MTmFtZWRFbGVtZW50SW1wXxAPWERVTUxFbGVtZW50SW1w0gA3AAoFZACooIAZ0wA2ADcACgVnBWgAPKCggCVQ0gCqAKsFbAVtWVhEUE1Nb2RlbKMFbAVuAK9XWERNb2RlbF8QD05TS2V5ZWRBcmNoaXZlctEFcQAoVHJvb3SAAQAIABkAIgArADUAOgA/AW4BdAGRAaMBqgG3AcoB4gHwAgoCDAIOAhACEgIUAhYCGAJRAnACjQKsAr4C3gLlAwMDDwMrAzEDUwN0A4cDiQOLA40DjwORA5MDlQOXA5kDmwOdA58DoQOjA6QDqAO1A70DyAPLA80D0APSA9QD3QQgBEQEaASLBLIE0gT5BSAFQAVkBYgFlAWWBZgFmgWcBZ4FoAWiBaQFpgWoBaoFrAWuBbAFsQW2Bb4FywXOBdAF0wXVBdcF5gYLBi8GVgZ6BnwGfgaABoIGhAaGBocGiQaWBqkGqwatBq8GsQazBrUGtwa5BrsGzgbQBtIG1AbWBtgG2gbcBt4G4AbiBvgHCwcnB0QHYAd0B4YHnAe1B/QH+ggDCBAIHAgmCDAIOwhGCFMIWwhdCF8IYQhjCGQIZQhmCGcIaQhrCGwIbQhvCHAIeQh6CHwIhQiQCJkIqAivCLcIwAjJCNwI5Qj4CQ8JIQlgCWIJZAlmCWgJaQlqCWsJbAluCXAJcQlyCXQJdQm0CbYJuAm6CbwJvQm+Cb8JwAnCCcQJxQnGCcgJyQnSCdMJ1QoUChYKGAoaChwKHQoeCh8KIAoiCiQKJQomCigKKQpoCmoKbApuCnAKcQpyCnMKdAp2CngKeQp6CnwKfQqGCocKiQrICsoKzArOCtAK0QrSCtMK1ArWCtgK2QraCtwK3QreCx0LHwshCyMLJQsmCycLKAspCysLLQsuCy8LMQsyCz8LQAtBC0MLTAtiC2kLdgu1C7cLuQu7C70Lvgu/C8ALwQvDC8ULxgvHC8kLygvjC+UL5wvpC+oL7AwDDAwMGgwnDDUMSgxeDHUMhwzGDMgMygzMDM4MzwzQDNEM0gzUDNYM1wzYDNoM2wz2DP8NFA0jDTgNRg1bDW8Nhg2YDaUNrA2uDbANsg25DbsNvQ2/DcENyQ3RDeQOLw5SDnIOkg6UDpYOmA6aDpwOnQ6eDqAOoQ6jDqQOpg6oDqkOqg6sDq0Osg6/DsQOxg7IDs0Ozw7RDtMO6A79DyIPRg9tD5EPkw+VD5cPmQ+bD50Png+gD60Pvg/AD8IPxA/GD8gPyg/MD84P3w/hD+MP5Q/nD+kP6w/tD+8P8RAPEC0QQBBUEGkQhhCaELAQ7xDxEPMQ9RD3EPgQ+RD6EPsQ/RD/EQARAREDEQQRQxFFEUcRSRFLEUwRTRFOEU8RURFTEVQRVRFXEVgRlxGZEZsRnRGfEaARoRGiEaMRpRGnEagRqRGrEawRuRG6EbsRvRH8Ef4SABICEgQSBRIGEgcSCBIKEgwSDRIOEhASERJQElISVBJWElgSWRJaElsSXBJeEmASYRJiEmQSZRKkEqYSqBKqEqwSrRKuEq8SsBKyErQStRK2ErgSuRL4EvoS/BL+EwATARMCEwMTBBMGEwgTCRMKEwwTDRNME04TUBNSE1QTVRNWE1cTWBNaE1wTXRNeE2ATYROGE6oT0RP1E/cT+RP7E/0T/xQBFAIUBBQRFCAUIhQkFCYUKBQqFCwULhQ9FD8UQRRDFEUURxRJFEsUTRRtFJgUshTLFOUVBRUoFWcVaRVrFW0VbxVwFXEVchVzFXUVdxV4FXkVexV8FbsVvRW/FcEVwxXEFcUVxhXHFckVyxXMFc0VzxXQFg8WERYTFhUWFxYYFhkWGhYbFh0WHxYgFiEWIxYkFmMWZRZnFmkWaxZsFm0WbhZvFnEWcxZ0FnUWdxZ4FnsWuha8Fr4WwBbCFsMWxBbFFsYWyBbKFssWzBbOFs8XDhcQFxIXFBcWFxcXGBcZFxoXHBceFx8XIBciFyMXYhdkF2YXaBdqF2sXbBdtF24XcBdyF3MXdBd2F3cXgBeOF5sXqRe2F8kX4BfyGD0YYBiAGKAYohikGKYYqBiqGKsYrBiuGK8YsRiyGLQYthi3GLgYuhi7GMAYzRjSGNQY1hjbGN0Y3xjhGQYZKhlRGXUZdxl5GXsZfRl/GYEZghmEGZEZohmkGaYZqBmqGawZrhmwGbIZwxnFGccZyRnLGc0ZzxnRGdMZ1RoUGhYaGBoaGhwaHRoeGh8aIBoiGiQaJRomGigaKRpoGmoabBpuGnAacRpyGnMadBp2GngaeRp6GnwafRq8Gr4awBrCGsQaxRrGGscayBrKGswazRrOGtAa0RreGt8a4BriGyEbIxslGycbKRsqGysbLBstGy8bMRsyGzMbNRs2G3Ubdxt5G3sbfRt+G38bgBuBG4MbhRuGG4cbiRuKG8kbyxvNG88b0RvSG9Mb1BvVG9cb2RvaG9sb3RveHB0cHxwhHCMcJRwmHCccKBwpHCscLRwuHC8cMRwyHHEccxx1HHcceRx6HHscfBx9HH8cgRyCHIMchRyGHKsczxz2HRodHB0eHSAdIh0kHSYdJx0pHTYdRR1HHUkdSx1NHU8dUR1THWIdZB1mHWgdah1sHW4dcB1yHbEdsx21HbcduR26HbsdvB29Hb8dwR3CHcMdxR3GHgUeBx4JHgseDR4OHg8eEB4RHhMeFR4WHhceGR4aHlkeWx5dHl8eYR5iHmMeZB5lHmceaR5qHmsebR5uHq0erx6xHrMetR62HrceuB65HrsevR6+Hr8ewR7CHwEfAx8FHwcfCR8KHwsfDB8NHw8fER8SHxMfFR8WH1UfVx9ZH1sfXR9eH18fYB9hH2MfZR9mH2cfaR9qH6kfqx+tH68fsR+yH7MftB+1H7cfuR+6H7sfvR++IAkgLCBMIGwgbiBwIHIgdCB2IHcgeCB6IHsgfSB+IIAggiCDIIQghiCH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BgASAAICmgKgQAIAFgAOABIAEgABQU1lFU9MANgA3AAoAOAA6ADxXTlMua2V5c1pOUy5vYmplY3RzoQA5gAahADuAB4AiWE9yZ2FuaXNt3xAQAD8AQABBAEIAHQBDAEQAHwBFAEYACgAhAEcASAAkAEkASgBLACUAJQAQAE8AUAAtACUASgBTADkASgBWAFcAWF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc2R1cGxpY2F0ZXNfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zc3RvcmFnZVtfaXNBYnN0cmFjdIAJgCqABIAEgAKACoCigASACYCkgAaACYCjgAgIEox4F8pXb3JkZXJlZNMANgA3AAoAXABeADyhAF2AC6EAX4AMgCJeWERfUFN0ZXJlb3R5cGXZAB0AIQBjAAoAJABkAB8ASQBlADsAXQBKAGkAEwAlAC0AWABtXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgAeAC4AJgCmAAIAECIAN0wA2ADcACgBvAHgAPKgAcABxAHIAcwB0AHUAdgB3gA6AD4AQgBGAEoATgBSAFagAeQB6AHsAfAB9AH4AfwCAgBaAGoAbgByAHoAggCOAJ4AiXxATWERQTUNvbXBvdW5kSW5kZXhlc18QEFhEX1BTS19lbGVtZW50SURfEBpYRF9QU0tfdmVyc2l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RExMTFBMVExcTGBM9E2ETiBOsE64TsBOyE7QTthO4E7kTuxPIE9cT2RPbE90T3xPhE+MT5RP0E/YT+BP6E/wT/hQAFAIUBBQkFE8UaRSCFJwUvBTfFR4VIBUiFSQVJhUnFSgVKRUqFSwVLhUvFTAVMhUzFTUVdBV2FXgVehV8FX0VfhV/FYAVghWEFYUVhhWIFYkVyBXKFcwVzhXQFdEV0hXTFdQV1hXYFdkV2hXcFd0WHBYeFiAWIhYkFiUWJhYnFigWKhYsFi0WLhYwFjEWNBZzFnUWdxZ5FnsWfBZ9Fn4WfxaBFoMWhBaFFocWiBbHFskWyxbNFs8W0BbRFtIW0xbVFtcW2BbZFtsW3BcbFx0XHxchFyMXJBclFyYXJxcpFysXLBctFy8XMBc5F0cXVBdiF28XgheZF6sX9hgZGDkYWRhbGF0YXxhhGGMYZBhlGGcYaBhqGGsYbRhvGHAYcRhzGHQYeRiGGIsYjRiPGJQYlhiYGJoYvxjjGQoZLhkwGTIZNBk2GTgZOhk7GT0ZShlbGV0ZXxlhGWMZZRlnGWkZaxl8GX4ZgBmCGYQZhhmIGYoZjBmOGc0ZzxnRGdMZ1RnWGdcZ2BnZGdsZ3RneGd8Z4RniGiEaIxolGicaKRoqGisaLBotGi8aMRoyGjMaNRo2GnUadxp5GnsafRp+Gn8agBqBGoMahRqGGocaiRqKGpcamBqZGpsa2hrcGt4a4BriGuMa5BrlGuYa6BrqGusa7BruGu8bLhswGzIbNBs2GzcbOBs5GzobPBs+Gz8bQBtCG0MbghuEG4YbiBuKG4sbjBuNG44bkBuSG5MblBuWG5cb1hvYG9ob3BveG98b4BvhG+Ib5BvmG+cb6BvqG+scKhwsHC4cMBwyHDMcNBw1HDYcOBw6HDscPBw+HD8cZByIHK8c0xzVHNcc2RzbHN0c3xzgHOIc7xz+HQAdAh0EHQYdCB0KHQwdGx0dHR8dIR0jHSUdJx0pHSsdah1sHW4dcB1yHXMddB11HXYdeB16HXsdfB1+HX8dvh3AHcIdxB3GHccdyB3JHcodzB3OHc8d0B3SHdMeEh4UHhYeGB4aHhseHB4dHh4eIB4iHiMeJB4mHiceZh5oHmoebB5uHm8ecB5xHnIedB52HnceeB56Hnsefh69Hr8ewR7DHsUexh7HHsgeyR7LHs0ezh7PHtEe0h8RHxMfFR8XHxkfGh8bHxwfHR8fHyEfIh8jHyUfJh9lH2cfaR9rH20fbh9vH3AfcR9zH3Ufdh93H3kfeh/FH+ggCCAoICogLCAuIDAgMiAzIDQgNiA3IDkgOiA8ID4gPyBAIEIgQyBMIFkgXiBgIGIgZyBpIGsgbSCSILYg3SEBIQMhBSEHIQkhCyENIQ4hECEdIS4hMCEyITQhNiE4ITohPCE+IU8hUSFTIVUhVyFZIVshXSFfIWEhoCGiIaQhpiGoIakhqiGrIawhriGwIbEhsiG0IbUh9CH2Ifgh+iH8If0h/iH/IgAiAiIEIgUiBiIIIgkiSCJKIkwiTiJQIlEiUiJTIlQiViJYIlkiWiJcIl0iaiJrImwibiKtIq8isSKzIrUitiK3IrgiuSK7Ir0iviK/IsEiwiMBIwMjBSMHIwkjCiMLIwwjDSMPIxEjEiMTIxUjFiNVI1cjWSNbI10jXiNfI2AjYSNjI2UjZiNnI2kjaiOpI6sjrSOvI7EjsiOzI7QjtSO3I7kjuiO7I70jviP9I/8kASQDJAUkBiQHJAgkCSQLJA0kDiQPJBEkEiQ3JFskgiSmJKgkqiSsJK4ksCSyJLMktSTCJNEk0yTVJNck2STbJN0k3yTuJPAk8iT0JPYk+CT6JPwk/iU9JT8lQSVDJUUlRiVHJUglSSVLJU0lTiVPJVElUiWRJZMllSWXJZklmiWbJZwlnSWfJaEloiWjJaUlpiXlJecl6SXrJe0l7iXvJfAl8SXzJfUl9iX3Jfkl+iY5JjsmPSY/JkEmQiZDJkQmRSZHJkkmSiZLJk0mTiZQJo8mkSaTJpUmlyaYJpkmmiabJp0mnyagJqEmoyakJuMm5SbnJukm6ybsJu0m7ibvJvEm8yb0JvUm9yb4JzcnOSc7Jz0nPydAJ0EnQidDJ0UnRydIJ0knSydMJ5cnuifaJ/on/Cf+KAAoAigEKAUoBigIKAkoCygMKA4oECgRKBIoFCgVKBooJygsKC4oMCg1KDcoOSg7KGAohCirKM8o0SjTKNUo1yjZKNso3CjeKOso/Cj+KQApAikEKQYpCCkKKQwpHSkfKSEpIyklKScpKSkrKS0pLyluKXApcil0KXYpdyl4KXkpeil8KX4pfymAKYIpgynCKcQpxinIKcopyynMKc0pzinQKdIp0ynUKdYp1yoWKhgqGiocKh4qHyogKiEqIiokKiYqJyooKioqKyo4KjkqOio8KnsqfSp/KoEqgyqEKoUqhiqHKokqiyqMKo0qjyqQKs8q0SrTKtUq1yrYKtkq2irbKt0q3yrgKuEq4yrkKyMrJSsnKykrKyssKy0rLisvKzErMys0KzUrNys4K3creSt7K30rfyuAK4ErgiuDK4UrhyuIK4kriyuMK8srzSvPK9Er0yvUK9Ur1ivXK9kr2yvcK90r3yvgLAUsKSxQLHQsdix4LHosfCx+LIAsgSyDLJAsnyyhLKMspSynLKksqyytLLwsvizALMIsxCzGLMgsyizMLQstDS0PLREtEy0ULRUtFi0XLRktGy0cLR0tHy0gLV8tYS1jLWUtZy1oLWktai1rLW0tby1wLXEtcy10LbMttS23Lbktuy28Lb0tvi2/LcEtwy3ELcUtxy3ILgcuCS4LLg0uDy4QLhEuEi4TLhUuFy4YLhkuGy4cLlsuXS5fLmEuYy5kLmUuZi5nLmkuay5sLm0uby5wLq8usS6zLrUuty64Lrkuui67Lr0uvy7ALsEuwy7ELwMvBS8HLwkvCy8MLw0vDi8PLxEvEy8ULxUvFy8YLyMvLC8tLy8vOC9DL1IvXS9rL4AvlC+rL70vyi/LL8wvzi/bL9wv3S/fL+wv7S/uL/Av+TAIMBUwJDA2MEowYTBzMHwwfTB/MIwwjTCOMJAwkTCaMKQwqzCzMMUwyjDPAAAAAAAAAgIAAAAAAAAGpAAAAAAAAAAAAAAAAAAAMNE= @@ -62,7 +62,7 @@ cBIAAYagrxCWAAcACAAXADMANAA1AD0APgBZAFoAWwBhAGIAbgCEAIUAhgCHAIgAiQCKAIsAjACNAKYA Organism 1 - + @@ -80,4 +80,8 @@ CBMUGRoiJywtMjZVJG51bGzVCQoLDA0ODxAREllOU09wZXJhbmReTlNTZWxlY3Rvck5hbWVfEBBOU0V4 hasHead + + dna + + \ No newline at end of file diff --git a/CoreStoreDemo/CoreStoreDemo/MigrationDemo.xcdatamodeld/MigrationDemo.xcdatamodel/contents b/CoreStoreDemo/CoreStoreDemo/MigrationDemo.xcdatamodeld/MigrationDemo.xcdatamodel/contents index a6e01b0..b1f5a2e 100644 --- a/CoreStoreDemo/CoreStoreDemo/MigrationDemo.xcdatamodeld/MigrationDemo.xcdatamodel/contents +++ b/CoreStoreDemo/CoreStoreDemo/MigrationDemo.xcdatamodeld/MigrationDemo.xcdatamodel/contents @@ -1,10 +1,11 @@ - + + - + \ No newline at end of file diff --git a/CoreStoreDemo/CoreStoreDemo/MigrationDemo.xcdatamodeld/MigrationDemoV2.xcdatamodel/contents b/CoreStoreDemo/CoreStoreDemo/MigrationDemo.xcdatamodeld/MigrationDemoV2.xcdatamodel/contents index bf4af5b..dd6f661 100644 --- a/CoreStoreDemo/CoreStoreDemo/MigrationDemo.xcdatamodeld/MigrationDemoV2.xcdatamodel/contents +++ b/CoreStoreDemo/CoreStoreDemo/MigrationDemo.xcdatamodeld/MigrationDemoV2.xcdatamodel/contents @@ -1,11 +1,12 @@ - + + - + \ No newline at end of file diff --git a/CoreStoreDemo/CoreStoreDemo/MigrationDemo.xcdatamodeld/MigrationDemoV3.xcdatamodel/contents b/CoreStoreDemo/CoreStoreDemo/MigrationDemo.xcdatamodeld/MigrationDemoV3.xcdatamodel/contents index 9161474..48509e6 100644 --- a/CoreStoreDemo/CoreStoreDemo/MigrationDemo.xcdatamodeld/MigrationDemoV3.xcdatamodel/contents +++ b/CoreStoreDemo/CoreStoreDemo/MigrationDemo.xcdatamodeld/MigrationDemoV3.xcdatamodel/contents @@ -1,12 +1,13 @@ - + + - + \ No newline at end of file diff --git a/CoreStoreDemo/CoreStoreDemo/Stack Setup Demo/StackSetupDemoViewController.swift b/CoreStoreDemo/CoreStoreDemo/Stack Setup Demo/StackSetupDemoViewController.swift index 88a1681..6f903c8 100644 --- a/CoreStoreDemo/CoreStoreDemo/Stack Setup Demo/StackSetupDemoViewController.swift +++ b/CoreStoreDemo/CoreStoreDemo/Stack Setup Demo/StackSetupDemoViewController.swift @@ -18,12 +18,12 @@ private struct Static { static let facebookStack: DataStack = { let dataStack = DataStack(modelName: "StackSetupDemo") - dataStack.addSQLiteStoreAndWait( + try! dataStack.addSQLiteStoreAndWait( fileName: "AccountsDemo_FB_Male.sqlite", configuration: maleConfiguration, resetStoreOnMigrationFailure: true ) - dataStack.addSQLiteStoreAndWait( + try! dataStack.addSQLiteStoreAndWait( fileName: "AccountsDemo_FB_Female.sqlite", configuration: femaleConfiguration, resetStoreOnMigrationFailure: true @@ -52,12 +52,12 @@ private struct Static { static let twitterStack: DataStack = { let dataStack = DataStack(modelName: "StackSetupDemo") - dataStack.addSQLiteStoreAndWait( + try! dataStack.addSQLiteStoreAndWait( fileName: "AccountsDemo_TW_Male.sqlite", configuration: maleConfiguration, resetStoreOnMigrationFailure: true ) - dataStack.addSQLiteStoreAndWait( + try! dataStack.addSQLiteStoreAndWait( fileName: "AccountsDemo_TW_Female.sqlite", configuration: femaleConfiguration, resetStoreOnMigrationFailure: true diff --git a/CoreStoreDemo/CoreStoreDemo/Transactions Demo/TransactionsDemoViewController.swift b/CoreStoreDemo/CoreStoreDemo/Transactions Demo/TransactionsDemoViewController.swift index d605ac3..95aa443 100644 --- a/CoreStoreDemo/CoreStoreDemo/Transactions Demo/TransactionsDemoViewController.swift +++ b/CoreStoreDemo/CoreStoreDemo/Transactions Demo/TransactionsDemoViewController.swift @@ -18,7 +18,7 @@ private struct Static { static let placeController: ObjectMonitor = { - CoreStore.addSQLiteStoreAndWait( + try! CoreStore.addSQLiteStoreAndWait( fileName: "PlaceDemo.sqlite", configuration: "TransactionsDemo", resetStoreOnMigrationFailure: true diff --git a/CoreStoreTests/CoreStoreTests.swift b/CoreStoreTests/CoreStoreTests.swift index 5c124e9..6520018 100644 --- a/CoreStoreTests/CoreStoreTests.swift +++ b/CoreStoreTests/CoreStoreTests.swift @@ -47,22 +47,22 @@ class CoreStoreTests: XCTestCase { CoreStore.defaultStack = stack XCTAssert(CoreStore.defaultStack === stack, "CoreStore.defaultStack === stack") - switch stack.addSQLiteStoreAndWait(fileName: "ConfigStore1.sqlite", configuration: "Config1", resetStoreOnMigrationFailure: true){ + do { + + try stack.addSQLiteStoreAndWait(fileName: "ConfigStore1.sqlite", configuration: "Config1", resetStoreOnMigrationFailure: true) + } + catch let error as NSError { - case .Failure(let error): XCTFail(error.description) - - default: - break } - switch stack.addSQLiteStoreAndWait(fileName: "ConfigStore2.sqlite", configuration: "Config2", resetStoreOnMigrationFailure: true){ + do { + + try stack.addSQLiteStoreAndWait(fileName: "ConfigStore2.sqlite", configuration: "Config2", resetStoreOnMigrationFailure: true) + } + catch let error as NSError { - case .Failure(let error): XCTFail(error.description) - - default: - break } let detachedTransaction = CoreStore.beginDetached() diff --git a/README.md b/README.md index 3701140..6fbf1dc 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,12 @@ I wrote this library when Swift was made public, and CoreStore is now a powerhou Quick-setup: ```swift -CoreStore.addSQLiteStoreAndWait(fileName: "MyStore.sqlite") +do { + try CoreStore.addSQLiteStoreAndWait(fileName: "MyStore.sqlite") +} +catch { + // ... +} ``` Simple transactions: @@ -131,7 +136,12 @@ This allows for a butter-smooth main thread, while still taking advantage of saf ## Setting up The simplest way to initialize CoreStore is to add a default store to the default stack: ```swift -CoreStore.addSQLiteStoreAndWait() +do { + try CoreStore.addSQLiteStoreAndWait() +} +catch { + // ... +} ``` This one-liner does the following: - Triggers the lazy-initialization of `CoreStore.defaultStack` with a default `DataStack` @@ -143,21 +153,24 @@ For most cases, this configuration is usable as it is. But for more hardcore set ```swift let dataStack = DataStack(modelName: "MyModel") // loads from the "MyModel.xcdatamodeld" file -switch dataStack.addInMemoryStore(configuration: "Config1") { // creates an in-memory store with entities from the "Config1" configuration in the .xcdatamodeld file -case .Success(let persistentStore): // persistentStore is an NSPersistentStore instance +do { + // creates an in-memory store with entities from the "Config1" configuration in the .xcdatamodeld file + let persistentStore = try dataStack.addInMemoryStore(configuration: "Config1") // persistentStore is an NSPersistentStore instance print("Successfully created an in-memory store: \(persistentStore)" -case .Failure(let error): // error is an NSError instance +} +catch let error as NSError { print("Failed creating an in-memory store with error: \(error.description)" } -switch dataStack.addSQLiteStoreAndWait( - fileURL: sqliteFileURL, // set the target file URL for the sqlite file - configuration: "Config2", // use entities from the "Config2" configuration in the .xcdatamodeld file - automigrating: true, // automatically run lightweight migrations or entity policy migrations when needed - resetStoreOnMigrationFailure: true) { // delete and recreate the sqlite file when migration conflicts occur (useful when debugging) -case .Success(let persistentStore): // persistentStore is an NSPersistentStore instance +do { + try dataStack.addSQLiteStoreAndWait( + fileURL: sqliteFileURL, // set the target file URL for the sqlite file + configuration: "Config2", // use entities from the "Config2" configuration in the .xcdatamodeld file + automigrating: true, // automatically run lightweight migrations or entity policy migrations when needed + resetStoreOnMigrationFailure: true) print("Successfully created an sqlite store: \(persistentStore)" -case .Failure(let error): // error is an NSError instance +} +catch let error as NSError { print("Failed creating an sqlite store with error: \(error.description)" } @@ -173,7 +186,11 @@ class MyViewController: UIViewController { let dataStack = DataStack(modelName: "MyModel") override func viewDidLoad() { super.viewDidLoad() - self.dataStack.addSQLiteStoreAndWait() + do { + try self.dataStack.addSQLiteStoreAndWait() + } + catch { // ... + } } func methodToBeCalledLaterOn() { let objects = self.dataStack.fetchAll(From(MyEntity)) @@ -186,7 +203,11 @@ The difference is when you set the stack as the `CoreStore.defaultStack`, you ca class MyViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() - CoreStore.addSQLiteStoreAndWait() + do { + try CoreStore.addSQLiteStoreAndWait() + } + catch { // ... + } } func methodToBeCalledLaterOn() { let objects = CoreStore.fetchAll(From(MyEntity))