From c824ef084c97e051d57e76e7a9bb2ead14378a93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hans=20Kn=C3=B6chel?= Date: Sun, 27 Aug 2023 09:20:58 +0200 Subject: [PATCH] chore: move shared frameworks --- ios/manifest | 2 +- ios/shared/FBLPromises.xcframework/Info.plist | 95 ++++++ .../FBLPromises.framework/FBLPromises | Bin 0 -> 238672 bytes .../Headers/FBLPromise+All.h | 63 ++++ .../Headers/FBLPromise+Always.h | 54 +++ .../Headers/FBLPromise+Any.h | 69 ++++ .../Headers/FBLPromise+Async.h | 60 ++++ .../Headers/FBLPromise+Await.h | 32 ++ .../Headers/FBLPromise+Catch.h | 59 ++++ .../Headers/FBLPromise+Delay.h | 59 ++++ .../Headers/FBLPromise+Do.h | 55 +++ .../Headers/FBLPromise+Race.h | 62 ++++ .../Headers/FBLPromise+Recover.h | 60 ++++ .../Headers/FBLPromise+Reduce.h | 71 ++++ .../Headers/FBLPromise+Retry.h | 165 +++++++++ .../Headers/FBLPromise+Testing.h | 57 ++++ .../Headers/FBLPromise+Then.h | 63 ++++ .../Headers/FBLPromise+Timeout.h | 57 ++++ .../Headers/FBLPromise+Validate.h | 60 ++++ .../Headers/FBLPromise+Wrap.h | 316 ++++++++++++++++++ .../Headers/FBLPromise.h | 93 ++++++ .../Headers/FBLPromiseError.h | 43 +++ .../Headers/FBLPromises.h | 32 ++ .../Headers/PromisesObjC-umbrella.h | 36 ++ .../FBLPromises.framework/Info.plist | 20 ++ .../Modules/module.modulemap | 5 + .../FBLPromises.framework/FBLPromises | Bin 0 -> 452168 bytes .../Headers/FBLPromise+All.h | 63 ++++ .../Headers/FBLPromise+Always.h | 54 +++ .../Headers/FBLPromise+Any.h | 69 ++++ .../Headers/FBLPromise+Async.h | 60 ++++ .../Headers/FBLPromise+Await.h | 32 ++ .../Headers/FBLPromise+Catch.h | 59 ++++ .../Headers/FBLPromise+Delay.h | 59 ++++ .../Headers/FBLPromise+Do.h | 55 +++ .../Headers/FBLPromise+Race.h | 62 ++++ .../Headers/FBLPromise+Recover.h | 60 ++++ .../Headers/FBLPromise+Reduce.h | 71 ++++ .../Headers/FBLPromise+Retry.h | 165 +++++++++ .../Headers/FBLPromise+Testing.h | 57 ++++ .../Headers/FBLPromise+Then.h | 63 ++++ .../Headers/FBLPromise+Timeout.h | 57 ++++ .../Headers/FBLPromise+Validate.h | 60 ++++ .../Headers/FBLPromise+Wrap.h | 316 ++++++++++++++++++ .../Headers/FBLPromise.h | 93 ++++++ .../Headers/FBLPromiseError.h | 43 +++ .../Headers/FBLPromises.h | 32 ++ .../Headers/PromisesObjC-umbrella.h | 36 ++ .../FBLPromises.framework/Info.plist | 20 ++ .../Modules/module.modulemap | 5 + .../FBLPromises.framework/FBLPromises | Bin 0 -> 449088 bytes .../Headers/FBLPromise+All.h | 63 ++++ .../Headers/FBLPromise+Always.h | 54 +++ .../Headers/FBLPromise+Any.h | 69 ++++ .../Headers/FBLPromise+Async.h | 60 ++++ .../Headers/FBLPromise+Await.h | 32 ++ .../Headers/FBLPromise+Catch.h | 59 ++++ .../Headers/FBLPromise+Delay.h | 59 ++++ .../Headers/FBLPromise+Do.h | 55 +++ .../Headers/FBLPromise+Race.h | 62 ++++ .../Headers/FBLPromise+Recover.h | 60 ++++ .../Headers/FBLPromise+Reduce.h | 71 ++++ .../Headers/FBLPromise+Retry.h | 165 +++++++++ .../Headers/FBLPromise+Testing.h | 57 ++++ .../Headers/FBLPromise+Then.h | 63 ++++ .../Headers/FBLPromise+Timeout.h | 57 ++++ .../Headers/FBLPromise+Validate.h | 60 ++++ .../Headers/FBLPromise+Wrap.h | 316 ++++++++++++++++++ .../Headers/FBLPromise.h | 93 ++++++ .../Headers/FBLPromiseError.h | 43 +++ .../Headers/FBLPromises.h | 32 ++ .../Headers/PromisesObjC-umbrella.h | 36 ++ .../FBLPromises.framework/Info.plist | 20 ++ .../Modules/module.modulemap | 5 + .../FBLPromises.framework/FBLPromises | Bin 0 -> 455280 bytes .../Headers/FBLPromise+All.h | 63 ++++ .../Headers/FBLPromise+Always.h | 54 +++ .../Headers/FBLPromise+Any.h | 69 ++++ .../Headers/FBLPromise+Async.h | 60 ++++ .../Headers/FBLPromise+Await.h | 32 ++ .../Headers/FBLPromise+Catch.h | 59 ++++ .../Headers/FBLPromise+Delay.h | 59 ++++ .../Headers/FBLPromise+Do.h | 55 +++ .../Headers/FBLPromise+Race.h | 62 ++++ .../Headers/FBLPromise+Recover.h | 60 ++++ .../Headers/FBLPromise+Reduce.h | 71 ++++ .../Headers/FBLPromise+Retry.h | 165 +++++++++ .../Headers/FBLPromise+Testing.h | 57 ++++ .../Headers/FBLPromise+Then.h | 63 ++++ .../Headers/FBLPromise+Timeout.h | 57 ++++ .../Headers/FBLPromise+Validate.h | 60 ++++ .../Headers/FBLPromise+Wrap.h | 316 ++++++++++++++++++ .../Headers/FBLPromise.h | 93 ++++++ .../Headers/FBLPromiseError.h | 43 +++ .../Headers/FBLPromises.h | 32 ++ .../Headers/PromisesObjC-umbrella.h | 36 ++ .../FBLPromises.framework/Info.plist | 20 ++ .../Modules/module.modulemap | 5 + .../FBLPromises.framework/FBLPromises | Bin 0 -> 238672 bytes .../Headers/FBLPromise+All.h | 63 ++++ .../Headers/FBLPromise+Always.h | 54 +++ .../Headers/FBLPromise+Any.h | 69 ++++ .../Headers/FBLPromise+Async.h | 60 ++++ .../Headers/FBLPromise+Await.h | 32 ++ .../Headers/FBLPromise+Catch.h | 59 ++++ .../Headers/FBLPromise+Delay.h | 59 ++++ .../Headers/FBLPromise+Do.h | 55 +++ .../Headers/FBLPromise+Race.h | 62 ++++ .../Headers/FBLPromise+Recover.h | 60 ++++ .../Headers/FBLPromise+Reduce.h | 71 ++++ .../Headers/FBLPromise+Retry.h | 165 +++++++++ .../Headers/FBLPromise+Testing.h | 57 ++++ .../Headers/FBLPromise+Then.h | 63 ++++ .../Headers/FBLPromise+Timeout.h | 57 ++++ .../Headers/FBLPromise+Validate.h | 60 ++++ .../Headers/FBLPromise+Wrap.h | 316 ++++++++++++++++++ .../Headers/FBLPromise.h | 93 ++++++ .../Headers/FBLPromiseError.h | 43 +++ .../Headers/FBLPromises.h | 32 ++ .../Headers/PromisesObjC-umbrella.h | 36 ++ .../FBLPromises.framework/Info.plist | 20 ++ .../Modules/module.modulemap | 5 + .../FBLPromises.framework/FBLPromises | Bin 0 -> 449088 bytes .../Headers/FBLPromise+All.h | 63 ++++ .../Headers/FBLPromise+Always.h | 54 +++ .../Headers/FBLPromise+Any.h | 69 ++++ .../Headers/FBLPromise+Async.h | 60 ++++ .../Headers/FBLPromise+Await.h | 32 ++ .../Headers/FBLPromise+Catch.h | 59 ++++ .../Headers/FBLPromise+Delay.h | 59 ++++ .../Headers/FBLPromise+Do.h | 55 +++ .../Headers/FBLPromise+Race.h | 62 ++++ .../Headers/FBLPromise+Recover.h | 60 ++++ .../Headers/FBLPromise+Reduce.h | 71 ++++ .../Headers/FBLPromise+Retry.h | 165 +++++++++ .../Headers/FBLPromise+Testing.h | 57 ++++ .../Headers/FBLPromise+Then.h | 63 ++++ .../Headers/FBLPromise+Timeout.h | 57 ++++ .../Headers/FBLPromise+Validate.h | 60 ++++ .../Headers/FBLPromise+Wrap.h | 316 ++++++++++++++++++ .../Headers/FBLPromise.h | 93 ++++++ .../Headers/FBLPromiseError.h | 43 +++ .../Headers/FBLPromises.h | 32 ++ .../Headers/PromisesObjC-umbrella.h | 36 ++ .../FBLPromises.framework/Info.plist | 20 ++ .../Modules/module.modulemap | 5 + .../project.pbxproj | 10 +- 147 files changed, 9647 insertions(+), 6 deletions(-) create mode 100644 ios/shared/FBLPromises.xcframework/Info.plist create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/FBLPromises create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+All.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Always.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Any.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Async.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Await.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Catch.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Delay.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Do.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Race.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Recover.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Reduce.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Retry.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Testing.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Then.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Timeout.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Validate.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Wrap.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromiseError.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromises.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/PromisesObjC-umbrella.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Info.plist create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Modules/module.modulemap create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/FBLPromises create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+All.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Always.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Any.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Async.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Await.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Catch.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Delay.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Do.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Race.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Recover.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Reduce.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Retry.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Testing.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Then.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Timeout.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Validate.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Wrap.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromiseError.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromises.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/PromisesObjC-umbrella.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Info.plist create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Modules/module.modulemap create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/FBLPromises create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+All.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Always.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Any.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Async.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Await.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Catch.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Delay.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Do.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Race.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Recover.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Reduce.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Retry.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Testing.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Then.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Timeout.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Validate.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Wrap.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromiseError.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromises.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/PromisesObjC-umbrella.h create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Info.plist create mode 100644 ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Modules/module.modulemap create mode 100644 ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/FBLPromises create mode 100644 ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+All.h create mode 100644 ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Always.h create mode 100644 ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Any.h create mode 100644 ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Async.h create mode 100644 ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Await.h create mode 100644 ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Catch.h create mode 100644 ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Delay.h create mode 100644 ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Do.h create mode 100644 ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Race.h create mode 100644 ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Recover.h create mode 100644 ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Reduce.h create mode 100644 ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Retry.h create mode 100644 ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Testing.h create mode 100644 ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Then.h create mode 100644 ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Timeout.h create mode 100644 ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Validate.h create mode 100644 ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Wrap.h create mode 100644 ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise.h create mode 100644 ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromiseError.h create mode 100644 ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromises.h create mode 100644 ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/PromisesObjC-umbrella.h create mode 100644 ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Info.plist create mode 100644 ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Modules/module.modulemap create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/FBLPromises create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+All.h create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Always.h create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Any.h create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Async.h create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Await.h create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Catch.h create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Delay.h create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Do.h create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Race.h create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Recover.h create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Reduce.h create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Retry.h create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Testing.h create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Then.h create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Timeout.h create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Validate.h create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Wrap.h create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise.h create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromiseError.h create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromises.h create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/PromisesObjC-umbrella.h create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Info.plist create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Modules/module.modulemap create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/FBLPromises create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+All.h create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Always.h create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Any.h create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Async.h create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Await.h create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Catch.h create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Delay.h create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Do.h create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Race.h create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Recover.h create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Reduce.h create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Retry.h create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Testing.h create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Then.h create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Timeout.h create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Validate.h create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Wrap.h create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise.h create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromiseError.h create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromises.h create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/PromisesObjC-umbrella.h create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Info.plist create mode 100644 ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Modules/module.modulemap diff --git a/ios/manifest b/ios/manifest index 43fc643..cc5d3b5 100644 --- a/ios/manifest +++ b/ios/manifest @@ -2,7 +2,7 @@ # this is your module manifest and used by Titanium # during compilation, packaging, distribution, etc. # -version: 8.0.0 +version: 8.0.1 apiversion: 2 architectures: arm64 x86_64 description: titanium-firebase-analytics diff --git a/ios/shared/FBLPromises.xcframework/Info.plist b/ios/shared/FBLPromises.xcframework/Info.plist new file mode 100644 index 0000000..86621e8 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/Info.plist @@ -0,0 +1,95 @@ + + + + + AvailableLibraries + + + LibraryIdentifier + ios-arm64_x86_64-simulator + LibraryPath + FBLPromises.framework + SupportedArchitectures + + arm64 + x86_64 + + SupportedPlatform + ios + SupportedPlatformVariant + simulator + + + LibraryIdentifier + tvos-arm64_x86_64-simulator + LibraryPath + FBLPromises.framework + SupportedArchitectures + + arm64 + x86_64 + + SupportedPlatform + tvos + SupportedPlatformVariant + simulator + + + LibraryIdentifier + ios-arm64 + LibraryPath + FBLPromises.framework + SupportedArchitectures + + arm64 + + SupportedPlatform + ios + + + LibraryIdentifier + ios-arm64_x86_64-maccatalyst + LibraryPath + FBLPromises.framework + SupportedArchitectures + + arm64 + x86_64 + + SupportedPlatform + ios + SupportedPlatformVariant + maccatalyst + + + LibraryIdentifier + macos-arm64_x86_64 + LibraryPath + FBLPromises.framework + SupportedArchitectures + + arm64 + x86_64 + + SupportedPlatform + macos + + + LibraryIdentifier + tvos-arm64 + LibraryPath + FBLPromises.framework + SupportedArchitectures + + arm64 + + SupportedPlatform + tvos + + + CFBundlePackageType + XFWK + XCFrameworkFormatVersion + 1.0 + + diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/FBLPromises b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/FBLPromises new file mode 100644 index 0000000000000000000000000000000000000000..0486e5d401012d72474900dd6e3b9f43fca87864 GIT binary patch literal 238672 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%0ACtu>pBcR_VmZ<%JgPTkFB=UG3JQN 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 literal 0 HcmV?d00001 diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+All.h b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+All.h new file mode 100644 index 0000000..9c0090e --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+All.h @@ -0,0 +1,63 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(AllAdditions) + +/** + Wait until all of the given promises are fulfilled. + If one of the given promises is rejected, then the returned promise is rejected with same error. + If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, + it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly. + Promises resolved with `nil` become `NSNull` instances in the resulting array. + + @param promises Promises to wait for. + @return Promise of an array containing the values of input promises in the same order. + */ ++ (FBLPromise *)all:(NSArray *)promises NS_SWIFT_UNAVAILABLE(""); + +/** + Wait until all of the given promises are fulfilled. + If one of the given promises is rejected, then the returned promise is rejected with same error. + If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, + it's implicitly considered a pre-fulfilled or pre-rejected FBLPromise correspondingly. + Promises resolved with `nil` become `NSNull` instances in the resulting array. + + @param queue A queue to dispatch on. + @param promises Promises to wait for. + @return Promise of an array containing the values of input promises in the same order. + */ ++ (FBLPromise *)onQueue:(dispatch_queue_t)queue + all:(NSArray *)promises NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `all` operators. + Usage: FBLPromise.all(@[ ... ]) + */ +@interface FBLPromise(DotSyntax_AllAdditions) + ++ (FBLPromise * (^)(NSArray *))all FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise * (^)(dispatch_queue_t, NSArray *))allOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Always.h b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Always.h new file mode 100644 index 0000000..13000f5 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Always.h @@ -0,0 +1,54 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(AlwaysAdditions) + +typedef void (^FBLPromiseAlwaysWorkBlock)(void) NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block that always executes, no matter if the receiver is rejected or fulfilled. + @return A new pending promise to be resolved with same resolution as the receiver. + */ +- (FBLPromise *)always:(FBLPromiseAlwaysWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to dispatch on. + @param work A block that always executes, no matter if the receiver is rejected or fulfilled. + @return A new pending promise to be resolved with same resolution as the receiver. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + always:(FBLPromiseAlwaysWorkBlock)work NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `always` operators. + Usage: promise.always(^{...}) + */ +@interface FBLPromise(DotSyntax_AlwaysAdditions) + +- (FBLPromise* (^)(FBLPromiseAlwaysWorkBlock))always FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise* (^)(dispatch_queue_t, FBLPromiseAlwaysWorkBlock))alwaysOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Any.h b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Any.h new file mode 100644 index 0000000..82875bf --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Any.h @@ -0,0 +1,69 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(AnyAdditions) + +/** + Waits until all of the given promises are either fulfilled or rejected. + If all promises are rejected, then the returned promise is rejected with same error + as the last one rejected. + If at least one of the promises is fulfilled, the resulting promise is fulfilled with an array of + values or `NSErrors`, matching the original order of fulfilled or rejected promises respectively. + If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, + it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly. + Promises resolved with `nil` become `NSNull` instances in the resulting array. + + @param promises Promises to wait for. + @return Promise of array containing the values or `NSError`s of input promises in the same order. + */ ++ (FBLPromise *)any:(NSArray *)promises NS_SWIFT_UNAVAILABLE(""); + +/** + Waits until all of the given promises are either fulfilled or rejected. + If all promises are rejected, then the returned promise is rejected with same error + as the last one rejected. + If at least one of the promises is fulfilled, the resulting promise is fulfilled with an array of + values or `NSError`s, matching the original order of fulfilled or rejected promises respectively. + If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, + it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly. + Promises resolved with `nil` become `NSNull` instances in the resulting array. + + @param queue A queue to dispatch on. + @param promises Promises to wait for. + @return Promise of array containing the values or `NSError`s of input promises in the same order. + */ ++ (FBLPromise *)onQueue:(dispatch_queue_t)queue + any:(NSArray *)promises NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `any` operators. + Usage: FBLPromise.any(@[ ... ]) + */ +@interface FBLPromise(DotSyntax_AnyAdditions) + ++ (FBLPromise * (^)(NSArray *))any FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise * (^)(dispatch_queue_t, NSArray *))anyOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Async.h b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Async.h new file mode 100644 index 0000000..0588a9e --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Async.h @@ -0,0 +1,60 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(AsyncAdditions) + +typedef void (^FBLPromiseFulfillBlock)(Value __nullable value) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseRejectBlock)(NSError *error) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseAsyncWorkBlock)(FBLPromiseFulfillBlock fulfill, + FBLPromiseRejectBlock reject) NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise and executes `work` block asynchronously. + + @param work A block to perform any operations needed to resolve the promise. + @return A new pending promise. + */ ++ (instancetype)async:(FBLPromiseAsyncWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise and executes `work` block asynchronously on the given queue. + + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @return A new pending promise. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + async:(FBLPromiseAsyncWorkBlock)work NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `async` operators. + Usage: FBLPromise.async(^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) { ... }) + */ +@interface FBLPromise(DotSyntax_AsyncAdditions) + ++ (FBLPromise* (^)(FBLPromiseAsyncWorkBlock))async FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, FBLPromiseAsyncWorkBlock))asyncOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Await.h b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Await.h new file mode 100644 index 0000000..c97a1ba --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Await.h @@ -0,0 +1,32 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + Waits for promise resolution. The current thread blocks until the promise is resolved. + + @param promise Promise to wait for. + @param error Error the promise was rejected with, or `nil` if the promise was fulfilled. + @return Value the promise was fulfilled with. If the promise was rejected, the return value + is always `nil`, but the error out arg is not. + */ +FOUNDATION_EXTERN id __nullable FBLPromiseAwait(FBLPromise *promise, + NSError **error) NS_REFINED_FOR_SWIFT; + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Catch.h b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Catch.h new file mode 100644 index 0000000..a9ff170 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Catch.h @@ -0,0 +1,59 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(CatchAdditions) + +typedef void (^FBLPromiseCatchWorkBlock)(NSError *error) NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise which eventually gets resolved with same resolution as the receiver. + If receiver is rejected, then `reject` block is executed asynchronously. + + @param reject A block to handle the error that receiver was rejected with. + @return A new pending promise. + */ +- (FBLPromise *)catch:(FBLPromiseCatchWorkBlock)reject NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise which eventually gets resolved with same resolution as the receiver. + If receiver is rejected, then `reject` block is executed asynchronously on the given queue. + + @param queue A queue to invoke the `reject` block on. + @param reject A block to handle the error that receiver was rejected with. + @return A new pending promise. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + catch:(FBLPromiseCatchWorkBlock)reject NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `catch` operators. + Usage: promise.catch(^(NSError *error) { ... }) + */ +@interface FBLPromise(DotSyntax_CatchAdditions) + +- (FBLPromise* (^)(FBLPromiseCatchWorkBlock))catch FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise* (^)(dispatch_queue_t, FBLPromiseCatchWorkBlock))catchOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Delay.h b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Delay.h new file mode 100644 index 0000000..557df48 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Delay.h @@ -0,0 +1,59 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(DelayAdditions) + +/** + Creates a new pending promise that fulfills with the same value as `self` after the `delay`, or + rejects with the same error immediately. + + @param interval Time to wait in seconds. + @return A new pending promise that fulfills at least `delay` seconds later than `self`, or rejects + with the same error immediately. + */ +- (FBLPromise *)delay:(NSTimeInterval)interval NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a new pending promise that fulfills with the same value as `self` after the `delay`, or + rejects with the same error immediately. + + @param queue A queue to dispatch on. + @param interval Time to wait in seconds. + @return A new pending promise that fulfills at least `delay` seconds later than `self`, or rejects + with the same error immediately. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + delay:(NSTimeInterval)interval NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `delay` operators. + Usage: promise.delay(...) + */ +@interface FBLPromise(DotSyntax_DelayAdditions) + +- (FBLPromise * (^)(NSTimeInterval))delay FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise * (^)(dispatch_queue_t, NSTimeInterval))delayOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Do.h b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Do.h new file mode 100644 index 0000000..6838e0a --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Do.h @@ -0,0 +1,55 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(DoAdditions) + +typedef id __nullable (^FBLPromiseDoWorkBlock)(void) NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise and executes `work` block asynchronously. + + @param work A block that returns a value or an error used to resolve the promise. + @return A new pending promise. + */ ++ (instancetype)do:(FBLPromiseDoWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise and executes `work` block asynchronously on the given queue. + + @param queue A queue to invoke the `work` block on. + @param work A block that returns a value or an error used to resolve the promise. + @return A new pending promise. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue do:(FBLPromiseDoWorkBlock)work NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `do` operators. + Usage: FBLPromise.doOn(queue, ^(NSError *error) { ... }) + */ +@interface FBLPromise(DotSyntax_DoAdditions) + ++ (FBLPromise * (^)(dispatch_queue_t, FBLPromiseDoWorkBlock))doOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Race.h b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Race.h new file mode 100644 index 0000000..2f67258 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Race.h @@ -0,0 +1,62 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(RaceAdditions) + +/** + Wait until any of the given promises are fulfilled. + If one of the promises is rejected, then the returned promise is rejected with same error. + If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, + it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly. + + @param promises Promises to wait for. + @return A new pending promise to be resolved with the same resolution as the first promise, among + the given ones, which was resolved. + */ ++ (instancetype)race:(NSArray *)promises NS_SWIFT_UNAVAILABLE(""); + +/** + Wait until any of the given promises are fulfilled. + If one of the promises is rejected, then the returned promise is rejected with same error. + If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, + it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly. + + @param queue A queue to dispatch on. + @param promises Promises to wait for. + @return A new pending promise to be resolved with the same resolution as the first promise, among + the given ones, which was resolved. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue race:(NSArray *)promises NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `race` operators. + Usage: FBLPromise.race(@[ ... ]) + */ +@interface FBLPromise(DotSyntax_RaceAdditions) + ++ (FBLPromise * (^)(NSArray *))race FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise * (^)(dispatch_queue_t, NSArray *))raceOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Recover.h b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Recover.h new file mode 100644 index 0000000..bb7df7e --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Recover.h @@ -0,0 +1,60 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(RecoverAdditions) + +typedef id __nullable (^FBLPromiseRecoverWorkBlock)(NSError *error) NS_SWIFT_UNAVAILABLE(""); + +/** + Provides a new promise to recover in case the receiver gets rejected. + + @param recovery A block to handle the error that the receiver was rejected with. + @return A new pending promise to use instead of the rejected one that gets resolved with resolution + returned from `recovery` block. + */ +- (FBLPromise *)recover:(FBLPromiseRecoverWorkBlock)recovery NS_SWIFT_UNAVAILABLE(""); + +/** + Provides a new promise to recover in case the receiver gets rejected. + + @param queue A queue to dispatch on. + @param recovery A block to handle the error that the receiver was rejected with. + @return A new pending promise to use instead of the rejected one that gets resolved with resolution + returned from `recovery` block. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + recover:(FBLPromiseRecoverWorkBlock)recovery NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `recover` operators. + Usage: promise.recover(^id(NSError *error) {...}) + */ +@interface FBLPromise(DotSyntax_RecoverAdditions) + +- (FBLPromise * (^)(FBLPromiseRecoverWorkBlock))recover FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise * (^)(dispatch_queue_t, FBLPromiseRecoverWorkBlock))recoverOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Reduce.h b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Reduce.h new file mode 100644 index 0000000..5bb1eee --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Reduce.h @@ -0,0 +1,71 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(ReduceAdditions) + +typedef id __nullable (^FBLPromiseReducerBlock)(Value __nullable partial, id next) + NS_SWIFT_UNAVAILABLE(""); + +/** + Sequentially reduces a collection of values to a single promise using a given combining block + and the value `self` resolves with as initial value. + + @param items An array of values to process in order. + @param reducer A block to combine an accumulating value and an element of the sequence into + the new accumulating value or a promise resolved with it, to be used in the next + call of the `reducer` or returned to the caller. + @return A new pending promise returned from the last `reducer` invocation. + Or `self` if `items` is empty. + */ +- (FBLPromise *)reduce:(NSArray *)items + combine:(FBLPromiseReducerBlock)reducer NS_SWIFT_UNAVAILABLE(""); + +/** + Sequentially reduces a collection of values to a single promise using a given combining block + and the value `self` resolves with as initial value. + + @param queue A queue to dispatch on. + @param items An array of values to process in order. + @param reducer A block to combine an accumulating value and an element of the sequence into + the new accumulating value or a promise resolved with it, to be used in the next + call of the `reducer` or returned to the caller. + @return A new pending promise returned from the last `reducer` invocation. + Or `self` if `items` is empty. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + reduce:(NSArray *)items + combine:(FBLPromiseReducerBlock)reducer NS_SWIFT_UNAVAILABLE(""); + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `reduce` operators. + Usage: promise.reduce(values, ^id(id partial, id next) { ... }) + */ +@interface FBLPromise(DotSyntax_ReduceAdditions) + +- (FBLPromise * (^)(NSArray *, FBLPromiseReducerBlock))reduce FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise * (^)(dispatch_queue_t, NSArray *, FBLPromiseReducerBlock))reduceOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Retry.h b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Retry.h new file mode 100644 index 0000000..414a17a --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Retry.h @@ -0,0 +1,165 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +/** The default number of retry attempts is 1. */ +FOUNDATION_EXTERN NSInteger const FBLPromiseRetryDefaultAttemptsCount NS_REFINED_FOR_SWIFT; + +/** The default delay interval before making a retry attempt is 1.0 second. */ +FOUNDATION_EXTERN NSTimeInterval const FBLPromiseRetryDefaultDelayInterval NS_REFINED_FOR_SWIFT; + +@interface FBLPromise(RetryAdditions) + +typedef id __nullable (^FBLPromiseRetryWorkBlock)(void) NS_SWIFT_UNAVAILABLE(""); +typedef BOOL (^FBLPromiseRetryPredicateBlock)(NSInteger, NSError *) NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise that fulfills with the same value as the promise returned from `work` + block, which executes asynchronously, or rejects with the same error after all retry attempts have + been exhausted. Defaults to `FBLPromiseRetryDefaultAttemptsCount` attempt(s) on rejection where the + `work` block is retried after a delay of `FBLPromiseRetryDefaultDelayInterval` second(s). + + @param work A block that executes asynchronously on the default queue and returns a value or an + error used to resolve the promise. + @return A new pending promise that fulfills with the same value as the promise returned from `work` + block, or rejects with the same error after all retry attempts have been exhausted. + */ ++ (instancetype)retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise that fulfills with the same value as the promise returned from `work` + block, which executes asynchronously on the given `queue`, or rejects with the same error after all + retry attempts have been exhausted. Defaults to `FBLPromiseRetryDefaultAttemptsCount` attempt(s) on + rejection where the `work` block is retried on the given `queue` after a delay of + `FBLPromiseRetryDefaultDelayInterval` second(s). + + @param queue A queue to invoke the `work` block on. + @param work A block that executes asynchronously on the given `queue` and returns a value or an + error used to resolve the promise. + @return A new pending promise that fulfills with the same value as the promise returned from `work` + block, or rejects with the same error after all retry attempts have been exhausted. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise that fulfills with the same value as the promise returned from `work` + block, which executes asynchronously, or rejects with the same error after all retry attempts have + been exhausted. + + @param count Max number of retry attempts. The `work` block will be executed once if the specified + count is less than or equal to zero. + @param work A block that executes asynchronously on the default queue and returns a value or an + error used to resolve the promise. + @return A new pending promise that fulfills with the same value as the promise returned from `work` + block, or rejects with the same error after all retry attempts have been exhausted. + */ ++ (instancetype)attempts:(NSInteger)count + retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise that fulfills with the same value as the promise returned from `work` + block, which executes asynchronously on the given `queue`, or rejects with the same error after all + retry attempts have been exhausted. + + @param queue A queue to invoke the `work` block on. + @param count Max number of retry attempts. The `work` block will be executed once if the specified + count is less than or equal to zero. + @param work A block that executes asynchronously on the given `queue` and returns a value or an + error used to resolve the promise. + @return A new pending promise that fulfills with the same value as the promise returned from `work` + block, or rejects with the same error after all retry attempts have been exhausted. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + attempts:(NSInteger)count + retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise that fulfills with the same value as the promise returned from `work` + block, which executes asynchronously, or rejects with the same error after all retry attempts have + been exhausted. On rejection, the `work` block is retried after the given delay `interval` and will + continue to retry until the number of specified attempts have been exhausted or will bail early if + the given condition is not met. + + @param count Max number of retry attempts. The `work` block will be executed once if the specified + count is less than or equal to zero. + @param interval Time to wait before the next retry attempt. + @param predicate Condition to check before the next retry attempt. The predicate block provides the + the number of remaining retry attempts and the error that the promise was rejected + with. + @param work A block that executes asynchronously on the default queue and returns a value or an + error used to resolve the promise. + @return A new pending promise that fulfills with the same value as the promise returned from `work` + block, or rejects with the same error after all retry attempts have been exhausted or if + the given condition is not met. + */ ++ (instancetype)attempts:(NSInteger)count + delay:(NSTimeInterval)interval + condition:(nullable FBLPromiseRetryPredicateBlock)predicate + retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise that fulfills with the same value as the promise returned from `work` + block, which executes asynchronously on the given `queue`, or rejects with the same error after all + retry attempts have been exhausted. On rejection, the `work` block is retried after the given + delay `interval` and will continue to retry until the number of specified attempts have been + exhausted or will bail early if the given condition is not met. + + @param queue A queue to invoke the `work` block on. + @param count Max number of retry attempts. The `work` block will be executed once if the specified + count is less than or equal to zero. + @param interval Time to wait before the next retry attempt. + @param predicate Condition to check before the next retry attempt. The predicate block provides the + the number of remaining retry attempts and the error that the promise was rejected + with. + @param work A block that executes asynchronously on the given `queue` and returns a value or an + error used to resolve the promise. + @return A new pending promise that fulfills with the same value as the promise returned from `work` + block, or rejects with the same error after all retry attempts have been exhausted or if + the given condition is not met. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + attempts:(NSInteger)count + delay:(NSTimeInterval)interval + condition:(nullable FBLPromiseRetryPredicateBlock)predicate + retry:(FBLPromiseRetryWorkBlock)work NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise+Retry` operators. + Usage: FBLPromise.retry(^id { ... }) + */ +@interface FBLPromise(DotSyntax_RetryAdditions) + ++ (FBLPromise * (^)(FBLPromiseRetryWorkBlock))retry FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise * (^)(dispatch_queue_t, FBLPromiseRetryWorkBlock))retryOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise * (^)(NSInteger, NSTimeInterval, FBLPromiseRetryPredicateBlock __nullable, + FBLPromiseRetryWorkBlock))retryAgain FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise * (^)(dispatch_queue_t, NSInteger, NSTimeInterval, + FBLPromiseRetryPredicateBlock __nullable, + FBLPromiseRetryWorkBlock))retryAgainOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Testing.h b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Testing.h new file mode 100644 index 0000000..8478ae2 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Testing.h @@ -0,0 +1,57 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + Waits for all scheduled promises blocks. + + @param timeout Maximum time to wait. + @return YES if all promises blocks have completed before the timeout and NO otherwise. + */ +FOUNDATION_EXTERN BOOL FBLWaitForPromisesWithTimeout(NSTimeInterval timeout) NS_REFINED_FOR_SWIFT; + +@interface FBLPromise(TestingAdditions) + +/** + Dispatch group for promises that is typically used to wait for all scheduled blocks. + */ +@property(class, nonatomic, readonly) dispatch_group_t dispatchGroup NS_REFINED_FOR_SWIFT; + +/** + Properties to get the current state of the promise. + */ +@property(nonatomic, readonly) BOOL isPending NS_REFINED_FOR_SWIFT; +@property(nonatomic, readonly) BOOL isFulfilled NS_REFINED_FOR_SWIFT; +@property(nonatomic, readonly) BOOL isRejected NS_REFINED_FOR_SWIFT; + +/** + Value the promise was fulfilled with. + Can be nil if the promise is still pending, was resolved with nil or after it has been rejected. + */ +@property(nonatomic, readonly, nullable) Value value NS_REFINED_FOR_SWIFT; + +/** + Error the promise was rejected with. + Can be nil if the promise is still pending or after it has been fulfilled. + */ +@property(nonatomic, readonly, nullable) NSError *error NS_REFINED_FOR_SWIFT; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Then.h b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Then.h new file mode 100644 index 0000000..32027e6 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Then.h @@ -0,0 +1,63 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(ThenAdditions) + +typedef id __nullable (^FBLPromiseThenWorkBlock)(Value __nullable value) NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise which eventually gets resolved with resolution returned from `work` + block: either value, error or another promise. The `work` block is executed asynchronously only + when the receiver is fulfilled. If receiver is rejected, the returned promise is also rejected with + the same error. + + @param work A block to handle the value that receiver was fulfilled with. + @return A new pending promise to be resolved with resolution returned from the `work` block. + */ +- (FBLPromise *)then:(FBLPromiseThenWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise which eventually gets resolved with resolution returned from `work` + block: either value, error or another promise. The `work` block is executed asynchronously when the + receiver is fulfilled. If receiver is rejected, the returned promise is also rejected with the same + error. + + @param queue A queue to invoke the `work` block on. + @param work A block to handle the value that receiver was fulfilled with. + @return A new pending promise to be resolved with resolution returned from the `work` block. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + then:(FBLPromiseThenWorkBlock)work NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `then` operators. + Usage: promise.then(^id(id value) { ... }) + */ +@interface FBLPromise(DotSyntax_ThenAdditions) + +- (FBLPromise* (^)(FBLPromiseThenWorkBlock))then FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise* (^)(dispatch_queue_t, FBLPromiseThenWorkBlock))thenOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Timeout.h b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Timeout.h new file mode 100644 index 0000000..184ba16 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Timeout.h @@ -0,0 +1,57 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(TimeoutAdditions) + +/** + Waits for a promise with the specified `timeout`. + + @param interval Time to wait in seconds. + @return A new pending promise that gets either resolved with same resolution as the receiver or + rejected with `FBLPromiseErrorCodeTimedOut` error code in `FBLPromiseErrorDomain`. + */ +- (FBLPromise *)timeout:(NSTimeInterval)interval NS_SWIFT_UNAVAILABLE(""); + +/** + Waits for a promise with the specified `timeout`. + + @param queue A queue to dispatch on. + @param interval Time to wait in seconds. + @return A new pending promise that gets either resolved with same resolution as the receiver or + rejected with `FBLPromiseErrorCodeTimedOut` error code in `FBLPromiseErrorDomain`. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + timeout:(NSTimeInterval)interval NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `timeout` operators. + Usage: promise.timeout(...) + */ +@interface FBLPromise(DotSyntax_TimeoutAdditions) + +- (FBLPromise* (^)(NSTimeInterval))timeout FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise* (^)(dispatch_queue_t, NSTimeInterval))timeoutOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Validate.h b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Validate.h new file mode 100644 index 0000000..9dfa2f1 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Validate.h @@ -0,0 +1,60 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(ValidateAdditions) + +typedef BOOL (^FBLPromiseValidateWorkBlock)(Value __nullable value) NS_SWIFT_UNAVAILABLE(""); + +/** + Validates a fulfilled value or rejects the value if it can not be validated. + + @param predicate An expression to validate. + @return A new pending promise that gets either resolved with same resolution as the receiver or + rejected with `FBLPromiseErrorCodeValidationFailure` error code in `FBLPromiseErrorDomain`. + */ +- (FBLPromise *)validate:(FBLPromiseValidateWorkBlock)predicate NS_SWIFT_UNAVAILABLE(""); + +/** + Validates a fulfilled value or rejects the value if it can not be validated. + + @param queue A queue to dispatch on. + @param predicate An expression to validate. + @return A new pending promise that gets either resolved with same resolution as the receiver or + rejected with `FBLPromiseErrorCodeValidationFailure` error code in `FBLPromiseErrorDomain`. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + validate:(FBLPromiseValidateWorkBlock)predicate NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `validate` operators. + Usage: promise.validate(^BOOL(id value) { ... }) + */ +@interface FBLPromise(DotSyntax_ValidateAdditions) + +- (FBLPromise * (^)(FBLPromiseValidateWorkBlock))validate FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise * (^)(dispatch_queue_t, FBLPromiseValidateWorkBlock))validateOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Wrap.h b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Wrap.h new file mode 100644 index 0000000..664e1bb --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise+Wrap.h @@ -0,0 +1,316 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + Different types of completion handlers available to be wrapped with promise. + */ +typedef void (^FBLPromiseCompletion)(void) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseObjectCompletion)(id __nullable) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseErrorCompletion)(NSError* __nullable) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseObjectOrErrorCompletion)(id __nullable, NSError* __nullable) + NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseErrorOrObjectCompletion)(NSError* __nullable, id __nullable) + NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromise2ObjectsOrErrorCompletion)(id __nullable, id __nullable, + NSError* __nullable) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseBoolCompletion)(BOOL) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseBoolOrErrorCompletion)(BOOL, NSError* __nullable) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseIntegerCompletion)(NSInteger) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseIntegerOrErrorCompletion)(NSInteger, NSError* __nullable) + NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseDoubleCompletion)(double) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseDoubleOrErrorCompletion)(double, NSError* __nullable) + NS_SWIFT_UNAVAILABLE(""); + +/** + Provides an easy way to convert methods that use common callback patterns into promises. + */ +@interface FBLPromise(WrapAdditions) + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with `nil` when completion handler is invoked. + */ ++ (instancetype)wrapCompletion:(void (^)(FBLPromiseCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with `nil` when completion handler is invoked. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + wrapCompletion:(void (^)(FBLPromiseCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an object provided by completion handler. + */ ++ (instancetype)wrapObjectCompletion:(void (^)(FBLPromiseObjectCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an object provided by completion handler. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + wrapObjectCompletion:(void (^)(FBLPromiseObjectCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an error provided by completion handler. + If error is `nil`, fulfills with `nil`, otherwise rejects with the error. + */ ++ (instancetype)wrapErrorCompletion:(void (^)(FBLPromiseErrorCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an error provided by completion handler. + If error is `nil`, fulfills with `nil`, otherwise rejects with the error. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + wrapErrorCompletion:(void (^)(FBLPromiseErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an object provided by completion handler if error is `nil`. + Otherwise, rejects with the error. + */ ++ (instancetype)wrapObjectOrErrorCompletion: + (void (^)(FBLPromiseObjectOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an object provided by completion handler if error is `nil`. + Otherwise, rejects with the error. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + wrapObjectOrErrorCompletion:(void (^)(FBLPromiseObjectOrErrorCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an error or object provided by completion handler. If error + is not `nil`, rejects with the error. + */ ++ (instancetype)wrapErrorOrObjectCompletion: + (void (^)(FBLPromiseErrorOrObjectCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an error or object provided by completion handler. If error + is not `nil`, rejects with the error. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + wrapErrorOrObjectCompletion:(void (^)(FBLPromiseErrorOrObjectCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an array of objects provided by completion handler in order + if error is `nil`. Otherwise, rejects with the error. + */ ++ (FBLPromise*)wrap2ObjectsOrErrorCompletion: + (void (^)(FBLPromise2ObjectsOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an array of objects provided by completion handler in order + if error is `nil`. Otherwise, rejects with the error. + */ ++ (FBLPromise*)onQueue:(dispatch_queue_t)queue + wrap2ObjectsOrErrorCompletion:(void (^)(FBLPromise2ObjectsOrErrorCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping YES/NO. + */ ++ (FBLPromise*)wrapBoolCompletion:(void (^)(FBLPromiseBoolCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping YES/NO. + */ ++ (FBLPromise*)onQueue:(dispatch_queue_t)queue + wrapBoolCompletion:(void (^)(FBLPromiseBoolCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping YES/NO when error is `nil`. + Otherwise rejects with the error. + */ ++ (FBLPromise*)wrapBoolOrErrorCompletion: + (void (^)(FBLPromiseBoolOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping YES/NO when error is `nil`. + Otherwise rejects with the error. + */ ++ (FBLPromise*)onQueue:(dispatch_queue_t)queue + wrapBoolOrErrorCompletion:(void (^)(FBLPromiseBoolOrErrorCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping an integer. + */ ++ (FBLPromise*)wrapIntegerCompletion:(void (^)(FBLPromiseIntegerCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping an integer. + */ ++ (FBLPromise*)onQueue:(dispatch_queue_t)queue + wrapIntegerCompletion:(void (^)(FBLPromiseIntegerCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping an integer when error is `nil`. + Otherwise rejects with the error. + */ ++ (FBLPromise*)wrapIntegerOrErrorCompletion: + (void (^)(FBLPromiseIntegerOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping an integer when error is `nil`. + Otherwise rejects with the error. + */ ++ (FBLPromise*)onQueue:(dispatch_queue_t)queue + wrapIntegerOrErrorCompletion:(void (^)(FBLPromiseIntegerOrErrorCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping a double. + */ ++ (FBLPromise*)wrapDoubleCompletion:(void (^)(FBLPromiseDoubleCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping a double. + */ ++ (FBLPromise*)onQueue:(dispatch_queue_t)queue + wrapDoubleCompletion:(void (^)(FBLPromiseDoubleCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping a double when error is `nil`. + Otherwise rejects with the error. + */ ++ (FBLPromise*)wrapDoubleOrErrorCompletion: + (void (^)(FBLPromiseDoubleOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping a double when error is `nil`. + Otherwise rejects with the error. + */ ++ (FBLPromise*)onQueue:(dispatch_queue_t)queue + wrapDoubleOrErrorCompletion:(void (^)(FBLPromiseDoubleOrErrorCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `wrap` operators. + Usage: FBLPromise.wrapCompletion(^(FBLPromiseCompletion handler) {...}) + */ +@interface FBLPromise(DotSyntax_WrapAdditions) + ++ (FBLPromise* (^)(void (^)(FBLPromiseCompletion)))wrapCompletion FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromiseCompletion)))wrapCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseObjectCompletion)))wrapObjectCompletion + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromiseObjectCompletion)))wrapObjectCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseErrorCompletion)))wrapErrorCompletion FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromiseErrorCompletion)))wrapErrorCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseObjectOrErrorCompletion)))wrapObjectOrErrorCompletion + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, + void (^)(FBLPromiseObjectOrErrorCompletion)))wrapObjectOrErrorCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseErrorOrObjectCompletion)))wrapErrorOrObjectCompletion + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, + void (^)(FBLPromiseErrorOrObjectCompletion)))wrapErrorOrObjectCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromise2ObjectsOrErrorCompletion))) + wrap2ObjectsOrErrorCompletion FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromise2ObjectsOrErrorCompletion))) + wrap2ObjectsOrErrorCompletionOn FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseBoolCompletion)))wrapBoolCompletion + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, + void (^)(FBLPromiseBoolCompletion)))wrapBoolCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseBoolOrErrorCompletion)))wrapBoolOrErrorCompletion + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, + void (^)(FBLPromiseBoolOrErrorCompletion)))wrapBoolOrErrorCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseIntegerCompletion)))wrapIntegerCompletion + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, + void (^)(FBLPromiseIntegerCompletion)))wrapIntegerCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseIntegerOrErrorCompletion))) + wrapIntegerOrErrorCompletion FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromiseIntegerOrErrorCompletion))) + wrapIntegerOrErrorCompletionOn FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseDoubleCompletion)))wrapDoubleCompletion + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, + void (^)(FBLPromiseDoubleCompletion)))wrapDoubleCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseDoubleOrErrorCompletion))) + wrapDoubleOrErrorCompletion FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromiseDoubleOrErrorCompletion))) + wrapDoubleOrErrorCompletionOn FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise.h b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise.h new file mode 100644 index 0000000..b1380dc --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromise.h @@ -0,0 +1,93 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromiseError.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + Promises synchronization construct in Objective-C. + */ +@interface FBLPromise<__covariant Value> : NSObject + +/** + Default dispatch queue used for `FBLPromise`, which is `main` if a queue is not specified. + */ +@property(class) dispatch_queue_t defaultDispatchQueue NS_REFINED_FOR_SWIFT; + +/** + Creates a pending promise. + */ ++ (instancetype)pendingPromise NS_REFINED_FOR_SWIFT; + +/** + Creates a resolved promise. + + @param resolution An object to resolve the promise with: either a value or an error. + @return A new resolved promise. + */ ++ (instancetype)resolvedWith:(nullable id)resolution NS_REFINED_FOR_SWIFT; + +/** + Synchronously fulfills the promise with a value. + + @param value An arbitrary value to fulfill the promise with, including `nil`. + */ +- (void)fulfill:(nullable Value)value NS_REFINED_FOR_SWIFT; + +/** + Synchronously rejects the promise with an error. + + @param error An error to reject the promise with. + */ +- (void)reject:(NSError *)error NS_REFINED_FOR_SWIFT; + ++ (instancetype)new NS_UNAVAILABLE; +- (instancetype)init NS_UNAVAILABLE; +@end + +@interface FBLPromise() + +/** + Adds an object to the set of pending objects to keep strongly while the promise is pending. + Used by the Swift wrappers to keep them alive until the underlying ObjC promise is resolved. + + @param object An object to add. + */ +- (void)addPendingObject:(id)object NS_REFINED_FOR_SWIFT; + +@end + +#ifdef FBL_PROMISES_DOT_SYNTAX_IS_DEPRECATED +#define FBL_PROMISES_DOT_SYNTAX __attribute__((deprecated)) +#else +#define FBL_PROMISES_DOT_SYNTAX +#endif + +@interface FBLPromise(DotSyntaxAdditions) + +/** + Convenience dot-syntax wrappers for FBLPromise. + Usage: FBLPromise.pending() + FBLPromise.resolved(value) + + */ ++ (instancetype (^)(void))pending FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (instancetype (^)(id __nullable))resolved FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromiseError.h b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromiseError.h new file mode 100644 index 0000000..d37af53 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromiseError.h @@ -0,0 +1,43 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import + +NS_ASSUME_NONNULL_BEGIN + +FOUNDATION_EXTERN NSErrorDomain const FBLPromiseErrorDomain NS_REFINED_FOR_SWIFT; + +/** + Possible error codes in `FBLPromiseErrorDomain`. + */ +typedef NS_ENUM(NSInteger, FBLPromiseErrorCode) { + /** Promise failed to resolve in time. */ + FBLPromiseErrorCodeTimedOut = 1, + /** Validation predicate returned false. */ + FBLPromiseErrorCodeValidationFailure = 2, +} NS_REFINED_FOR_SWIFT; + +NS_INLINE BOOL FBLPromiseErrorIsTimedOut(NSError *error) NS_SWIFT_UNAVAILABLE("") { + return error.domain == FBLPromiseErrorDomain && + error.code == FBLPromiseErrorCodeTimedOut; +} + +NS_INLINE BOOL FBLPromiseErrorIsValidationFailure(NSError *error) NS_SWIFT_UNAVAILABLE("") { + return error.domain == FBLPromiseErrorDomain && + error.code == FBLPromiseErrorCodeValidationFailure; +} + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromises.h b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromises.h new file mode 100644 index 0000000..2d90bad --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/FBLPromises.h @@ -0,0 +1,32 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise+All.h" +#import "FBLPromise+Always.h" +#import "FBLPromise+Any.h" +#import "FBLPromise+Async.h" +#import "FBLPromise+Await.h" +#import "FBLPromise+Catch.h" +#import "FBLPromise+Delay.h" +#import "FBLPromise+Do.h" +#import "FBLPromise+Race.h" +#import "FBLPromise+Recover.h" +#import "FBLPromise+Reduce.h" +#import "FBLPromise+Retry.h" +#import "FBLPromise+Then.h" +#import "FBLPromise+Timeout.h" +#import "FBLPromise+Validate.h" +#import "FBLPromise+Wrap.h" diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/PromisesObjC-umbrella.h b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/PromisesObjC-umbrella.h new file mode 100644 index 0000000..5b014a8 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Headers/PromisesObjC-umbrella.h @@ -0,0 +1,36 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "FBLPromise+All.h" +#import "FBLPromise+Always.h" +#import "FBLPromise+Any.h" +#import "FBLPromise+Async.h" +#import "FBLPromise+Await.h" +#import "FBLPromise+Catch.h" +#import "FBLPromise+Delay.h" +#import "FBLPromise+Do.h" +#import "FBLPromise+Race.h" +#import "FBLPromise+Recover.h" +#import "FBLPromise+Reduce.h" +#import "FBLPromise+Retry.h" +#import "FBLPromise+Testing.h" +#import "FBLPromise+Then.h" +#import "FBLPromise+Timeout.h" +#import "FBLPromise+Validate.h" +#import "FBLPromise+Wrap.h" +#import "FBLPromise.h" +#import "FBLPromiseError.h" +#import "FBLPromises.h" + +FOUNDATION_EXPORT double FBLPromisesVersionNumber; +FOUNDATION_EXPORT const unsigned char FBLPromisesVersionString[]; + diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Info.plist b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Info.plist new file mode 100644 index 0000000..a963a05 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleExecutable + FBLPromises + CFBundleIdentifier + com.firebase.Firebase-FBLPromises + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + FBLPromises + CFBundlePackageType + FMWK + CFBundleVersion + 2.2.0 + DTSDKName + iphonesimulator11.2 + + diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Modules/module.modulemap b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Modules/module.modulemap new file mode 100644 index 0000000..bd7b48e --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64/FBLPromises.framework/Modules/module.modulemap @@ -0,0 +1,5 @@ +framework module PromisesObjC { +umbrella header "PromisesObjC-umbrella.h" +export * +module * { export * } +} diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/FBLPromises b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/FBLPromises new file mode 100644 index 0000000000000000000000000000000000000000..159976d5219a070fbf5980d6f7632e4403254665 GIT binary patch literal 452168 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 YS7!Oic6v~}e#EtEdMjn7HK7gv7ZayfvH$=8 literal 0 HcmV?d00001 diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+All.h b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+All.h new file mode 100644 index 0000000..9c0090e --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+All.h @@ -0,0 +1,63 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(AllAdditions) + +/** + Wait until all of the given promises are fulfilled. + If one of the given promises is rejected, then the returned promise is rejected with same error. + If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, + it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly. + Promises resolved with `nil` become `NSNull` instances in the resulting array. + + @param promises Promises to wait for. + @return Promise of an array containing the values of input promises in the same order. + */ ++ (FBLPromise *)all:(NSArray *)promises NS_SWIFT_UNAVAILABLE(""); + +/** + Wait until all of the given promises are fulfilled. + If one of the given promises is rejected, then the returned promise is rejected with same error. + If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, + it's implicitly considered a pre-fulfilled or pre-rejected FBLPromise correspondingly. + Promises resolved with `nil` become `NSNull` instances in the resulting array. + + @param queue A queue to dispatch on. + @param promises Promises to wait for. + @return Promise of an array containing the values of input promises in the same order. + */ ++ (FBLPromise *)onQueue:(dispatch_queue_t)queue + all:(NSArray *)promises NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `all` operators. + Usage: FBLPromise.all(@[ ... ]) + */ +@interface FBLPromise(DotSyntax_AllAdditions) + ++ (FBLPromise * (^)(NSArray *))all FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise * (^)(dispatch_queue_t, NSArray *))allOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Always.h b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Always.h new file mode 100644 index 0000000..13000f5 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Always.h @@ -0,0 +1,54 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(AlwaysAdditions) + +typedef void (^FBLPromiseAlwaysWorkBlock)(void) NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block that always executes, no matter if the receiver is rejected or fulfilled. + @return A new pending promise to be resolved with same resolution as the receiver. + */ +- (FBLPromise *)always:(FBLPromiseAlwaysWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to dispatch on. + @param work A block that always executes, no matter if the receiver is rejected or fulfilled. + @return A new pending promise to be resolved with same resolution as the receiver. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + always:(FBLPromiseAlwaysWorkBlock)work NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `always` operators. + Usage: promise.always(^{...}) + */ +@interface FBLPromise(DotSyntax_AlwaysAdditions) + +- (FBLPromise* (^)(FBLPromiseAlwaysWorkBlock))always FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise* (^)(dispatch_queue_t, FBLPromiseAlwaysWorkBlock))alwaysOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Any.h b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Any.h new file mode 100644 index 0000000..82875bf --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Any.h @@ -0,0 +1,69 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(AnyAdditions) + +/** + Waits until all of the given promises are either fulfilled or rejected. + If all promises are rejected, then the returned promise is rejected with same error + as the last one rejected. + If at least one of the promises is fulfilled, the resulting promise is fulfilled with an array of + values or `NSErrors`, matching the original order of fulfilled or rejected promises respectively. + If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, + it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly. + Promises resolved with `nil` become `NSNull` instances in the resulting array. + + @param promises Promises to wait for. + @return Promise of array containing the values or `NSError`s of input promises in the same order. + */ ++ (FBLPromise *)any:(NSArray *)promises NS_SWIFT_UNAVAILABLE(""); + +/** + Waits until all of the given promises are either fulfilled or rejected. + If all promises are rejected, then the returned promise is rejected with same error + as the last one rejected. + If at least one of the promises is fulfilled, the resulting promise is fulfilled with an array of + values or `NSError`s, matching the original order of fulfilled or rejected promises respectively. + If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, + it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly. + Promises resolved with `nil` become `NSNull` instances in the resulting array. + + @param queue A queue to dispatch on. + @param promises Promises to wait for. + @return Promise of array containing the values or `NSError`s of input promises in the same order. + */ ++ (FBLPromise *)onQueue:(dispatch_queue_t)queue + any:(NSArray *)promises NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `any` operators. + Usage: FBLPromise.any(@[ ... ]) + */ +@interface FBLPromise(DotSyntax_AnyAdditions) + ++ (FBLPromise * (^)(NSArray *))any FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise * (^)(dispatch_queue_t, NSArray *))anyOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Async.h b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Async.h new file mode 100644 index 0000000..0588a9e --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Async.h @@ -0,0 +1,60 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(AsyncAdditions) + +typedef void (^FBLPromiseFulfillBlock)(Value __nullable value) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseRejectBlock)(NSError *error) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseAsyncWorkBlock)(FBLPromiseFulfillBlock fulfill, + FBLPromiseRejectBlock reject) NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise and executes `work` block asynchronously. + + @param work A block to perform any operations needed to resolve the promise. + @return A new pending promise. + */ ++ (instancetype)async:(FBLPromiseAsyncWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise and executes `work` block asynchronously on the given queue. + + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @return A new pending promise. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + async:(FBLPromiseAsyncWorkBlock)work NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `async` operators. + Usage: FBLPromise.async(^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) { ... }) + */ +@interface FBLPromise(DotSyntax_AsyncAdditions) + ++ (FBLPromise* (^)(FBLPromiseAsyncWorkBlock))async FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, FBLPromiseAsyncWorkBlock))asyncOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Await.h b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Await.h new file mode 100644 index 0000000..c97a1ba --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Await.h @@ -0,0 +1,32 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + Waits for promise resolution. The current thread blocks until the promise is resolved. + + @param promise Promise to wait for. + @param error Error the promise was rejected with, or `nil` if the promise was fulfilled. + @return Value the promise was fulfilled with. If the promise was rejected, the return value + is always `nil`, but the error out arg is not. + */ +FOUNDATION_EXTERN id __nullable FBLPromiseAwait(FBLPromise *promise, + NSError **error) NS_REFINED_FOR_SWIFT; + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Catch.h b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Catch.h new file mode 100644 index 0000000..a9ff170 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Catch.h @@ -0,0 +1,59 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(CatchAdditions) + +typedef void (^FBLPromiseCatchWorkBlock)(NSError *error) NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise which eventually gets resolved with same resolution as the receiver. + If receiver is rejected, then `reject` block is executed asynchronously. + + @param reject A block to handle the error that receiver was rejected with. + @return A new pending promise. + */ +- (FBLPromise *)catch:(FBLPromiseCatchWorkBlock)reject NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise which eventually gets resolved with same resolution as the receiver. + If receiver is rejected, then `reject` block is executed asynchronously on the given queue. + + @param queue A queue to invoke the `reject` block on. + @param reject A block to handle the error that receiver was rejected with. + @return A new pending promise. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + catch:(FBLPromiseCatchWorkBlock)reject NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `catch` operators. + Usage: promise.catch(^(NSError *error) { ... }) + */ +@interface FBLPromise(DotSyntax_CatchAdditions) + +- (FBLPromise* (^)(FBLPromiseCatchWorkBlock))catch FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise* (^)(dispatch_queue_t, FBLPromiseCatchWorkBlock))catchOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Delay.h b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Delay.h new file mode 100644 index 0000000..557df48 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Delay.h @@ -0,0 +1,59 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(DelayAdditions) + +/** + Creates a new pending promise that fulfills with the same value as `self` after the `delay`, or + rejects with the same error immediately. + + @param interval Time to wait in seconds. + @return A new pending promise that fulfills at least `delay` seconds later than `self`, or rejects + with the same error immediately. + */ +- (FBLPromise *)delay:(NSTimeInterval)interval NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a new pending promise that fulfills with the same value as `self` after the `delay`, or + rejects with the same error immediately. + + @param queue A queue to dispatch on. + @param interval Time to wait in seconds. + @return A new pending promise that fulfills at least `delay` seconds later than `self`, or rejects + with the same error immediately. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + delay:(NSTimeInterval)interval NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `delay` operators. + Usage: promise.delay(...) + */ +@interface FBLPromise(DotSyntax_DelayAdditions) + +- (FBLPromise * (^)(NSTimeInterval))delay FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise * (^)(dispatch_queue_t, NSTimeInterval))delayOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Do.h b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Do.h new file mode 100644 index 0000000..6838e0a --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Do.h @@ -0,0 +1,55 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(DoAdditions) + +typedef id __nullable (^FBLPromiseDoWorkBlock)(void) NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise and executes `work` block asynchronously. + + @param work A block that returns a value or an error used to resolve the promise. + @return A new pending promise. + */ ++ (instancetype)do:(FBLPromiseDoWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise and executes `work` block asynchronously on the given queue. + + @param queue A queue to invoke the `work` block on. + @param work A block that returns a value or an error used to resolve the promise. + @return A new pending promise. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue do:(FBLPromiseDoWorkBlock)work NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `do` operators. + Usage: FBLPromise.doOn(queue, ^(NSError *error) { ... }) + */ +@interface FBLPromise(DotSyntax_DoAdditions) + ++ (FBLPromise * (^)(dispatch_queue_t, FBLPromiseDoWorkBlock))doOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Race.h b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Race.h new file mode 100644 index 0000000..2f67258 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Race.h @@ -0,0 +1,62 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(RaceAdditions) + +/** + Wait until any of the given promises are fulfilled. + If one of the promises is rejected, then the returned promise is rejected with same error. + If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, + it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly. + + @param promises Promises to wait for. + @return A new pending promise to be resolved with the same resolution as the first promise, among + the given ones, which was resolved. + */ ++ (instancetype)race:(NSArray *)promises NS_SWIFT_UNAVAILABLE(""); + +/** + Wait until any of the given promises are fulfilled. + If one of the promises is rejected, then the returned promise is rejected with same error. + If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, + it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly. + + @param queue A queue to dispatch on. + @param promises Promises to wait for. + @return A new pending promise to be resolved with the same resolution as the first promise, among + the given ones, which was resolved. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue race:(NSArray *)promises NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `race` operators. + Usage: FBLPromise.race(@[ ... ]) + */ +@interface FBLPromise(DotSyntax_RaceAdditions) + ++ (FBLPromise * (^)(NSArray *))race FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise * (^)(dispatch_queue_t, NSArray *))raceOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Recover.h b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Recover.h new file mode 100644 index 0000000..bb7df7e --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Recover.h @@ -0,0 +1,60 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(RecoverAdditions) + +typedef id __nullable (^FBLPromiseRecoverWorkBlock)(NSError *error) NS_SWIFT_UNAVAILABLE(""); + +/** + Provides a new promise to recover in case the receiver gets rejected. + + @param recovery A block to handle the error that the receiver was rejected with. + @return A new pending promise to use instead of the rejected one that gets resolved with resolution + returned from `recovery` block. + */ +- (FBLPromise *)recover:(FBLPromiseRecoverWorkBlock)recovery NS_SWIFT_UNAVAILABLE(""); + +/** + Provides a new promise to recover in case the receiver gets rejected. + + @param queue A queue to dispatch on. + @param recovery A block to handle the error that the receiver was rejected with. + @return A new pending promise to use instead of the rejected one that gets resolved with resolution + returned from `recovery` block. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + recover:(FBLPromiseRecoverWorkBlock)recovery NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `recover` operators. + Usage: promise.recover(^id(NSError *error) {...}) + */ +@interface FBLPromise(DotSyntax_RecoverAdditions) + +- (FBLPromise * (^)(FBLPromiseRecoverWorkBlock))recover FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise * (^)(dispatch_queue_t, FBLPromiseRecoverWorkBlock))recoverOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Reduce.h b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Reduce.h new file mode 100644 index 0000000..5bb1eee --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Reduce.h @@ -0,0 +1,71 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(ReduceAdditions) + +typedef id __nullable (^FBLPromiseReducerBlock)(Value __nullable partial, id next) + NS_SWIFT_UNAVAILABLE(""); + +/** + Sequentially reduces a collection of values to a single promise using a given combining block + and the value `self` resolves with as initial value. + + @param items An array of values to process in order. + @param reducer A block to combine an accumulating value and an element of the sequence into + the new accumulating value or a promise resolved with it, to be used in the next + call of the `reducer` or returned to the caller. + @return A new pending promise returned from the last `reducer` invocation. + Or `self` if `items` is empty. + */ +- (FBLPromise *)reduce:(NSArray *)items + combine:(FBLPromiseReducerBlock)reducer NS_SWIFT_UNAVAILABLE(""); + +/** + Sequentially reduces a collection of values to a single promise using a given combining block + and the value `self` resolves with as initial value. + + @param queue A queue to dispatch on. + @param items An array of values to process in order. + @param reducer A block to combine an accumulating value and an element of the sequence into + the new accumulating value or a promise resolved with it, to be used in the next + call of the `reducer` or returned to the caller. + @return A new pending promise returned from the last `reducer` invocation. + Or `self` if `items` is empty. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + reduce:(NSArray *)items + combine:(FBLPromiseReducerBlock)reducer NS_SWIFT_UNAVAILABLE(""); + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `reduce` operators. + Usage: promise.reduce(values, ^id(id partial, id next) { ... }) + */ +@interface FBLPromise(DotSyntax_ReduceAdditions) + +- (FBLPromise * (^)(NSArray *, FBLPromiseReducerBlock))reduce FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise * (^)(dispatch_queue_t, NSArray *, FBLPromiseReducerBlock))reduceOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Retry.h b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Retry.h new file mode 100644 index 0000000..414a17a --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Retry.h @@ -0,0 +1,165 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +/** The default number of retry attempts is 1. */ +FOUNDATION_EXTERN NSInteger const FBLPromiseRetryDefaultAttemptsCount NS_REFINED_FOR_SWIFT; + +/** The default delay interval before making a retry attempt is 1.0 second. */ +FOUNDATION_EXTERN NSTimeInterval const FBLPromiseRetryDefaultDelayInterval NS_REFINED_FOR_SWIFT; + +@interface FBLPromise(RetryAdditions) + +typedef id __nullable (^FBLPromiseRetryWorkBlock)(void) NS_SWIFT_UNAVAILABLE(""); +typedef BOOL (^FBLPromiseRetryPredicateBlock)(NSInteger, NSError *) NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise that fulfills with the same value as the promise returned from `work` + block, which executes asynchronously, or rejects with the same error after all retry attempts have + been exhausted. Defaults to `FBLPromiseRetryDefaultAttemptsCount` attempt(s) on rejection where the + `work` block is retried after a delay of `FBLPromiseRetryDefaultDelayInterval` second(s). + + @param work A block that executes asynchronously on the default queue and returns a value or an + error used to resolve the promise. + @return A new pending promise that fulfills with the same value as the promise returned from `work` + block, or rejects with the same error after all retry attempts have been exhausted. + */ ++ (instancetype)retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise that fulfills with the same value as the promise returned from `work` + block, which executes asynchronously on the given `queue`, or rejects with the same error after all + retry attempts have been exhausted. Defaults to `FBLPromiseRetryDefaultAttemptsCount` attempt(s) on + rejection where the `work` block is retried on the given `queue` after a delay of + `FBLPromiseRetryDefaultDelayInterval` second(s). + + @param queue A queue to invoke the `work` block on. + @param work A block that executes asynchronously on the given `queue` and returns a value or an + error used to resolve the promise. + @return A new pending promise that fulfills with the same value as the promise returned from `work` + block, or rejects with the same error after all retry attempts have been exhausted. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise that fulfills with the same value as the promise returned from `work` + block, which executes asynchronously, or rejects with the same error after all retry attempts have + been exhausted. + + @param count Max number of retry attempts. The `work` block will be executed once if the specified + count is less than or equal to zero. + @param work A block that executes asynchronously on the default queue and returns a value or an + error used to resolve the promise. + @return A new pending promise that fulfills with the same value as the promise returned from `work` + block, or rejects with the same error after all retry attempts have been exhausted. + */ ++ (instancetype)attempts:(NSInteger)count + retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise that fulfills with the same value as the promise returned from `work` + block, which executes asynchronously on the given `queue`, or rejects with the same error after all + retry attempts have been exhausted. + + @param queue A queue to invoke the `work` block on. + @param count Max number of retry attempts. The `work` block will be executed once if the specified + count is less than or equal to zero. + @param work A block that executes asynchronously on the given `queue` and returns a value or an + error used to resolve the promise. + @return A new pending promise that fulfills with the same value as the promise returned from `work` + block, or rejects with the same error after all retry attempts have been exhausted. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + attempts:(NSInteger)count + retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise that fulfills with the same value as the promise returned from `work` + block, which executes asynchronously, or rejects with the same error after all retry attempts have + been exhausted. On rejection, the `work` block is retried after the given delay `interval` and will + continue to retry until the number of specified attempts have been exhausted or will bail early if + the given condition is not met. + + @param count Max number of retry attempts. The `work` block will be executed once if the specified + count is less than or equal to zero. + @param interval Time to wait before the next retry attempt. + @param predicate Condition to check before the next retry attempt. The predicate block provides the + the number of remaining retry attempts and the error that the promise was rejected + with. + @param work A block that executes asynchronously on the default queue and returns a value or an + error used to resolve the promise. + @return A new pending promise that fulfills with the same value as the promise returned from `work` + block, or rejects with the same error after all retry attempts have been exhausted or if + the given condition is not met. + */ ++ (instancetype)attempts:(NSInteger)count + delay:(NSTimeInterval)interval + condition:(nullable FBLPromiseRetryPredicateBlock)predicate + retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise that fulfills with the same value as the promise returned from `work` + block, which executes asynchronously on the given `queue`, or rejects with the same error after all + retry attempts have been exhausted. On rejection, the `work` block is retried after the given + delay `interval` and will continue to retry until the number of specified attempts have been + exhausted or will bail early if the given condition is not met. + + @param queue A queue to invoke the `work` block on. + @param count Max number of retry attempts. The `work` block will be executed once if the specified + count is less than or equal to zero. + @param interval Time to wait before the next retry attempt. + @param predicate Condition to check before the next retry attempt. The predicate block provides the + the number of remaining retry attempts and the error that the promise was rejected + with. + @param work A block that executes asynchronously on the given `queue` and returns a value or an + error used to resolve the promise. + @return A new pending promise that fulfills with the same value as the promise returned from `work` + block, or rejects with the same error after all retry attempts have been exhausted or if + the given condition is not met. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + attempts:(NSInteger)count + delay:(NSTimeInterval)interval + condition:(nullable FBLPromiseRetryPredicateBlock)predicate + retry:(FBLPromiseRetryWorkBlock)work NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise+Retry` operators. + Usage: FBLPromise.retry(^id { ... }) + */ +@interface FBLPromise(DotSyntax_RetryAdditions) + ++ (FBLPromise * (^)(FBLPromiseRetryWorkBlock))retry FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise * (^)(dispatch_queue_t, FBLPromiseRetryWorkBlock))retryOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise * (^)(NSInteger, NSTimeInterval, FBLPromiseRetryPredicateBlock __nullable, + FBLPromiseRetryWorkBlock))retryAgain FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise * (^)(dispatch_queue_t, NSInteger, NSTimeInterval, + FBLPromiseRetryPredicateBlock __nullable, + FBLPromiseRetryWorkBlock))retryAgainOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Testing.h b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Testing.h new file mode 100644 index 0000000..8478ae2 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Testing.h @@ -0,0 +1,57 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + Waits for all scheduled promises blocks. + + @param timeout Maximum time to wait. + @return YES if all promises blocks have completed before the timeout and NO otherwise. + */ +FOUNDATION_EXTERN BOOL FBLWaitForPromisesWithTimeout(NSTimeInterval timeout) NS_REFINED_FOR_SWIFT; + +@interface FBLPromise(TestingAdditions) + +/** + Dispatch group for promises that is typically used to wait for all scheduled blocks. + */ +@property(class, nonatomic, readonly) dispatch_group_t dispatchGroup NS_REFINED_FOR_SWIFT; + +/** + Properties to get the current state of the promise. + */ +@property(nonatomic, readonly) BOOL isPending NS_REFINED_FOR_SWIFT; +@property(nonatomic, readonly) BOOL isFulfilled NS_REFINED_FOR_SWIFT; +@property(nonatomic, readonly) BOOL isRejected NS_REFINED_FOR_SWIFT; + +/** + Value the promise was fulfilled with. + Can be nil if the promise is still pending, was resolved with nil or after it has been rejected. + */ +@property(nonatomic, readonly, nullable) Value value NS_REFINED_FOR_SWIFT; + +/** + Error the promise was rejected with. + Can be nil if the promise is still pending or after it has been fulfilled. + */ +@property(nonatomic, readonly, nullable) NSError *error NS_REFINED_FOR_SWIFT; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Then.h b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Then.h new file mode 100644 index 0000000..32027e6 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Then.h @@ -0,0 +1,63 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(ThenAdditions) + +typedef id __nullable (^FBLPromiseThenWorkBlock)(Value __nullable value) NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise which eventually gets resolved with resolution returned from `work` + block: either value, error or another promise. The `work` block is executed asynchronously only + when the receiver is fulfilled. If receiver is rejected, the returned promise is also rejected with + the same error. + + @param work A block to handle the value that receiver was fulfilled with. + @return A new pending promise to be resolved with resolution returned from the `work` block. + */ +- (FBLPromise *)then:(FBLPromiseThenWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise which eventually gets resolved with resolution returned from `work` + block: either value, error or another promise. The `work` block is executed asynchronously when the + receiver is fulfilled. If receiver is rejected, the returned promise is also rejected with the same + error. + + @param queue A queue to invoke the `work` block on. + @param work A block to handle the value that receiver was fulfilled with. + @return A new pending promise to be resolved with resolution returned from the `work` block. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + then:(FBLPromiseThenWorkBlock)work NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `then` operators. + Usage: promise.then(^id(id value) { ... }) + */ +@interface FBLPromise(DotSyntax_ThenAdditions) + +- (FBLPromise* (^)(FBLPromiseThenWorkBlock))then FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise* (^)(dispatch_queue_t, FBLPromiseThenWorkBlock))thenOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Timeout.h b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Timeout.h new file mode 100644 index 0000000..184ba16 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Timeout.h @@ -0,0 +1,57 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(TimeoutAdditions) + +/** + Waits for a promise with the specified `timeout`. + + @param interval Time to wait in seconds. + @return A new pending promise that gets either resolved with same resolution as the receiver or + rejected with `FBLPromiseErrorCodeTimedOut` error code in `FBLPromiseErrorDomain`. + */ +- (FBLPromise *)timeout:(NSTimeInterval)interval NS_SWIFT_UNAVAILABLE(""); + +/** + Waits for a promise with the specified `timeout`. + + @param queue A queue to dispatch on. + @param interval Time to wait in seconds. + @return A new pending promise that gets either resolved with same resolution as the receiver or + rejected with `FBLPromiseErrorCodeTimedOut` error code in `FBLPromiseErrorDomain`. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + timeout:(NSTimeInterval)interval NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `timeout` operators. + Usage: promise.timeout(...) + */ +@interface FBLPromise(DotSyntax_TimeoutAdditions) + +- (FBLPromise* (^)(NSTimeInterval))timeout FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise* (^)(dispatch_queue_t, NSTimeInterval))timeoutOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Validate.h b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Validate.h new file mode 100644 index 0000000..9dfa2f1 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Validate.h @@ -0,0 +1,60 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(ValidateAdditions) + +typedef BOOL (^FBLPromiseValidateWorkBlock)(Value __nullable value) NS_SWIFT_UNAVAILABLE(""); + +/** + Validates a fulfilled value or rejects the value if it can not be validated. + + @param predicate An expression to validate. + @return A new pending promise that gets either resolved with same resolution as the receiver or + rejected with `FBLPromiseErrorCodeValidationFailure` error code in `FBLPromiseErrorDomain`. + */ +- (FBLPromise *)validate:(FBLPromiseValidateWorkBlock)predicate NS_SWIFT_UNAVAILABLE(""); + +/** + Validates a fulfilled value or rejects the value if it can not be validated. + + @param queue A queue to dispatch on. + @param predicate An expression to validate. + @return A new pending promise that gets either resolved with same resolution as the receiver or + rejected with `FBLPromiseErrorCodeValidationFailure` error code in `FBLPromiseErrorDomain`. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + validate:(FBLPromiseValidateWorkBlock)predicate NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `validate` operators. + Usage: promise.validate(^BOOL(id value) { ... }) + */ +@interface FBLPromise(DotSyntax_ValidateAdditions) + +- (FBLPromise * (^)(FBLPromiseValidateWorkBlock))validate FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise * (^)(dispatch_queue_t, FBLPromiseValidateWorkBlock))validateOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Wrap.h b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Wrap.h new file mode 100644 index 0000000..664e1bb --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise+Wrap.h @@ -0,0 +1,316 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + Different types of completion handlers available to be wrapped with promise. + */ +typedef void (^FBLPromiseCompletion)(void) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseObjectCompletion)(id __nullable) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseErrorCompletion)(NSError* __nullable) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseObjectOrErrorCompletion)(id __nullable, NSError* __nullable) + NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseErrorOrObjectCompletion)(NSError* __nullable, id __nullable) + NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromise2ObjectsOrErrorCompletion)(id __nullable, id __nullable, + NSError* __nullable) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseBoolCompletion)(BOOL) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseBoolOrErrorCompletion)(BOOL, NSError* __nullable) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseIntegerCompletion)(NSInteger) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseIntegerOrErrorCompletion)(NSInteger, NSError* __nullable) + NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseDoubleCompletion)(double) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseDoubleOrErrorCompletion)(double, NSError* __nullable) + NS_SWIFT_UNAVAILABLE(""); + +/** + Provides an easy way to convert methods that use common callback patterns into promises. + */ +@interface FBLPromise(WrapAdditions) + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with `nil` when completion handler is invoked. + */ ++ (instancetype)wrapCompletion:(void (^)(FBLPromiseCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with `nil` when completion handler is invoked. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + wrapCompletion:(void (^)(FBLPromiseCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an object provided by completion handler. + */ ++ (instancetype)wrapObjectCompletion:(void (^)(FBLPromiseObjectCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an object provided by completion handler. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + wrapObjectCompletion:(void (^)(FBLPromiseObjectCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an error provided by completion handler. + If error is `nil`, fulfills with `nil`, otherwise rejects with the error. + */ ++ (instancetype)wrapErrorCompletion:(void (^)(FBLPromiseErrorCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an error provided by completion handler. + If error is `nil`, fulfills with `nil`, otherwise rejects with the error. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + wrapErrorCompletion:(void (^)(FBLPromiseErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an object provided by completion handler if error is `nil`. + Otherwise, rejects with the error. + */ ++ (instancetype)wrapObjectOrErrorCompletion: + (void (^)(FBLPromiseObjectOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an object provided by completion handler if error is `nil`. + Otherwise, rejects with the error. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + wrapObjectOrErrorCompletion:(void (^)(FBLPromiseObjectOrErrorCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an error or object provided by completion handler. If error + is not `nil`, rejects with the error. + */ ++ (instancetype)wrapErrorOrObjectCompletion: + (void (^)(FBLPromiseErrorOrObjectCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an error or object provided by completion handler. If error + is not `nil`, rejects with the error. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + wrapErrorOrObjectCompletion:(void (^)(FBLPromiseErrorOrObjectCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an array of objects provided by completion handler in order + if error is `nil`. Otherwise, rejects with the error. + */ ++ (FBLPromise*)wrap2ObjectsOrErrorCompletion: + (void (^)(FBLPromise2ObjectsOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an array of objects provided by completion handler in order + if error is `nil`. Otherwise, rejects with the error. + */ ++ (FBLPromise*)onQueue:(dispatch_queue_t)queue + wrap2ObjectsOrErrorCompletion:(void (^)(FBLPromise2ObjectsOrErrorCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping YES/NO. + */ ++ (FBLPromise*)wrapBoolCompletion:(void (^)(FBLPromiseBoolCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping YES/NO. + */ ++ (FBLPromise*)onQueue:(dispatch_queue_t)queue + wrapBoolCompletion:(void (^)(FBLPromiseBoolCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping YES/NO when error is `nil`. + Otherwise rejects with the error. + */ ++ (FBLPromise*)wrapBoolOrErrorCompletion: + (void (^)(FBLPromiseBoolOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping YES/NO when error is `nil`. + Otherwise rejects with the error. + */ ++ (FBLPromise*)onQueue:(dispatch_queue_t)queue + wrapBoolOrErrorCompletion:(void (^)(FBLPromiseBoolOrErrorCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping an integer. + */ ++ (FBLPromise*)wrapIntegerCompletion:(void (^)(FBLPromiseIntegerCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping an integer. + */ ++ (FBLPromise*)onQueue:(dispatch_queue_t)queue + wrapIntegerCompletion:(void (^)(FBLPromiseIntegerCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping an integer when error is `nil`. + Otherwise rejects with the error. + */ ++ (FBLPromise*)wrapIntegerOrErrorCompletion: + (void (^)(FBLPromiseIntegerOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping an integer when error is `nil`. + Otherwise rejects with the error. + */ ++ (FBLPromise*)onQueue:(dispatch_queue_t)queue + wrapIntegerOrErrorCompletion:(void (^)(FBLPromiseIntegerOrErrorCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping a double. + */ ++ (FBLPromise*)wrapDoubleCompletion:(void (^)(FBLPromiseDoubleCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping a double. + */ ++ (FBLPromise*)onQueue:(dispatch_queue_t)queue + wrapDoubleCompletion:(void (^)(FBLPromiseDoubleCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping a double when error is `nil`. + Otherwise rejects with the error. + */ ++ (FBLPromise*)wrapDoubleOrErrorCompletion: + (void (^)(FBLPromiseDoubleOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping a double when error is `nil`. + Otherwise rejects with the error. + */ ++ (FBLPromise*)onQueue:(dispatch_queue_t)queue + wrapDoubleOrErrorCompletion:(void (^)(FBLPromiseDoubleOrErrorCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `wrap` operators. + Usage: FBLPromise.wrapCompletion(^(FBLPromiseCompletion handler) {...}) + */ +@interface FBLPromise(DotSyntax_WrapAdditions) + ++ (FBLPromise* (^)(void (^)(FBLPromiseCompletion)))wrapCompletion FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromiseCompletion)))wrapCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseObjectCompletion)))wrapObjectCompletion + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromiseObjectCompletion)))wrapObjectCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseErrorCompletion)))wrapErrorCompletion FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromiseErrorCompletion)))wrapErrorCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseObjectOrErrorCompletion)))wrapObjectOrErrorCompletion + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, + void (^)(FBLPromiseObjectOrErrorCompletion)))wrapObjectOrErrorCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseErrorOrObjectCompletion)))wrapErrorOrObjectCompletion + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, + void (^)(FBLPromiseErrorOrObjectCompletion)))wrapErrorOrObjectCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromise2ObjectsOrErrorCompletion))) + wrap2ObjectsOrErrorCompletion FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromise2ObjectsOrErrorCompletion))) + wrap2ObjectsOrErrorCompletionOn FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseBoolCompletion)))wrapBoolCompletion + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, + void (^)(FBLPromiseBoolCompletion)))wrapBoolCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseBoolOrErrorCompletion)))wrapBoolOrErrorCompletion + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, + void (^)(FBLPromiseBoolOrErrorCompletion)))wrapBoolOrErrorCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseIntegerCompletion)))wrapIntegerCompletion + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, + void (^)(FBLPromiseIntegerCompletion)))wrapIntegerCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseIntegerOrErrorCompletion))) + wrapIntegerOrErrorCompletion FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromiseIntegerOrErrorCompletion))) + wrapIntegerOrErrorCompletionOn FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseDoubleCompletion)))wrapDoubleCompletion + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, + void (^)(FBLPromiseDoubleCompletion)))wrapDoubleCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseDoubleOrErrorCompletion))) + wrapDoubleOrErrorCompletion FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromiseDoubleOrErrorCompletion))) + wrapDoubleOrErrorCompletionOn FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise.h b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise.h new file mode 100644 index 0000000..b1380dc --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromise.h @@ -0,0 +1,93 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromiseError.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + Promises synchronization construct in Objective-C. + */ +@interface FBLPromise<__covariant Value> : NSObject + +/** + Default dispatch queue used for `FBLPromise`, which is `main` if a queue is not specified. + */ +@property(class) dispatch_queue_t defaultDispatchQueue NS_REFINED_FOR_SWIFT; + +/** + Creates a pending promise. + */ ++ (instancetype)pendingPromise NS_REFINED_FOR_SWIFT; + +/** + Creates a resolved promise. + + @param resolution An object to resolve the promise with: either a value or an error. + @return A new resolved promise. + */ ++ (instancetype)resolvedWith:(nullable id)resolution NS_REFINED_FOR_SWIFT; + +/** + Synchronously fulfills the promise with a value. + + @param value An arbitrary value to fulfill the promise with, including `nil`. + */ +- (void)fulfill:(nullable Value)value NS_REFINED_FOR_SWIFT; + +/** + Synchronously rejects the promise with an error. + + @param error An error to reject the promise with. + */ +- (void)reject:(NSError *)error NS_REFINED_FOR_SWIFT; + ++ (instancetype)new NS_UNAVAILABLE; +- (instancetype)init NS_UNAVAILABLE; +@end + +@interface FBLPromise() + +/** + Adds an object to the set of pending objects to keep strongly while the promise is pending. + Used by the Swift wrappers to keep them alive until the underlying ObjC promise is resolved. + + @param object An object to add. + */ +- (void)addPendingObject:(id)object NS_REFINED_FOR_SWIFT; + +@end + +#ifdef FBL_PROMISES_DOT_SYNTAX_IS_DEPRECATED +#define FBL_PROMISES_DOT_SYNTAX __attribute__((deprecated)) +#else +#define FBL_PROMISES_DOT_SYNTAX +#endif + +@interface FBLPromise(DotSyntaxAdditions) + +/** + Convenience dot-syntax wrappers for FBLPromise. + Usage: FBLPromise.pending() + FBLPromise.resolved(value) + + */ ++ (instancetype (^)(void))pending FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (instancetype (^)(id __nullable))resolved FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromiseError.h b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromiseError.h new file mode 100644 index 0000000..d37af53 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromiseError.h @@ -0,0 +1,43 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import + +NS_ASSUME_NONNULL_BEGIN + +FOUNDATION_EXTERN NSErrorDomain const FBLPromiseErrorDomain NS_REFINED_FOR_SWIFT; + +/** + Possible error codes in `FBLPromiseErrorDomain`. + */ +typedef NS_ENUM(NSInteger, FBLPromiseErrorCode) { + /** Promise failed to resolve in time. */ + FBLPromiseErrorCodeTimedOut = 1, + /** Validation predicate returned false. */ + FBLPromiseErrorCodeValidationFailure = 2, +} NS_REFINED_FOR_SWIFT; + +NS_INLINE BOOL FBLPromiseErrorIsTimedOut(NSError *error) NS_SWIFT_UNAVAILABLE("") { + return error.domain == FBLPromiseErrorDomain && + error.code == FBLPromiseErrorCodeTimedOut; +} + +NS_INLINE BOOL FBLPromiseErrorIsValidationFailure(NSError *error) NS_SWIFT_UNAVAILABLE("") { + return error.domain == FBLPromiseErrorDomain && + error.code == FBLPromiseErrorCodeValidationFailure; +} + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromises.h b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromises.h new file mode 100644 index 0000000..2d90bad --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/FBLPromises.h @@ -0,0 +1,32 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise+All.h" +#import "FBLPromise+Always.h" +#import "FBLPromise+Any.h" +#import "FBLPromise+Async.h" +#import "FBLPromise+Await.h" +#import "FBLPromise+Catch.h" +#import "FBLPromise+Delay.h" +#import "FBLPromise+Do.h" +#import "FBLPromise+Race.h" +#import "FBLPromise+Recover.h" +#import "FBLPromise+Reduce.h" +#import "FBLPromise+Retry.h" +#import "FBLPromise+Then.h" +#import "FBLPromise+Timeout.h" +#import "FBLPromise+Validate.h" +#import "FBLPromise+Wrap.h" diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/PromisesObjC-umbrella.h b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/PromisesObjC-umbrella.h new file mode 100644 index 0000000..5b014a8 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Headers/PromisesObjC-umbrella.h @@ -0,0 +1,36 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "FBLPromise+All.h" +#import "FBLPromise+Always.h" +#import "FBLPromise+Any.h" +#import "FBLPromise+Async.h" +#import "FBLPromise+Await.h" +#import "FBLPromise+Catch.h" +#import "FBLPromise+Delay.h" +#import "FBLPromise+Do.h" +#import "FBLPromise+Race.h" +#import "FBLPromise+Recover.h" +#import "FBLPromise+Reduce.h" +#import "FBLPromise+Retry.h" +#import "FBLPromise+Testing.h" +#import "FBLPromise+Then.h" +#import "FBLPromise+Timeout.h" +#import "FBLPromise+Validate.h" +#import "FBLPromise+Wrap.h" +#import "FBLPromise.h" +#import "FBLPromiseError.h" +#import "FBLPromises.h" + +FOUNDATION_EXPORT double FBLPromisesVersionNumber; +FOUNDATION_EXPORT const unsigned char FBLPromisesVersionString[]; + diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Info.plist b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Info.plist new file mode 100644 index 0000000..a963a05 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleExecutable + FBLPromises + CFBundleIdentifier + com.firebase.Firebase-FBLPromises + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + FBLPromises + CFBundlePackageType + FMWK + CFBundleVersion + 2.2.0 + DTSDKName + iphonesimulator11.2 + + diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Modules/module.modulemap b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Modules/module.modulemap new file mode 100644 index 0000000..bd7b48e --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-maccatalyst/FBLPromises.framework/Modules/module.modulemap @@ -0,0 +1,5 @@ +framework module PromisesObjC { +umbrella header "PromisesObjC-umbrella.h" +export * +module * { export * } +} diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/FBLPromises b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/FBLPromises new file mode 100644 index 0000000000000000000000000000000000000000..84980b055a7597071c201d3b1b02cc9bf9113495 GIT binary patch literal 449088 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ÐI|PU)(D)4c-+Tk{2Cyp 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%0A>a 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

q|3X4LaD#vpwy|?x=D!kn$eG~4D)yL_-`Z5}f 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 RynZaTX!>Yirs<##|9@l6l&=5) literal 0 HcmV?d00001 diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+All.h b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+All.h new file mode 100644 index 0000000..9c0090e --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+All.h @@ -0,0 +1,63 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(AllAdditions) + +/** + Wait until all of the given promises are fulfilled. + If one of the given promises is rejected, then the returned promise is rejected with same error. + If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, + it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly. + Promises resolved with `nil` become `NSNull` instances in the resulting array. + + @param promises Promises to wait for. + @return Promise of an array containing the values of input promises in the same order. + */ ++ (FBLPromise *)all:(NSArray *)promises NS_SWIFT_UNAVAILABLE(""); + +/** + Wait until all of the given promises are fulfilled. + If one of the given promises is rejected, then the returned promise is rejected with same error. + If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, + it's implicitly considered a pre-fulfilled or pre-rejected FBLPromise correspondingly. + Promises resolved with `nil` become `NSNull` instances in the resulting array. + + @param queue A queue to dispatch on. + @param promises Promises to wait for. + @return Promise of an array containing the values of input promises in the same order. + */ ++ (FBLPromise *)onQueue:(dispatch_queue_t)queue + all:(NSArray *)promises NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `all` operators. + Usage: FBLPromise.all(@[ ... ]) + */ +@interface FBLPromise(DotSyntax_AllAdditions) + ++ (FBLPromise * (^)(NSArray *))all FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise * (^)(dispatch_queue_t, NSArray *))allOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Always.h b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Always.h new file mode 100644 index 0000000..13000f5 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Always.h @@ -0,0 +1,54 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(AlwaysAdditions) + +typedef void (^FBLPromiseAlwaysWorkBlock)(void) NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block that always executes, no matter if the receiver is rejected or fulfilled. + @return A new pending promise to be resolved with same resolution as the receiver. + */ +- (FBLPromise *)always:(FBLPromiseAlwaysWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to dispatch on. + @param work A block that always executes, no matter if the receiver is rejected or fulfilled. + @return A new pending promise to be resolved with same resolution as the receiver. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + always:(FBLPromiseAlwaysWorkBlock)work NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `always` operators. + Usage: promise.always(^{...}) + */ +@interface FBLPromise(DotSyntax_AlwaysAdditions) + +- (FBLPromise* (^)(FBLPromiseAlwaysWorkBlock))always FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise* (^)(dispatch_queue_t, FBLPromiseAlwaysWorkBlock))alwaysOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Any.h b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Any.h new file mode 100644 index 0000000..82875bf --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Any.h @@ -0,0 +1,69 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(AnyAdditions) + +/** + Waits until all of the given promises are either fulfilled or rejected. + If all promises are rejected, then the returned promise is rejected with same error + as the last one rejected. + If at least one of the promises is fulfilled, the resulting promise is fulfilled with an array of + values or `NSErrors`, matching the original order of fulfilled or rejected promises respectively. + If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, + it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly. + Promises resolved with `nil` become `NSNull` instances in the resulting array. + + @param promises Promises to wait for. + @return Promise of array containing the values or `NSError`s of input promises in the same order. + */ ++ (FBLPromise *)any:(NSArray *)promises NS_SWIFT_UNAVAILABLE(""); + +/** + Waits until all of the given promises are either fulfilled or rejected. + If all promises are rejected, then the returned promise is rejected with same error + as the last one rejected. + If at least one of the promises is fulfilled, the resulting promise is fulfilled with an array of + values or `NSError`s, matching the original order of fulfilled or rejected promises respectively. + If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, + it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly. + Promises resolved with `nil` become `NSNull` instances in the resulting array. + + @param queue A queue to dispatch on. + @param promises Promises to wait for. + @return Promise of array containing the values or `NSError`s of input promises in the same order. + */ ++ (FBLPromise *)onQueue:(dispatch_queue_t)queue + any:(NSArray *)promises NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `any` operators. + Usage: FBLPromise.any(@[ ... ]) + */ +@interface FBLPromise(DotSyntax_AnyAdditions) + ++ (FBLPromise * (^)(NSArray *))any FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise * (^)(dispatch_queue_t, NSArray *))anyOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Async.h b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Async.h new file mode 100644 index 0000000..0588a9e --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Async.h @@ -0,0 +1,60 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(AsyncAdditions) + +typedef void (^FBLPromiseFulfillBlock)(Value __nullable value) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseRejectBlock)(NSError *error) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseAsyncWorkBlock)(FBLPromiseFulfillBlock fulfill, + FBLPromiseRejectBlock reject) NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise and executes `work` block asynchronously. + + @param work A block to perform any operations needed to resolve the promise. + @return A new pending promise. + */ ++ (instancetype)async:(FBLPromiseAsyncWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise and executes `work` block asynchronously on the given queue. + + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @return A new pending promise. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + async:(FBLPromiseAsyncWorkBlock)work NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `async` operators. + Usage: FBLPromise.async(^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) { ... }) + */ +@interface FBLPromise(DotSyntax_AsyncAdditions) + ++ (FBLPromise* (^)(FBLPromiseAsyncWorkBlock))async FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, FBLPromiseAsyncWorkBlock))asyncOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Await.h b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Await.h new file mode 100644 index 0000000..c97a1ba --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Await.h @@ -0,0 +1,32 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + Waits for promise resolution. The current thread blocks until the promise is resolved. + + @param promise Promise to wait for. + @param error Error the promise was rejected with, or `nil` if the promise was fulfilled. + @return Value the promise was fulfilled with. If the promise was rejected, the return value + is always `nil`, but the error out arg is not. + */ +FOUNDATION_EXTERN id __nullable FBLPromiseAwait(FBLPromise *promise, + NSError **error) NS_REFINED_FOR_SWIFT; + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Catch.h b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Catch.h new file mode 100644 index 0000000..a9ff170 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Catch.h @@ -0,0 +1,59 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(CatchAdditions) + +typedef void (^FBLPromiseCatchWorkBlock)(NSError *error) NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise which eventually gets resolved with same resolution as the receiver. + If receiver is rejected, then `reject` block is executed asynchronously. + + @param reject A block to handle the error that receiver was rejected with. + @return A new pending promise. + */ +- (FBLPromise *)catch:(FBLPromiseCatchWorkBlock)reject NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise which eventually gets resolved with same resolution as the receiver. + If receiver is rejected, then `reject` block is executed asynchronously on the given queue. + + @param queue A queue to invoke the `reject` block on. + @param reject A block to handle the error that receiver was rejected with. + @return A new pending promise. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + catch:(FBLPromiseCatchWorkBlock)reject NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `catch` operators. + Usage: promise.catch(^(NSError *error) { ... }) + */ +@interface FBLPromise(DotSyntax_CatchAdditions) + +- (FBLPromise* (^)(FBLPromiseCatchWorkBlock))catch FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise* (^)(dispatch_queue_t, FBLPromiseCatchWorkBlock))catchOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Delay.h b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Delay.h new file mode 100644 index 0000000..557df48 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Delay.h @@ -0,0 +1,59 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(DelayAdditions) + +/** + Creates a new pending promise that fulfills with the same value as `self` after the `delay`, or + rejects with the same error immediately. + + @param interval Time to wait in seconds. + @return A new pending promise that fulfills at least `delay` seconds later than `self`, or rejects + with the same error immediately. + */ +- (FBLPromise *)delay:(NSTimeInterval)interval NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a new pending promise that fulfills with the same value as `self` after the `delay`, or + rejects with the same error immediately. + + @param queue A queue to dispatch on. + @param interval Time to wait in seconds. + @return A new pending promise that fulfills at least `delay` seconds later than `self`, or rejects + with the same error immediately. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + delay:(NSTimeInterval)interval NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `delay` operators. + Usage: promise.delay(...) + */ +@interface FBLPromise(DotSyntax_DelayAdditions) + +- (FBLPromise * (^)(NSTimeInterval))delay FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise * (^)(dispatch_queue_t, NSTimeInterval))delayOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Do.h b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Do.h new file mode 100644 index 0000000..6838e0a --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Do.h @@ -0,0 +1,55 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(DoAdditions) + +typedef id __nullable (^FBLPromiseDoWorkBlock)(void) NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise and executes `work` block asynchronously. + + @param work A block that returns a value or an error used to resolve the promise. + @return A new pending promise. + */ ++ (instancetype)do:(FBLPromiseDoWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise and executes `work` block asynchronously on the given queue. + + @param queue A queue to invoke the `work` block on. + @param work A block that returns a value or an error used to resolve the promise. + @return A new pending promise. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue do:(FBLPromiseDoWorkBlock)work NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `do` operators. + Usage: FBLPromise.doOn(queue, ^(NSError *error) { ... }) + */ +@interface FBLPromise(DotSyntax_DoAdditions) + ++ (FBLPromise * (^)(dispatch_queue_t, FBLPromiseDoWorkBlock))doOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Race.h b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Race.h new file mode 100644 index 0000000..2f67258 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Race.h @@ -0,0 +1,62 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(RaceAdditions) + +/** + Wait until any of the given promises are fulfilled. + If one of the promises is rejected, then the returned promise is rejected with same error. + If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, + it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly. + + @param promises Promises to wait for. + @return A new pending promise to be resolved with the same resolution as the first promise, among + the given ones, which was resolved. + */ ++ (instancetype)race:(NSArray *)promises NS_SWIFT_UNAVAILABLE(""); + +/** + Wait until any of the given promises are fulfilled. + If one of the promises is rejected, then the returned promise is rejected with same error. + If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, + it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly. + + @param queue A queue to dispatch on. + @param promises Promises to wait for. + @return A new pending promise to be resolved with the same resolution as the first promise, among + the given ones, which was resolved. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue race:(NSArray *)promises NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `race` operators. + Usage: FBLPromise.race(@[ ... ]) + */ +@interface FBLPromise(DotSyntax_RaceAdditions) + ++ (FBLPromise * (^)(NSArray *))race FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise * (^)(dispatch_queue_t, NSArray *))raceOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Recover.h b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Recover.h new file mode 100644 index 0000000..bb7df7e --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Recover.h @@ -0,0 +1,60 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(RecoverAdditions) + +typedef id __nullable (^FBLPromiseRecoverWorkBlock)(NSError *error) NS_SWIFT_UNAVAILABLE(""); + +/** + Provides a new promise to recover in case the receiver gets rejected. + + @param recovery A block to handle the error that the receiver was rejected with. + @return A new pending promise to use instead of the rejected one that gets resolved with resolution + returned from `recovery` block. + */ +- (FBLPromise *)recover:(FBLPromiseRecoverWorkBlock)recovery NS_SWIFT_UNAVAILABLE(""); + +/** + Provides a new promise to recover in case the receiver gets rejected. + + @param queue A queue to dispatch on. + @param recovery A block to handle the error that the receiver was rejected with. + @return A new pending promise to use instead of the rejected one that gets resolved with resolution + returned from `recovery` block. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + recover:(FBLPromiseRecoverWorkBlock)recovery NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `recover` operators. + Usage: promise.recover(^id(NSError *error) {...}) + */ +@interface FBLPromise(DotSyntax_RecoverAdditions) + +- (FBLPromise * (^)(FBLPromiseRecoverWorkBlock))recover FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise * (^)(dispatch_queue_t, FBLPromiseRecoverWorkBlock))recoverOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Reduce.h b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Reduce.h new file mode 100644 index 0000000..5bb1eee --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Reduce.h @@ -0,0 +1,71 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(ReduceAdditions) + +typedef id __nullable (^FBLPromiseReducerBlock)(Value __nullable partial, id next) + NS_SWIFT_UNAVAILABLE(""); + +/** + Sequentially reduces a collection of values to a single promise using a given combining block + and the value `self` resolves with as initial value. + + @param items An array of values to process in order. + @param reducer A block to combine an accumulating value and an element of the sequence into + the new accumulating value or a promise resolved with it, to be used in the next + call of the `reducer` or returned to the caller. + @return A new pending promise returned from the last `reducer` invocation. + Or `self` if `items` is empty. + */ +- (FBLPromise *)reduce:(NSArray *)items + combine:(FBLPromiseReducerBlock)reducer NS_SWIFT_UNAVAILABLE(""); + +/** + Sequentially reduces a collection of values to a single promise using a given combining block + and the value `self` resolves with as initial value. + + @param queue A queue to dispatch on. + @param items An array of values to process in order. + @param reducer A block to combine an accumulating value and an element of the sequence into + the new accumulating value or a promise resolved with it, to be used in the next + call of the `reducer` or returned to the caller. + @return A new pending promise returned from the last `reducer` invocation. + Or `self` if `items` is empty. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + reduce:(NSArray *)items + combine:(FBLPromiseReducerBlock)reducer NS_SWIFT_UNAVAILABLE(""); + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `reduce` operators. + Usage: promise.reduce(values, ^id(id partial, id next) { ... }) + */ +@interface FBLPromise(DotSyntax_ReduceAdditions) + +- (FBLPromise * (^)(NSArray *, FBLPromiseReducerBlock))reduce FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise * (^)(dispatch_queue_t, NSArray *, FBLPromiseReducerBlock))reduceOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Retry.h b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Retry.h new file mode 100644 index 0000000..414a17a --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Retry.h @@ -0,0 +1,165 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +/** The default number of retry attempts is 1. */ +FOUNDATION_EXTERN NSInteger const FBLPromiseRetryDefaultAttemptsCount NS_REFINED_FOR_SWIFT; + +/** The default delay interval before making a retry attempt is 1.0 second. */ +FOUNDATION_EXTERN NSTimeInterval const FBLPromiseRetryDefaultDelayInterval NS_REFINED_FOR_SWIFT; + +@interface FBLPromise(RetryAdditions) + +typedef id __nullable (^FBLPromiseRetryWorkBlock)(void) NS_SWIFT_UNAVAILABLE(""); +typedef BOOL (^FBLPromiseRetryPredicateBlock)(NSInteger, NSError *) NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise that fulfills with the same value as the promise returned from `work` + block, which executes asynchronously, or rejects with the same error after all retry attempts have + been exhausted. Defaults to `FBLPromiseRetryDefaultAttemptsCount` attempt(s) on rejection where the + `work` block is retried after a delay of `FBLPromiseRetryDefaultDelayInterval` second(s). + + @param work A block that executes asynchronously on the default queue and returns a value or an + error used to resolve the promise. + @return A new pending promise that fulfills with the same value as the promise returned from `work` + block, or rejects with the same error after all retry attempts have been exhausted. + */ ++ (instancetype)retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise that fulfills with the same value as the promise returned from `work` + block, which executes asynchronously on the given `queue`, or rejects with the same error after all + retry attempts have been exhausted. Defaults to `FBLPromiseRetryDefaultAttemptsCount` attempt(s) on + rejection where the `work` block is retried on the given `queue` after a delay of + `FBLPromiseRetryDefaultDelayInterval` second(s). + + @param queue A queue to invoke the `work` block on. + @param work A block that executes asynchronously on the given `queue` and returns a value or an + error used to resolve the promise. + @return A new pending promise that fulfills with the same value as the promise returned from `work` + block, or rejects with the same error after all retry attempts have been exhausted. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise that fulfills with the same value as the promise returned from `work` + block, which executes asynchronously, or rejects with the same error after all retry attempts have + been exhausted. + + @param count Max number of retry attempts. The `work` block will be executed once if the specified + count is less than or equal to zero. + @param work A block that executes asynchronously on the default queue and returns a value or an + error used to resolve the promise. + @return A new pending promise that fulfills with the same value as the promise returned from `work` + block, or rejects with the same error after all retry attempts have been exhausted. + */ ++ (instancetype)attempts:(NSInteger)count + retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise that fulfills with the same value as the promise returned from `work` + block, which executes asynchronously on the given `queue`, or rejects with the same error after all + retry attempts have been exhausted. + + @param queue A queue to invoke the `work` block on. + @param count Max number of retry attempts. The `work` block will be executed once if the specified + count is less than or equal to zero. + @param work A block that executes asynchronously on the given `queue` and returns a value or an + error used to resolve the promise. + @return A new pending promise that fulfills with the same value as the promise returned from `work` + block, or rejects with the same error after all retry attempts have been exhausted. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + attempts:(NSInteger)count + retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise that fulfills with the same value as the promise returned from `work` + block, which executes asynchronously, or rejects with the same error after all retry attempts have + been exhausted. On rejection, the `work` block is retried after the given delay `interval` and will + continue to retry until the number of specified attempts have been exhausted or will bail early if + the given condition is not met. + + @param count Max number of retry attempts. The `work` block will be executed once if the specified + count is less than or equal to zero. + @param interval Time to wait before the next retry attempt. + @param predicate Condition to check before the next retry attempt. The predicate block provides the + the number of remaining retry attempts and the error that the promise was rejected + with. + @param work A block that executes asynchronously on the default queue and returns a value or an + error used to resolve the promise. + @return A new pending promise that fulfills with the same value as the promise returned from `work` + block, or rejects with the same error after all retry attempts have been exhausted or if + the given condition is not met. + */ ++ (instancetype)attempts:(NSInteger)count + delay:(NSTimeInterval)interval + condition:(nullable FBLPromiseRetryPredicateBlock)predicate + retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise that fulfills with the same value as the promise returned from `work` + block, which executes asynchronously on the given `queue`, or rejects with the same error after all + retry attempts have been exhausted. On rejection, the `work` block is retried after the given + delay `interval` and will continue to retry until the number of specified attempts have been + exhausted or will bail early if the given condition is not met. + + @param queue A queue to invoke the `work` block on. + @param count Max number of retry attempts. The `work` block will be executed once if the specified + count is less than or equal to zero. + @param interval Time to wait before the next retry attempt. + @param predicate Condition to check before the next retry attempt. The predicate block provides the + the number of remaining retry attempts and the error that the promise was rejected + with. + @param work A block that executes asynchronously on the given `queue` and returns a value or an + error used to resolve the promise. + @return A new pending promise that fulfills with the same value as the promise returned from `work` + block, or rejects with the same error after all retry attempts have been exhausted or if + the given condition is not met. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + attempts:(NSInteger)count + delay:(NSTimeInterval)interval + condition:(nullable FBLPromiseRetryPredicateBlock)predicate + retry:(FBLPromiseRetryWorkBlock)work NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise+Retry` operators. + Usage: FBLPromise.retry(^id { ... }) + */ +@interface FBLPromise(DotSyntax_RetryAdditions) + ++ (FBLPromise * (^)(FBLPromiseRetryWorkBlock))retry FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise * (^)(dispatch_queue_t, FBLPromiseRetryWorkBlock))retryOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise * (^)(NSInteger, NSTimeInterval, FBLPromiseRetryPredicateBlock __nullable, + FBLPromiseRetryWorkBlock))retryAgain FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise * (^)(dispatch_queue_t, NSInteger, NSTimeInterval, + FBLPromiseRetryPredicateBlock __nullable, + FBLPromiseRetryWorkBlock))retryAgainOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Testing.h b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Testing.h new file mode 100644 index 0000000..8478ae2 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Testing.h @@ -0,0 +1,57 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + Waits for all scheduled promises blocks. + + @param timeout Maximum time to wait. + @return YES if all promises blocks have completed before the timeout and NO otherwise. + */ +FOUNDATION_EXTERN BOOL FBLWaitForPromisesWithTimeout(NSTimeInterval timeout) NS_REFINED_FOR_SWIFT; + +@interface FBLPromise(TestingAdditions) + +/** + Dispatch group for promises that is typically used to wait for all scheduled blocks. + */ +@property(class, nonatomic, readonly) dispatch_group_t dispatchGroup NS_REFINED_FOR_SWIFT; + +/** + Properties to get the current state of the promise. + */ +@property(nonatomic, readonly) BOOL isPending NS_REFINED_FOR_SWIFT; +@property(nonatomic, readonly) BOOL isFulfilled NS_REFINED_FOR_SWIFT; +@property(nonatomic, readonly) BOOL isRejected NS_REFINED_FOR_SWIFT; + +/** + Value the promise was fulfilled with. + Can be nil if the promise is still pending, was resolved with nil or after it has been rejected. + */ +@property(nonatomic, readonly, nullable) Value value NS_REFINED_FOR_SWIFT; + +/** + Error the promise was rejected with. + Can be nil if the promise is still pending or after it has been fulfilled. + */ +@property(nonatomic, readonly, nullable) NSError *error NS_REFINED_FOR_SWIFT; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Then.h b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Then.h new file mode 100644 index 0000000..32027e6 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Then.h @@ -0,0 +1,63 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(ThenAdditions) + +typedef id __nullable (^FBLPromiseThenWorkBlock)(Value __nullable value) NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise which eventually gets resolved with resolution returned from `work` + block: either value, error or another promise. The `work` block is executed asynchronously only + when the receiver is fulfilled. If receiver is rejected, the returned promise is also rejected with + the same error. + + @param work A block to handle the value that receiver was fulfilled with. + @return A new pending promise to be resolved with resolution returned from the `work` block. + */ +- (FBLPromise *)then:(FBLPromiseThenWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise which eventually gets resolved with resolution returned from `work` + block: either value, error or another promise. The `work` block is executed asynchronously when the + receiver is fulfilled. If receiver is rejected, the returned promise is also rejected with the same + error. + + @param queue A queue to invoke the `work` block on. + @param work A block to handle the value that receiver was fulfilled with. + @return A new pending promise to be resolved with resolution returned from the `work` block. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + then:(FBLPromiseThenWorkBlock)work NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `then` operators. + Usage: promise.then(^id(id value) { ... }) + */ +@interface FBLPromise(DotSyntax_ThenAdditions) + +- (FBLPromise* (^)(FBLPromiseThenWorkBlock))then FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise* (^)(dispatch_queue_t, FBLPromiseThenWorkBlock))thenOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Timeout.h b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Timeout.h new file mode 100644 index 0000000..184ba16 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Timeout.h @@ -0,0 +1,57 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(TimeoutAdditions) + +/** + Waits for a promise with the specified `timeout`. + + @param interval Time to wait in seconds. + @return A new pending promise that gets either resolved with same resolution as the receiver or + rejected with `FBLPromiseErrorCodeTimedOut` error code in `FBLPromiseErrorDomain`. + */ +- (FBLPromise *)timeout:(NSTimeInterval)interval NS_SWIFT_UNAVAILABLE(""); + +/** + Waits for a promise with the specified `timeout`. + + @param queue A queue to dispatch on. + @param interval Time to wait in seconds. + @return A new pending promise that gets either resolved with same resolution as the receiver or + rejected with `FBLPromiseErrorCodeTimedOut` error code in `FBLPromiseErrorDomain`. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + timeout:(NSTimeInterval)interval NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `timeout` operators. + Usage: promise.timeout(...) + */ +@interface FBLPromise(DotSyntax_TimeoutAdditions) + +- (FBLPromise* (^)(NSTimeInterval))timeout FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise* (^)(dispatch_queue_t, NSTimeInterval))timeoutOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Validate.h b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Validate.h new file mode 100644 index 0000000..9dfa2f1 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Validate.h @@ -0,0 +1,60 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(ValidateAdditions) + +typedef BOOL (^FBLPromiseValidateWorkBlock)(Value __nullable value) NS_SWIFT_UNAVAILABLE(""); + +/** + Validates a fulfilled value or rejects the value if it can not be validated. + + @param predicate An expression to validate. + @return A new pending promise that gets either resolved with same resolution as the receiver or + rejected with `FBLPromiseErrorCodeValidationFailure` error code in `FBLPromiseErrorDomain`. + */ +- (FBLPromise *)validate:(FBLPromiseValidateWorkBlock)predicate NS_SWIFT_UNAVAILABLE(""); + +/** + Validates a fulfilled value or rejects the value if it can not be validated. + + @param queue A queue to dispatch on. + @param predicate An expression to validate. + @return A new pending promise that gets either resolved with same resolution as the receiver or + rejected with `FBLPromiseErrorCodeValidationFailure` error code in `FBLPromiseErrorDomain`. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + validate:(FBLPromiseValidateWorkBlock)predicate NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `validate` operators. + Usage: promise.validate(^BOOL(id value) { ... }) + */ +@interface FBLPromise(DotSyntax_ValidateAdditions) + +- (FBLPromise * (^)(FBLPromiseValidateWorkBlock))validate FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise * (^)(dispatch_queue_t, FBLPromiseValidateWorkBlock))validateOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Wrap.h b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Wrap.h new file mode 100644 index 0000000..664e1bb --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Wrap.h @@ -0,0 +1,316 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + Different types of completion handlers available to be wrapped with promise. + */ +typedef void (^FBLPromiseCompletion)(void) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseObjectCompletion)(id __nullable) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseErrorCompletion)(NSError* __nullable) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseObjectOrErrorCompletion)(id __nullable, NSError* __nullable) + NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseErrorOrObjectCompletion)(NSError* __nullable, id __nullable) + NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromise2ObjectsOrErrorCompletion)(id __nullable, id __nullable, + NSError* __nullable) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseBoolCompletion)(BOOL) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseBoolOrErrorCompletion)(BOOL, NSError* __nullable) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseIntegerCompletion)(NSInteger) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseIntegerOrErrorCompletion)(NSInteger, NSError* __nullable) + NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseDoubleCompletion)(double) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseDoubleOrErrorCompletion)(double, NSError* __nullable) + NS_SWIFT_UNAVAILABLE(""); + +/** + Provides an easy way to convert methods that use common callback patterns into promises. + */ +@interface FBLPromise(WrapAdditions) + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with `nil` when completion handler is invoked. + */ ++ (instancetype)wrapCompletion:(void (^)(FBLPromiseCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with `nil` when completion handler is invoked. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + wrapCompletion:(void (^)(FBLPromiseCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an object provided by completion handler. + */ ++ (instancetype)wrapObjectCompletion:(void (^)(FBLPromiseObjectCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an object provided by completion handler. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + wrapObjectCompletion:(void (^)(FBLPromiseObjectCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an error provided by completion handler. + If error is `nil`, fulfills with `nil`, otherwise rejects with the error. + */ ++ (instancetype)wrapErrorCompletion:(void (^)(FBLPromiseErrorCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an error provided by completion handler. + If error is `nil`, fulfills with `nil`, otherwise rejects with the error. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + wrapErrorCompletion:(void (^)(FBLPromiseErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an object provided by completion handler if error is `nil`. + Otherwise, rejects with the error. + */ ++ (instancetype)wrapObjectOrErrorCompletion: + (void (^)(FBLPromiseObjectOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an object provided by completion handler if error is `nil`. + Otherwise, rejects with the error. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + wrapObjectOrErrorCompletion:(void (^)(FBLPromiseObjectOrErrorCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an error or object provided by completion handler. If error + is not `nil`, rejects with the error. + */ ++ (instancetype)wrapErrorOrObjectCompletion: + (void (^)(FBLPromiseErrorOrObjectCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an error or object provided by completion handler. If error + is not `nil`, rejects with the error. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + wrapErrorOrObjectCompletion:(void (^)(FBLPromiseErrorOrObjectCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an array of objects provided by completion handler in order + if error is `nil`. Otherwise, rejects with the error. + */ ++ (FBLPromise*)wrap2ObjectsOrErrorCompletion: + (void (^)(FBLPromise2ObjectsOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an array of objects provided by completion handler in order + if error is `nil`. Otherwise, rejects with the error. + */ ++ (FBLPromise*)onQueue:(dispatch_queue_t)queue + wrap2ObjectsOrErrorCompletion:(void (^)(FBLPromise2ObjectsOrErrorCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping YES/NO. + */ ++ (FBLPromise*)wrapBoolCompletion:(void (^)(FBLPromiseBoolCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping YES/NO. + */ ++ (FBLPromise*)onQueue:(dispatch_queue_t)queue + wrapBoolCompletion:(void (^)(FBLPromiseBoolCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping YES/NO when error is `nil`. + Otherwise rejects with the error. + */ ++ (FBLPromise*)wrapBoolOrErrorCompletion: + (void (^)(FBLPromiseBoolOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping YES/NO when error is `nil`. + Otherwise rejects with the error. + */ ++ (FBLPromise*)onQueue:(dispatch_queue_t)queue + wrapBoolOrErrorCompletion:(void (^)(FBLPromiseBoolOrErrorCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping an integer. + */ ++ (FBLPromise*)wrapIntegerCompletion:(void (^)(FBLPromiseIntegerCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping an integer. + */ ++ (FBLPromise*)onQueue:(dispatch_queue_t)queue + wrapIntegerCompletion:(void (^)(FBLPromiseIntegerCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping an integer when error is `nil`. + Otherwise rejects with the error. + */ ++ (FBLPromise*)wrapIntegerOrErrorCompletion: + (void (^)(FBLPromiseIntegerOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping an integer when error is `nil`. + Otherwise rejects with the error. + */ ++ (FBLPromise*)onQueue:(dispatch_queue_t)queue + wrapIntegerOrErrorCompletion:(void (^)(FBLPromiseIntegerOrErrorCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping a double. + */ ++ (FBLPromise*)wrapDoubleCompletion:(void (^)(FBLPromiseDoubleCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping a double. + */ ++ (FBLPromise*)onQueue:(dispatch_queue_t)queue + wrapDoubleCompletion:(void (^)(FBLPromiseDoubleCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping a double when error is `nil`. + Otherwise rejects with the error. + */ ++ (FBLPromise*)wrapDoubleOrErrorCompletion: + (void (^)(FBLPromiseDoubleOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping a double when error is `nil`. + Otherwise rejects with the error. + */ ++ (FBLPromise*)onQueue:(dispatch_queue_t)queue + wrapDoubleOrErrorCompletion:(void (^)(FBLPromiseDoubleOrErrorCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `wrap` operators. + Usage: FBLPromise.wrapCompletion(^(FBLPromiseCompletion handler) {...}) + */ +@interface FBLPromise(DotSyntax_WrapAdditions) + ++ (FBLPromise* (^)(void (^)(FBLPromiseCompletion)))wrapCompletion FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromiseCompletion)))wrapCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseObjectCompletion)))wrapObjectCompletion + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromiseObjectCompletion)))wrapObjectCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseErrorCompletion)))wrapErrorCompletion FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromiseErrorCompletion)))wrapErrorCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseObjectOrErrorCompletion)))wrapObjectOrErrorCompletion + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, + void (^)(FBLPromiseObjectOrErrorCompletion)))wrapObjectOrErrorCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseErrorOrObjectCompletion)))wrapErrorOrObjectCompletion + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, + void (^)(FBLPromiseErrorOrObjectCompletion)))wrapErrorOrObjectCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromise2ObjectsOrErrorCompletion))) + wrap2ObjectsOrErrorCompletion FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromise2ObjectsOrErrorCompletion))) + wrap2ObjectsOrErrorCompletionOn FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseBoolCompletion)))wrapBoolCompletion + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, + void (^)(FBLPromiseBoolCompletion)))wrapBoolCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseBoolOrErrorCompletion)))wrapBoolOrErrorCompletion + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, + void (^)(FBLPromiseBoolOrErrorCompletion)))wrapBoolOrErrorCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseIntegerCompletion)))wrapIntegerCompletion + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, + void (^)(FBLPromiseIntegerCompletion)))wrapIntegerCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseIntegerOrErrorCompletion))) + wrapIntegerOrErrorCompletion FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromiseIntegerOrErrorCompletion))) + wrapIntegerOrErrorCompletionOn FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseDoubleCompletion)))wrapDoubleCompletion + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, + void (^)(FBLPromiseDoubleCompletion)))wrapDoubleCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseDoubleOrErrorCompletion))) + wrapDoubleOrErrorCompletion FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromiseDoubleOrErrorCompletion))) + wrapDoubleOrErrorCompletionOn FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise.h b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise.h new file mode 100644 index 0000000..b1380dc --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise.h @@ -0,0 +1,93 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromiseError.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + Promises synchronization construct in Objective-C. + */ +@interface FBLPromise<__covariant Value> : NSObject + +/** + Default dispatch queue used for `FBLPromise`, which is `main` if a queue is not specified. + */ +@property(class) dispatch_queue_t defaultDispatchQueue NS_REFINED_FOR_SWIFT; + +/** + Creates a pending promise. + */ ++ (instancetype)pendingPromise NS_REFINED_FOR_SWIFT; + +/** + Creates a resolved promise. + + @param resolution An object to resolve the promise with: either a value or an error. + @return A new resolved promise. + */ ++ (instancetype)resolvedWith:(nullable id)resolution NS_REFINED_FOR_SWIFT; + +/** + Synchronously fulfills the promise with a value. + + @param value An arbitrary value to fulfill the promise with, including `nil`. + */ +- (void)fulfill:(nullable Value)value NS_REFINED_FOR_SWIFT; + +/** + Synchronously rejects the promise with an error. + + @param error An error to reject the promise with. + */ +- (void)reject:(NSError *)error NS_REFINED_FOR_SWIFT; + ++ (instancetype)new NS_UNAVAILABLE; +- (instancetype)init NS_UNAVAILABLE; +@end + +@interface FBLPromise() + +/** + Adds an object to the set of pending objects to keep strongly while the promise is pending. + Used by the Swift wrappers to keep them alive until the underlying ObjC promise is resolved. + + @param object An object to add. + */ +- (void)addPendingObject:(id)object NS_REFINED_FOR_SWIFT; + +@end + +#ifdef FBL_PROMISES_DOT_SYNTAX_IS_DEPRECATED +#define FBL_PROMISES_DOT_SYNTAX __attribute__((deprecated)) +#else +#define FBL_PROMISES_DOT_SYNTAX +#endif + +@interface FBLPromise(DotSyntaxAdditions) + +/** + Convenience dot-syntax wrappers for FBLPromise. + Usage: FBLPromise.pending() + FBLPromise.resolved(value) + + */ ++ (instancetype (^)(void))pending FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (instancetype (^)(id __nullable))resolved FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromiseError.h b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromiseError.h new file mode 100644 index 0000000..d37af53 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromiseError.h @@ -0,0 +1,43 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import + +NS_ASSUME_NONNULL_BEGIN + +FOUNDATION_EXTERN NSErrorDomain const FBLPromiseErrorDomain NS_REFINED_FOR_SWIFT; + +/** + Possible error codes in `FBLPromiseErrorDomain`. + */ +typedef NS_ENUM(NSInteger, FBLPromiseErrorCode) { + /** Promise failed to resolve in time. */ + FBLPromiseErrorCodeTimedOut = 1, + /** Validation predicate returned false. */ + FBLPromiseErrorCodeValidationFailure = 2, +} NS_REFINED_FOR_SWIFT; + +NS_INLINE BOOL FBLPromiseErrorIsTimedOut(NSError *error) NS_SWIFT_UNAVAILABLE("") { + return error.domain == FBLPromiseErrorDomain && + error.code == FBLPromiseErrorCodeTimedOut; +} + +NS_INLINE BOOL FBLPromiseErrorIsValidationFailure(NSError *error) NS_SWIFT_UNAVAILABLE("") { + return error.domain == FBLPromiseErrorDomain && + error.code == FBLPromiseErrorCodeValidationFailure; +} + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromises.h b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromises.h new file mode 100644 index 0000000..2d90bad --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromises.h @@ -0,0 +1,32 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise+All.h" +#import "FBLPromise+Always.h" +#import "FBLPromise+Any.h" +#import "FBLPromise+Async.h" +#import "FBLPromise+Await.h" +#import "FBLPromise+Catch.h" +#import "FBLPromise+Delay.h" +#import "FBLPromise+Do.h" +#import "FBLPromise+Race.h" +#import "FBLPromise+Recover.h" +#import "FBLPromise+Reduce.h" +#import "FBLPromise+Retry.h" +#import "FBLPromise+Then.h" +#import "FBLPromise+Timeout.h" +#import "FBLPromise+Validate.h" +#import "FBLPromise+Wrap.h" diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/PromisesObjC-umbrella.h b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/PromisesObjC-umbrella.h new file mode 100644 index 0000000..5b014a8 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Headers/PromisesObjC-umbrella.h @@ -0,0 +1,36 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "FBLPromise+All.h" +#import "FBLPromise+Always.h" +#import "FBLPromise+Any.h" +#import "FBLPromise+Async.h" +#import "FBLPromise+Await.h" +#import "FBLPromise+Catch.h" +#import "FBLPromise+Delay.h" +#import "FBLPromise+Do.h" +#import "FBLPromise+Race.h" +#import "FBLPromise+Recover.h" +#import "FBLPromise+Reduce.h" +#import "FBLPromise+Retry.h" +#import "FBLPromise+Testing.h" +#import "FBLPromise+Then.h" +#import "FBLPromise+Timeout.h" +#import "FBLPromise+Validate.h" +#import "FBLPromise+Wrap.h" +#import "FBLPromise.h" +#import "FBLPromiseError.h" +#import "FBLPromises.h" + +FOUNDATION_EXPORT double FBLPromisesVersionNumber; +FOUNDATION_EXPORT const unsigned char FBLPromisesVersionString[]; + diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Info.plist b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Info.plist new file mode 100644 index 0000000..a963a05 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleExecutable + FBLPromises + CFBundleIdentifier + com.firebase.Firebase-FBLPromises + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + FBLPromises + CFBundlePackageType + FMWK + CFBundleVersion + 2.2.0 + DTSDKName + iphonesimulator11.2 + + diff --git a/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Modules/module.modulemap b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Modules/module.modulemap new file mode 100644 index 0000000..bd7b48e --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/ios-arm64_x86_64-simulator/FBLPromises.framework/Modules/module.modulemap @@ -0,0 +1,5 @@ +framework module PromisesObjC { +umbrella header "PromisesObjC-umbrella.h" +export * +module * { export * } +} diff --git a/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/FBLPromises b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/FBLPromises new file mode 100644 index 0000000000000000000000000000000000000000..37867fbac25b2fbaf7c0440daaea11ec4546c04b GIT binary patch literal 455280 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 Jr!_$x{y&(&P^|y} literal 0 HcmV?d00001 diff --git a/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+All.h b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+All.h new file mode 100644 index 0000000..9c0090e --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+All.h @@ -0,0 +1,63 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(AllAdditions) + +/** + Wait until all of the given promises are fulfilled. + If one of the given promises is rejected, then the returned promise is rejected with same error. + If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, + it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly. + Promises resolved with `nil` become `NSNull` instances in the resulting array. + + @param promises Promises to wait for. + @return Promise of an array containing the values of input promises in the same order. + */ ++ (FBLPromise *)all:(NSArray *)promises NS_SWIFT_UNAVAILABLE(""); + +/** + Wait until all of the given promises are fulfilled. + If one of the given promises is rejected, then the returned promise is rejected with same error. + If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, + it's implicitly considered a pre-fulfilled or pre-rejected FBLPromise correspondingly. + Promises resolved with `nil` become `NSNull` instances in the resulting array. + + @param queue A queue to dispatch on. + @param promises Promises to wait for. + @return Promise of an array containing the values of input promises in the same order. + */ ++ (FBLPromise *)onQueue:(dispatch_queue_t)queue + all:(NSArray *)promises NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `all` operators. + Usage: FBLPromise.all(@[ ... ]) + */ +@interface FBLPromise(DotSyntax_AllAdditions) + ++ (FBLPromise * (^)(NSArray *))all FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise * (^)(dispatch_queue_t, NSArray *))allOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Always.h b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Always.h new file mode 100644 index 0000000..13000f5 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Always.h @@ -0,0 +1,54 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(AlwaysAdditions) + +typedef void (^FBLPromiseAlwaysWorkBlock)(void) NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block that always executes, no matter if the receiver is rejected or fulfilled. + @return A new pending promise to be resolved with same resolution as the receiver. + */ +- (FBLPromise *)always:(FBLPromiseAlwaysWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to dispatch on. + @param work A block that always executes, no matter if the receiver is rejected or fulfilled. + @return A new pending promise to be resolved with same resolution as the receiver. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + always:(FBLPromiseAlwaysWorkBlock)work NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `always` operators. + Usage: promise.always(^{...}) + */ +@interface FBLPromise(DotSyntax_AlwaysAdditions) + +- (FBLPromise* (^)(FBLPromiseAlwaysWorkBlock))always FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise* (^)(dispatch_queue_t, FBLPromiseAlwaysWorkBlock))alwaysOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Any.h b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Any.h new file mode 100644 index 0000000..82875bf --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Any.h @@ -0,0 +1,69 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(AnyAdditions) + +/** + Waits until all of the given promises are either fulfilled or rejected. + If all promises are rejected, then the returned promise is rejected with same error + as the last one rejected. + If at least one of the promises is fulfilled, the resulting promise is fulfilled with an array of + values or `NSErrors`, matching the original order of fulfilled or rejected promises respectively. + If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, + it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly. + Promises resolved with `nil` become `NSNull` instances in the resulting array. + + @param promises Promises to wait for. + @return Promise of array containing the values or `NSError`s of input promises in the same order. + */ ++ (FBLPromise *)any:(NSArray *)promises NS_SWIFT_UNAVAILABLE(""); + +/** + Waits until all of the given promises are either fulfilled or rejected. + If all promises are rejected, then the returned promise is rejected with same error + as the last one rejected. + If at least one of the promises is fulfilled, the resulting promise is fulfilled with an array of + values or `NSError`s, matching the original order of fulfilled or rejected promises respectively. + If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, + it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly. + Promises resolved with `nil` become `NSNull` instances in the resulting array. + + @param queue A queue to dispatch on. + @param promises Promises to wait for. + @return Promise of array containing the values or `NSError`s of input promises in the same order. + */ ++ (FBLPromise *)onQueue:(dispatch_queue_t)queue + any:(NSArray *)promises NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `any` operators. + Usage: FBLPromise.any(@[ ... ]) + */ +@interface FBLPromise(DotSyntax_AnyAdditions) + ++ (FBLPromise * (^)(NSArray *))any FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise * (^)(dispatch_queue_t, NSArray *))anyOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Async.h b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Async.h new file mode 100644 index 0000000..0588a9e --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Async.h @@ -0,0 +1,60 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(AsyncAdditions) + +typedef void (^FBLPromiseFulfillBlock)(Value __nullable value) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseRejectBlock)(NSError *error) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseAsyncWorkBlock)(FBLPromiseFulfillBlock fulfill, + FBLPromiseRejectBlock reject) NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise and executes `work` block asynchronously. + + @param work A block to perform any operations needed to resolve the promise. + @return A new pending promise. + */ ++ (instancetype)async:(FBLPromiseAsyncWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise and executes `work` block asynchronously on the given queue. + + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @return A new pending promise. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + async:(FBLPromiseAsyncWorkBlock)work NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `async` operators. + Usage: FBLPromise.async(^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) { ... }) + */ +@interface FBLPromise(DotSyntax_AsyncAdditions) + ++ (FBLPromise* (^)(FBLPromiseAsyncWorkBlock))async FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, FBLPromiseAsyncWorkBlock))asyncOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Await.h b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Await.h new file mode 100644 index 0000000..c97a1ba --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Await.h @@ -0,0 +1,32 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + Waits for promise resolution. The current thread blocks until the promise is resolved. + + @param promise Promise to wait for. + @param error Error the promise was rejected with, or `nil` if the promise was fulfilled. + @return Value the promise was fulfilled with. If the promise was rejected, the return value + is always `nil`, but the error out arg is not. + */ +FOUNDATION_EXTERN id __nullable FBLPromiseAwait(FBLPromise *promise, + NSError **error) NS_REFINED_FOR_SWIFT; + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Catch.h b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Catch.h new file mode 100644 index 0000000..a9ff170 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Catch.h @@ -0,0 +1,59 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(CatchAdditions) + +typedef void (^FBLPromiseCatchWorkBlock)(NSError *error) NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise which eventually gets resolved with same resolution as the receiver. + If receiver is rejected, then `reject` block is executed asynchronously. + + @param reject A block to handle the error that receiver was rejected with. + @return A new pending promise. + */ +- (FBLPromise *)catch:(FBLPromiseCatchWorkBlock)reject NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise which eventually gets resolved with same resolution as the receiver. + If receiver is rejected, then `reject` block is executed asynchronously on the given queue. + + @param queue A queue to invoke the `reject` block on. + @param reject A block to handle the error that receiver was rejected with. + @return A new pending promise. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + catch:(FBLPromiseCatchWorkBlock)reject NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `catch` operators. + Usage: promise.catch(^(NSError *error) { ... }) + */ +@interface FBLPromise(DotSyntax_CatchAdditions) + +- (FBLPromise* (^)(FBLPromiseCatchWorkBlock))catch FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise* (^)(dispatch_queue_t, FBLPromiseCatchWorkBlock))catchOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Delay.h b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Delay.h new file mode 100644 index 0000000..557df48 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Delay.h @@ -0,0 +1,59 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(DelayAdditions) + +/** + Creates a new pending promise that fulfills with the same value as `self` after the `delay`, or + rejects with the same error immediately. + + @param interval Time to wait in seconds. + @return A new pending promise that fulfills at least `delay` seconds later than `self`, or rejects + with the same error immediately. + */ +- (FBLPromise *)delay:(NSTimeInterval)interval NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a new pending promise that fulfills with the same value as `self` after the `delay`, or + rejects with the same error immediately. + + @param queue A queue to dispatch on. + @param interval Time to wait in seconds. + @return A new pending promise that fulfills at least `delay` seconds later than `self`, or rejects + with the same error immediately. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + delay:(NSTimeInterval)interval NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `delay` operators. + Usage: promise.delay(...) + */ +@interface FBLPromise(DotSyntax_DelayAdditions) + +- (FBLPromise * (^)(NSTimeInterval))delay FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise * (^)(dispatch_queue_t, NSTimeInterval))delayOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Do.h b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Do.h new file mode 100644 index 0000000..6838e0a --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Do.h @@ -0,0 +1,55 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(DoAdditions) + +typedef id __nullable (^FBLPromiseDoWorkBlock)(void) NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise and executes `work` block asynchronously. + + @param work A block that returns a value or an error used to resolve the promise. + @return A new pending promise. + */ ++ (instancetype)do:(FBLPromiseDoWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise and executes `work` block asynchronously on the given queue. + + @param queue A queue to invoke the `work` block on. + @param work A block that returns a value or an error used to resolve the promise. + @return A new pending promise. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue do:(FBLPromiseDoWorkBlock)work NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `do` operators. + Usage: FBLPromise.doOn(queue, ^(NSError *error) { ... }) + */ +@interface FBLPromise(DotSyntax_DoAdditions) + ++ (FBLPromise * (^)(dispatch_queue_t, FBLPromiseDoWorkBlock))doOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Race.h b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Race.h new file mode 100644 index 0000000..2f67258 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Race.h @@ -0,0 +1,62 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(RaceAdditions) + +/** + Wait until any of the given promises are fulfilled. + If one of the promises is rejected, then the returned promise is rejected with same error. + If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, + it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly. + + @param promises Promises to wait for. + @return A new pending promise to be resolved with the same resolution as the first promise, among + the given ones, which was resolved. + */ ++ (instancetype)race:(NSArray *)promises NS_SWIFT_UNAVAILABLE(""); + +/** + Wait until any of the given promises are fulfilled. + If one of the promises is rejected, then the returned promise is rejected with same error. + If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, + it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly. + + @param queue A queue to dispatch on. + @param promises Promises to wait for. + @return A new pending promise to be resolved with the same resolution as the first promise, among + the given ones, which was resolved. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue race:(NSArray *)promises NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `race` operators. + Usage: FBLPromise.race(@[ ... ]) + */ +@interface FBLPromise(DotSyntax_RaceAdditions) + ++ (FBLPromise * (^)(NSArray *))race FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise * (^)(dispatch_queue_t, NSArray *))raceOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Recover.h b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Recover.h new file mode 100644 index 0000000..bb7df7e --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Recover.h @@ -0,0 +1,60 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(RecoverAdditions) + +typedef id __nullable (^FBLPromiseRecoverWorkBlock)(NSError *error) NS_SWIFT_UNAVAILABLE(""); + +/** + Provides a new promise to recover in case the receiver gets rejected. + + @param recovery A block to handle the error that the receiver was rejected with. + @return A new pending promise to use instead of the rejected one that gets resolved with resolution + returned from `recovery` block. + */ +- (FBLPromise *)recover:(FBLPromiseRecoverWorkBlock)recovery NS_SWIFT_UNAVAILABLE(""); + +/** + Provides a new promise to recover in case the receiver gets rejected. + + @param queue A queue to dispatch on. + @param recovery A block to handle the error that the receiver was rejected with. + @return A new pending promise to use instead of the rejected one that gets resolved with resolution + returned from `recovery` block. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + recover:(FBLPromiseRecoverWorkBlock)recovery NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `recover` operators. + Usage: promise.recover(^id(NSError *error) {...}) + */ +@interface FBLPromise(DotSyntax_RecoverAdditions) + +- (FBLPromise * (^)(FBLPromiseRecoverWorkBlock))recover FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise * (^)(dispatch_queue_t, FBLPromiseRecoverWorkBlock))recoverOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Reduce.h b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Reduce.h new file mode 100644 index 0000000..5bb1eee --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Reduce.h @@ -0,0 +1,71 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(ReduceAdditions) + +typedef id __nullable (^FBLPromiseReducerBlock)(Value __nullable partial, id next) + NS_SWIFT_UNAVAILABLE(""); + +/** + Sequentially reduces a collection of values to a single promise using a given combining block + and the value `self` resolves with as initial value. + + @param items An array of values to process in order. + @param reducer A block to combine an accumulating value and an element of the sequence into + the new accumulating value or a promise resolved with it, to be used in the next + call of the `reducer` or returned to the caller. + @return A new pending promise returned from the last `reducer` invocation. + Or `self` if `items` is empty. + */ +- (FBLPromise *)reduce:(NSArray *)items + combine:(FBLPromiseReducerBlock)reducer NS_SWIFT_UNAVAILABLE(""); + +/** + Sequentially reduces a collection of values to a single promise using a given combining block + and the value `self` resolves with as initial value. + + @param queue A queue to dispatch on. + @param items An array of values to process in order. + @param reducer A block to combine an accumulating value and an element of the sequence into + the new accumulating value or a promise resolved with it, to be used in the next + call of the `reducer` or returned to the caller. + @return A new pending promise returned from the last `reducer` invocation. + Or `self` if `items` is empty. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + reduce:(NSArray *)items + combine:(FBLPromiseReducerBlock)reducer NS_SWIFT_UNAVAILABLE(""); + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `reduce` operators. + Usage: promise.reduce(values, ^id(id partial, id next) { ... }) + */ +@interface FBLPromise(DotSyntax_ReduceAdditions) + +- (FBLPromise * (^)(NSArray *, FBLPromiseReducerBlock))reduce FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise * (^)(dispatch_queue_t, NSArray *, FBLPromiseReducerBlock))reduceOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Retry.h b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Retry.h new file mode 100644 index 0000000..414a17a --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Retry.h @@ -0,0 +1,165 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +/** The default number of retry attempts is 1. */ +FOUNDATION_EXTERN NSInteger const FBLPromiseRetryDefaultAttemptsCount NS_REFINED_FOR_SWIFT; + +/** The default delay interval before making a retry attempt is 1.0 second. */ +FOUNDATION_EXTERN NSTimeInterval const FBLPromiseRetryDefaultDelayInterval NS_REFINED_FOR_SWIFT; + +@interface FBLPromise(RetryAdditions) + +typedef id __nullable (^FBLPromiseRetryWorkBlock)(void) NS_SWIFT_UNAVAILABLE(""); +typedef BOOL (^FBLPromiseRetryPredicateBlock)(NSInteger, NSError *) NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise that fulfills with the same value as the promise returned from `work` + block, which executes asynchronously, or rejects with the same error after all retry attempts have + been exhausted. Defaults to `FBLPromiseRetryDefaultAttemptsCount` attempt(s) on rejection where the + `work` block is retried after a delay of `FBLPromiseRetryDefaultDelayInterval` second(s). + + @param work A block that executes asynchronously on the default queue and returns a value or an + error used to resolve the promise. + @return A new pending promise that fulfills with the same value as the promise returned from `work` + block, or rejects with the same error after all retry attempts have been exhausted. + */ ++ (instancetype)retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise that fulfills with the same value as the promise returned from `work` + block, which executes asynchronously on the given `queue`, or rejects with the same error after all + retry attempts have been exhausted. Defaults to `FBLPromiseRetryDefaultAttemptsCount` attempt(s) on + rejection where the `work` block is retried on the given `queue` after a delay of + `FBLPromiseRetryDefaultDelayInterval` second(s). + + @param queue A queue to invoke the `work` block on. + @param work A block that executes asynchronously on the given `queue` and returns a value or an + error used to resolve the promise. + @return A new pending promise that fulfills with the same value as the promise returned from `work` + block, or rejects with the same error after all retry attempts have been exhausted. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise that fulfills with the same value as the promise returned from `work` + block, which executes asynchronously, or rejects with the same error after all retry attempts have + been exhausted. + + @param count Max number of retry attempts. The `work` block will be executed once if the specified + count is less than or equal to zero. + @param work A block that executes asynchronously on the default queue and returns a value or an + error used to resolve the promise. + @return A new pending promise that fulfills with the same value as the promise returned from `work` + block, or rejects with the same error after all retry attempts have been exhausted. + */ ++ (instancetype)attempts:(NSInteger)count + retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise that fulfills with the same value as the promise returned from `work` + block, which executes asynchronously on the given `queue`, or rejects with the same error after all + retry attempts have been exhausted. + + @param queue A queue to invoke the `work` block on. + @param count Max number of retry attempts. The `work` block will be executed once if the specified + count is less than or equal to zero. + @param work A block that executes asynchronously on the given `queue` and returns a value or an + error used to resolve the promise. + @return A new pending promise that fulfills with the same value as the promise returned from `work` + block, or rejects with the same error after all retry attempts have been exhausted. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + attempts:(NSInteger)count + retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise that fulfills with the same value as the promise returned from `work` + block, which executes asynchronously, or rejects with the same error after all retry attempts have + been exhausted. On rejection, the `work` block is retried after the given delay `interval` and will + continue to retry until the number of specified attempts have been exhausted or will bail early if + the given condition is not met. + + @param count Max number of retry attempts. The `work` block will be executed once if the specified + count is less than or equal to zero. + @param interval Time to wait before the next retry attempt. + @param predicate Condition to check before the next retry attempt. The predicate block provides the + the number of remaining retry attempts and the error that the promise was rejected + with. + @param work A block that executes asynchronously on the default queue and returns a value or an + error used to resolve the promise. + @return A new pending promise that fulfills with the same value as the promise returned from `work` + block, or rejects with the same error after all retry attempts have been exhausted or if + the given condition is not met. + */ ++ (instancetype)attempts:(NSInteger)count + delay:(NSTimeInterval)interval + condition:(nullable FBLPromiseRetryPredicateBlock)predicate + retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise that fulfills with the same value as the promise returned from `work` + block, which executes asynchronously on the given `queue`, or rejects with the same error after all + retry attempts have been exhausted. On rejection, the `work` block is retried after the given + delay `interval` and will continue to retry until the number of specified attempts have been + exhausted or will bail early if the given condition is not met. + + @param queue A queue to invoke the `work` block on. + @param count Max number of retry attempts. The `work` block will be executed once if the specified + count is less than or equal to zero. + @param interval Time to wait before the next retry attempt. + @param predicate Condition to check before the next retry attempt. The predicate block provides the + the number of remaining retry attempts and the error that the promise was rejected + with. + @param work A block that executes asynchronously on the given `queue` and returns a value or an + error used to resolve the promise. + @return A new pending promise that fulfills with the same value as the promise returned from `work` + block, or rejects with the same error after all retry attempts have been exhausted or if + the given condition is not met. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + attempts:(NSInteger)count + delay:(NSTimeInterval)interval + condition:(nullable FBLPromiseRetryPredicateBlock)predicate + retry:(FBLPromiseRetryWorkBlock)work NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise+Retry` operators. + Usage: FBLPromise.retry(^id { ... }) + */ +@interface FBLPromise(DotSyntax_RetryAdditions) + ++ (FBLPromise * (^)(FBLPromiseRetryWorkBlock))retry FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise * (^)(dispatch_queue_t, FBLPromiseRetryWorkBlock))retryOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise * (^)(NSInteger, NSTimeInterval, FBLPromiseRetryPredicateBlock __nullable, + FBLPromiseRetryWorkBlock))retryAgain FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise * (^)(dispatch_queue_t, NSInteger, NSTimeInterval, + FBLPromiseRetryPredicateBlock __nullable, + FBLPromiseRetryWorkBlock))retryAgainOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Testing.h b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Testing.h new file mode 100644 index 0000000..8478ae2 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Testing.h @@ -0,0 +1,57 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + Waits for all scheduled promises blocks. + + @param timeout Maximum time to wait. + @return YES if all promises blocks have completed before the timeout and NO otherwise. + */ +FOUNDATION_EXTERN BOOL FBLWaitForPromisesWithTimeout(NSTimeInterval timeout) NS_REFINED_FOR_SWIFT; + +@interface FBLPromise(TestingAdditions) + +/** + Dispatch group for promises that is typically used to wait for all scheduled blocks. + */ +@property(class, nonatomic, readonly) dispatch_group_t dispatchGroup NS_REFINED_FOR_SWIFT; + +/** + Properties to get the current state of the promise. + */ +@property(nonatomic, readonly) BOOL isPending NS_REFINED_FOR_SWIFT; +@property(nonatomic, readonly) BOOL isFulfilled NS_REFINED_FOR_SWIFT; +@property(nonatomic, readonly) BOOL isRejected NS_REFINED_FOR_SWIFT; + +/** + Value the promise was fulfilled with. + Can be nil if the promise is still pending, was resolved with nil or after it has been rejected. + */ +@property(nonatomic, readonly, nullable) Value value NS_REFINED_FOR_SWIFT; + +/** + Error the promise was rejected with. + Can be nil if the promise is still pending or after it has been fulfilled. + */ +@property(nonatomic, readonly, nullable) NSError *error NS_REFINED_FOR_SWIFT; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Then.h b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Then.h new file mode 100644 index 0000000..32027e6 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Then.h @@ -0,0 +1,63 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(ThenAdditions) + +typedef id __nullable (^FBLPromiseThenWorkBlock)(Value __nullable value) NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise which eventually gets resolved with resolution returned from `work` + block: either value, error or another promise. The `work` block is executed asynchronously only + when the receiver is fulfilled. If receiver is rejected, the returned promise is also rejected with + the same error. + + @param work A block to handle the value that receiver was fulfilled with. + @return A new pending promise to be resolved with resolution returned from the `work` block. + */ +- (FBLPromise *)then:(FBLPromiseThenWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise which eventually gets resolved with resolution returned from `work` + block: either value, error or another promise. The `work` block is executed asynchronously when the + receiver is fulfilled. If receiver is rejected, the returned promise is also rejected with the same + error. + + @param queue A queue to invoke the `work` block on. + @param work A block to handle the value that receiver was fulfilled with. + @return A new pending promise to be resolved with resolution returned from the `work` block. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + then:(FBLPromiseThenWorkBlock)work NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `then` operators. + Usage: promise.then(^id(id value) { ... }) + */ +@interface FBLPromise(DotSyntax_ThenAdditions) + +- (FBLPromise* (^)(FBLPromiseThenWorkBlock))then FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise* (^)(dispatch_queue_t, FBLPromiseThenWorkBlock))thenOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Timeout.h b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Timeout.h new file mode 100644 index 0000000..184ba16 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Timeout.h @@ -0,0 +1,57 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(TimeoutAdditions) + +/** + Waits for a promise with the specified `timeout`. + + @param interval Time to wait in seconds. + @return A new pending promise that gets either resolved with same resolution as the receiver or + rejected with `FBLPromiseErrorCodeTimedOut` error code in `FBLPromiseErrorDomain`. + */ +- (FBLPromise *)timeout:(NSTimeInterval)interval NS_SWIFT_UNAVAILABLE(""); + +/** + Waits for a promise with the specified `timeout`. + + @param queue A queue to dispatch on. + @param interval Time to wait in seconds. + @return A new pending promise that gets either resolved with same resolution as the receiver or + rejected with `FBLPromiseErrorCodeTimedOut` error code in `FBLPromiseErrorDomain`. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + timeout:(NSTimeInterval)interval NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `timeout` operators. + Usage: promise.timeout(...) + */ +@interface FBLPromise(DotSyntax_TimeoutAdditions) + +- (FBLPromise* (^)(NSTimeInterval))timeout FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise* (^)(dispatch_queue_t, NSTimeInterval))timeoutOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Validate.h b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Validate.h new file mode 100644 index 0000000..9dfa2f1 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Validate.h @@ -0,0 +1,60 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(ValidateAdditions) + +typedef BOOL (^FBLPromiseValidateWorkBlock)(Value __nullable value) NS_SWIFT_UNAVAILABLE(""); + +/** + Validates a fulfilled value or rejects the value if it can not be validated. + + @param predicate An expression to validate. + @return A new pending promise that gets either resolved with same resolution as the receiver or + rejected with `FBLPromiseErrorCodeValidationFailure` error code in `FBLPromiseErrorDomain`. + */ +- (FBLPromise *)validate:(FBLPromiseValidateWorkBlock)predicate NS_SWIFT_UNAVAILABLE(""); + +/** + Validates a fulfilled value or rejects the value if it can not be validated. + + @param queue A queue to dispatch on. + @param predicate An expression to validate. + @return A new pending promise that gets either resolved with same resolution as the receiver or + rejected with `FBLPromiseErrorCodeValidationFailure` error code in `FBLPromiseErrorDomain`. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + validate:(FBLPromiseValidateWorkBlock)predicate NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `validate` operators. + Usage: promise.validate(^BOOL(id value) { ... }) + */ +@interface FBLPromise(DotSyntax_ValidateAdditions) + +- (FBLPromise * (^)(FBLPromiseValidateWorkBlock))validate FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise * (^)(dispatch_queue_t, FBLPromiseValidateWorkBlock))validateOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Wrap.h b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Wrap.h new file mode 100644 index 0000000..664e1bb --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise+Wrap.h @@ -0,0 +1,316 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + Different types of completion handlers available to be wrapped with promise. + */ +typedef void (^FBLPromiseCompletion)(void) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseObjectCompletion)(id __nullable) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseErrorCompletion)(NSError* __nullable) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseObjectOrErrorCompletion)(id __nullable, NSError* __nullable) + NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseErrorOrObjectCompletion)(NSError* __nullable, id __nullable) + NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromise2ObjectsOrErrorCompletion)(id __nullable, id __nullable, + NSError* __nullable) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseBoolCompletion)(BOOL) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseBoolOrErrorCompletion)(BOOL, NSError* __nullable) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseIntegerCompletion)(NSInteger) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseIntegerOrErrorCompletion)(NSInteger, NSError* __nullable) + NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseDoubleCompletion)(double) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseDoubleOrErrorCompletion)(double, NSError* __nullable) + NS_SWIFT_UNAVAILABLE(""); + +/** + Provides an easy way to convert methods that use common callback patterns into promises. + */ +@interface FBLPromise(WrapAdditions) + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with `nil` when completion handler is invoked. + */ ++ (instancetype)wrapCompletion:(void (^)(FBLPromiseCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with `nil` when completion handler is invoked. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + wrapCompletion:(void (^)(FBLPromiseCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an object provided by completion handler. + */ ++ (instancetype)wrapObjectCompletion:(void (^)(FBLPromiseObjectCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an object provided by completion handler. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + wrapObjectCompletion:(void (^)(FBLPromiseObjectCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an error provided by completion handler. + If error is `nil`, fulfills with `nil`, otherwise rejects with the error. + */ ++ (instancetype)wrapErrorCompletion:(void (^)(FBLPromiseErrorCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an error provided by completion handler. + If error is `nil`, fulfills with `nil`, otherwise rejects with the error. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + wrapErrorCompletion:(void (^)(FBLPromiseErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an object provided by completion handler if error is `nil`. + Otherwise, rejects with the error. + */ ++ (instancetype)wrapObjectOrErrorCompletion: + (void (^)(FBLPromiseObjectOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an object provided by completion handler if error is `nil`. + Otherwise, rejects with the error. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + wrapObjectOrErrorCompletion:(void (^)(FBLPromiseObjectOrErrorCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an error or object provided by completion handler. If error + is not `nil`, rejects with the error. + */ ++ (instancetype)wrapErrorOrObjectCompletion: + (void (^)(FBLPromiseErrorOrObjectCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an error or object provided by completion handler. If error + is not `nil`, rejects with the error. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + wrapErrorOrObjectCompletion:(void (^)(FBLPromiseErrorOrObjectCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an array of objects provided by completion handler in order + if error is `nil`. Otherwise, rejects with the error. + */ ++ (FBLPromise*)wrap2ObjectsOrErrorCompletion: + (void (^)(FBLPromise2ObjectsOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an array of objects provided by completion handler in order + if error is `nil`. Otherwise, rejects with the error. + */ ++ (FBLPromise*)onQueue:(dispatch_queue_t)queue + wrap2ObjectsOrErrorCompletion:(void (^)(FBLPromise2ObjectsOrErrorCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping YES/NO. + */ ++ (FBLPromise*)wrapBoolCompletion:(void (^)(FBLPromiseBoolCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping YES/NO. + */ ++ (FBLPromise*)onQueue:(dispatch_queue_t)queue + wrapBoolCompletion:(void (^)(FBLPromiseBoolCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping YES/NO when error is `nil`. + Otherwise rejects with the error. + */ ++ (FBLPromise*)wrapBoolOrErrorCompletion: + (void (^)(FBLPromiseBoolOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping YES/NO when error is `nil`. + Otherwise rejects with the error. + */ ++ (FBLPromise*)onQueue:(dispatch_queue_t)queue + wrapBoolOrErrorCompletion:(void (^)(FBLPromiseBoolOrErrorCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping an integer. + */ ++ (FBLPromise*)wrapIntegerCompletion:(void (^)(FBLPromiseIntegerCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping an integer. + */ ++ (FBLPromise*)onQueue:(dispatch_queue_t)queue + wrapIntegerCompletion:(void (^)(FBLPromiseIntegerCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping an integer when error is `nil`. + Otherwise rejects with the error. + */ ++ (FBLPromise*)wrapIntegerOrErrorCompletion: + (void (^)(FBLPromiseIntegerOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping an integer when error is `nil`. + Otherwise rejects with the error. + */ ++ (FBLPromise*)onQueue:(dispatch_queue_t)queue + wrapIntegerOrErrorCompletion:(void (^)(FBLPromiseIntegerOrErrorCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping a double. + */ ++ (FBLPromise*)wrapDoubleCompletion:(void (^)(FBLPromiseDoubleCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping a double. + */ ++ (FBLPromise*)onQueue:(dispatch_queue_t)queue + wrapDoubleCompletion:(void (^)(FBLPromiseDoubleCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping a double when error is `nil`. + Otherwise rejects with the error. + */ ++ (FBLPromise*)wrapDoubleOrErrorCompletion: + (void (^)(FBLPromiseDoubleOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping a double when error is `nil`. + Otherwise rejects with the error. + */ ++ (FBLPromise*)onQueue:(dispatch_queue_t)queue + wrapDoubleOrErrorCompletion:(void (^)(FBLPromiseDoubleOrErrorCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `wrap` operators. + Usage: FBLPromise.wrapCompletion(^(FBLPromiseCompletion handler) {...}) + */ +@interface FBLPromise(DotSyntax_WrapAdditions) + ++ (FBLPromise* (^)(void (^)(FBLPromiseCompletion)))wrapCompletion FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromiseCompletion)))wrapCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseObjectCompletion)))wrapObjectCompletion + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromiseObjectCompletion)))wrapObjectCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseErrorCompletion)))wrapErrorCompletion FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromiseErrorCompletion)))wrapErrorCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseObjectOrErrorCompletion)))wrapObjectOrErrorCompletion + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, + void (^)(FBLPromiseObjectOrErrorCompletion)))wrapObjectOrErrorCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseErrorOrObjectCompletion)))wrapErrorOrObjectCompletion + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, + void (^)(FBLPromiseErrorOrObjectCompletion)))wrapErrorOrObjectCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromise2ObjectsOrErrorCompletion))) + wrap2ObjectsOrErrorCompletion FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromise2ObjectsOrErrorCompletion))) + wrap2ObjectsOrErrorCompletionOn FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseBoolCompletion)))wrapBoolCompletion + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, + void (^)(FBLPromiseBoolCompletion)))wrapBoolCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseBoolOrErrorCompletion)))wrapBoolOrErrorCompletion + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, + void (^)(FBLPromiseBoolOrErrorCompletion)))wrapBoolOrErrorCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseIntegerCompletion)))wrapIntegerCompletion + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, + void (^)(FBLPromiseIntegerCompletion)))wrapIntegerCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseIntegerOrErrorCompletion))) + wrapIntegerOrErrorCompletion FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromiseIntegerOrErrorCompletion))) + wrapIntegerOrErrorCompletionOn FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseDoubleCompletion)))wrapDoubleCompletion + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, + void (^)(FBLPromiseDoubleCompletion)))wrapDoubleCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseDoubleOrErrorCompletion))) + wrapDoubleOrErrorCompletion FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromiseDoubleOrErrorCompletion))) + wrapDoubleOrErrorCompletionOn FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise.h b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise.h new file mode 100644 index 0000000..b1380dc --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromise.h @@ -0,0 +1,93 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromiseError.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + Promises synchronization construct in Objective-C. + */ +@interface FBLPromise<__covariant Value> : NSObject + +/** + Default dispatch queue used for `FBLPromise`, which is `main` if a queue is not specified. + */ +@property(class) dispatch_queue_t defaultDispatchQueue NS_REFINED_FOR_SWIFT; + +/** + Creates a pending promise. + */ ++ (instancetype)pendingPromise NS_REFINED_FOR_SWIFT; + +/** + Creates a resolved promise. + + @param resolution An object to resolve the promise with: either a value or an error. + @return A new resolved promise. + */ ++ (instancetype)resolvedWith:(nullable id)resolution NS_REFINED_FOR_SWIFT; + +/** + Synchronously fulfills the promise with a value. + + @param value An arbitrary value to fulfill the promise with, including `nil`. + */ +- (void)fulfill:(nullable Value)value NS_REFINED_FOR_SWIFT; + +/** + Synchronously rejects the promise with an error. + + @param error An error to reject the promise with. + */ +- (void)reject:(NSError *)error NS_REFINED_FOR_SWIFT; + ++ (instancetype)new NS_UNAVAILABLE; +- (instancetype)init NS_UNAVAILABLE; +@end + +@interface FBLPromise() + +/** + Adds an object to the set of pending objects to keep strongly while the promise is pending. + Used by the Swift wrappers to keep them alive until the underlying ObjC promise is resolved. + + @param object An object to add. + */ +- (void)addPendingObject:(id)object NS_REFINED_FOR_SWIFT; + +@end + +#ifdef FBL_PROMISES_DOT_SYNTAX_IS_DEPRECATED +#define FBL_PROMISES_DOT_SYNTAX __attribute__((deprecated)) +#else +#define FBL_PROMISES_DOT_SYNTAX +#endif + +@interface FBLPromise(DotSyntaxAdditions) + +/** + Convenience dot-syntax wrappers for FBLPromise. + Usage: FBLPromise.pending() + FBLPromise.resolved(value) + + */ ++ (instancetype (^)(void))pending FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (instancetype (^)(id __nullable))resolved FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromiseError.h b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromiseError.h new file mode 100644 index 0000000..d37af53 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromiseError.h @@ -0,0 +1,43 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import + +NS_ASSUME_NONNULL_BEGIN + +FOUNDATION_EXTERN NSErrorDomain const FBLPromiseErrorDomain NS_REFINED_FOR_SWIFT; + +/** + Possible error codes in `FBLPromiseErrorDomain`. + */ +typedef NS_ENUM(NSInteger, FBLPromiseErrorCode) { + /** Promise failed to resolve in time. */ + FBLPromiseErrorCodeTimedOut = 1, + /** Validation predicate returned false. */ + FBLPromiseErrorCodeValidationFailure = 2, +} NS_REFINED_FOR_SWIFT; + +NS_INLINE BOOL FBLPromiseErrorIsTimedOut(NSError *error) NS_SWIFT_UNAVAILABLE("") { + return error.domain == FBLPromiseErrorDomain && + error.code == FBLPromiseErrorCodeTimedOut; +} + +NS_INLINE BOOL FBLPromiseErrorIsValidationFailure(NSError *error) NS_SWIFT_UNAVAILABLE("") { + return error.domain == FBLPromiseErrorDomain && + error.code == FBLPromiseErrorCodeValidationFailure; +} + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromises.h b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromises.h new file mode 100644 index 0000000..2d90bad --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/FBLPromises.h @@ -0,0 +1,32 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise+All.h" +#import "FBLPromise+Always.h" +#import "FBLPromise+Any.h" +#import "FBLPromise+Async.h" +#import "FBLPromise+Await.h" +#import "FBLPromise+Catch.h" +#import "FBLPromise+Delay.h" +#import "FBLPromise+Do.h" +#import "FBLPromise+Race.h" +#import "FBLPromise+Recover.h" +#import "FBLPromise+Reduce.h" +#import "FBLPromise+Retry.h" +#import "FBLPromise+Then.h" +#import "FBLPromise+Timeout.h" +#import "FBLPromise+Validate.h" +#import "FBLPromise+Wrap.h" diff --git a/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/PromisesObjC-umbrella.h b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/PromisesObjC-umbrella.h new file mode 100644 index 0000000..7447f7c --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Headers/PromisesObjC-umbrella.h @@ -0,0 +1,36 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "FBLPromise+All.h" +#import "FBLPromise+Always.h" +#import "FBLPromise+Any.h" +#import "FBLPromise+Async.h" +#import "FBLPromise+Await.h" +#import "FBLPromise+Catch.h" +#import "FBLPromise+Delay.h" +#import "FBLPromise+Do.h" +#import "FBLPromise+Race.h" +#import "FBLPromise+Recover.h" +#import "FBLPromise+Reduce.h" +#import "FBLPromise+Retry.h" +#import "FBLPromise+Testing.h" +#import "FBLPromise+Then.h" +#import "FBLPromise+Timeout.h" +#import "FBLPromise+Validate.h" +#import "FBLPromise+Wrap.h" +#import "FBLPromise.h" +#import "FBLPromiseError.h" +#import "FBLPromises.h" + +FOUNDATION_EXPORT double FBLPromisesVersionNumber; +FOUNDATION_EXPORT const unsigned char FBLPromisesVersionString[]; + diff --git a/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Info.plist b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Info.plist new file mode 100644 index 0000000..a963a05 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleExecutable + FBLPromises + CFBundleIdentifier + com.firebase.Firebase-FBLPromises + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + FBLPromises + CFBundlePackageType + FMWK + CFBundleVersion + 2.2.0 + DTSDKName + iphonesimulator11.2 + + diff --git a/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Modules/module.modulemap b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Modules/module.modulemap new file mode 100644 index 0000000..bd7b48e --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/macos-arm64_x86_64/FBLPromises.framework/Modules/module.modulemap @@ -0,0 +1,5 @@ +framework module PromisesObjC { +umbrella header "PromisesObjC-umbrella.h" +export * +module * { export * } +} diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/FBLPromises b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/FBLPromises new file mode 100644 index 0000000000000000000000000000000000000000..7d9bf5f465fa5310a7e3f0dbbfd7551f575df248 GIT binary patch literal 238672 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 {ED)!T=sVer=Wan(5M ziAZ;Z?Gl;fb2Ks*VY@^|BW#z*NQCVY8DzbEXU9(VoSj2__U-K7=@0bm?Au9u?(E$e z3|!fnVEyXO8Km92dUmZ2bnUvb%OB|6)wPSGVb|qd!9e@24%WwZjU(-N^wOj3X}jW& za(>x0PyXz#IdrCXU1fdX(Ltm$kIwQr_2@J@laEe4O3aTYA0_5T$63F!JF%OsuzP~f zk=>)aITm)0?56#95AWt!*ge2{yVYS4vo*wLpVe;>v(;x2v(;-6vz1_d+PaD~v8Q_v zXO=x(d;Eb*doJ%`d+q7m6AZ-nw6i|8XB=tA-b;Ilc~5*VG4Gite|FCtI@5cuvfjUU z0O{4eGkhlZPN6fgH@P>!=j7gCV07;o>sO+QC^1JT_#BCjMu|B(5+&y7aFm#%1FXmQ zweMr!*f+>$@4mi$oXz+3?qe_A*Rzka`MxWxPw%^mG_k*XKQZs`+E2{;FYhPj{hj-X zd4D_Wqx;8@wjby?z`n769-W!}bL7wLpG9YC|1|6U2L_N{Jut&(^1##qVm^>OK+Fdw z4-oT#G1j}PuT*oiR*&;JTs>0l4-8fhS97FS4^;;PebxP}#}Bq2B<6#IeD)sfJ4nn2 zdk+%x!JdP}eDDhEQwOJ!UOALFv^vmv=<*@Xj)yuAab7xf=}<5*e=yGa=%F#B?T>Xl zM$Cui(V00kNB+#AS#+ijO|#zjSU=L~$FA}@`B?HXe_;Hv$;UXd9-DY97#MkMl=ZHf zD>cMiGtTF5%}5O~*9_MXbIniPyJA16_D1BU277aA?`>hDKdkyILneJy(|=H6$`@++Em~eW z8)f;_eMaATZhUfsNz3(@EJ>+9{(`FiC)?&bKLh!Jd_Qozlhc^q~#;3Kge~kEDy>} z751FxxbIc{64hU~-N?6c-7ZU~wogpcs~%R*$g)cH zBdUK&+q0Vc6j|m%#($%x{SO#_rRwjeHQuO}?^k{2x$Spp{ha5tUsnAZ)o;}L9bYTn zxEGe2Pwp`iJ5BnCY;W2#qW=C~ZkCbvsQjJei#)3Gdx}ZZp3ZaK@6`RRM&)17{ijy_ zPwD>NXx~ZltdQ>S&U4+(+CIlrzgze3#Cj9olUqzYeHzbAy1&&r@oqBlIL~wm)~A7+a#?=uLF2DM{cYFs zEn5B-)pwrrzDw)xJlB1j>bI%>8?^q;bKQ4I{b~PZwg0ll?>yK2Ej|CVs63?Y8CQE1 zs_#7K{rTHWeVymJzpef|RDV$S7w5U|pVsX?MLWr|89x$FoBE4u`A#kWxavF4b$?6i z>paJOM)kW?{~KE09{C}H<#}z-xY|Fh=MU#O?iVO0{yS9u8QtF!YVRS{kF%f4^5eRF zo#(jgwS9V2|9RcM&U4(e8egBvfBA0HUdNy;pJ2a~{iR3KpVRYor^eHyXUS)uf&0uGgymkm~;;af|*|ems(8`^_eOQPUgIllph5zo)c5BU)a@=S%rc)t_fS zmvmCof201!RR2D$-<-;~X#HyLG5&v7>z7b}|5?jVXnA>FL+l?{ed+v`wDVl`an(<% z{%5s*!>a!-t=|Uh$nwv!|4_dk^|wOHPiy)Aq4g_K{n#6gKj%5>w`hCJsD7>b>s0-} zTx;}`n*I-3zdrT%74}X`?7Saz6|b>6f*BL+Yo=nQenrcdX!$O!-!auc zDnD*gzDLtyctzWU~KcV$=o_l^& z+as#_Piy@yss4jnze!Esho1PGP=8|@Z;h6JQtLOP`t!Q|qI?g?@(Ze8tNN>T|2n4f zr*-@FX!-+Mzoh!xr{#}nd3jDu+HX+xW&E|Io#&dTwLKbCe^TpL%yyFH&$NE6n*Iv= zz0_}7{k^E|)2!wHO6%95`XABlH=*g1+bF++F$t>wb-7-4rN625aju{HBtGOnsroO< z{<@OuXZ63Ey13Iv<$7!t&nR=9BFi)45B=9v|I1<@dmmJLyG5ULucrT-e4nC!=Od>4 z9`Z&0DV4uZ;z7Py<@c8x`PWr0$F0aKR9-6aQhqIVW$BjdA>@Zu{xjkad06GIihT9L z^;el(&mcdh@_(e9r0X<&x3q;>E9Il)aSD5zbg9!^4C=UQL&HwgDU?yDDsWik>&T){w_@y zi+%KeNA;y$ML(wU-x2%B|4`+hz>joB4D2-a#$|tUrT0ADY17G@u~hFi@q!U zvcyX|u*=wcM&o_Amj655p1-W=_c;5HrYp4lKdI?&NPNWqHBI+xeO96;%dY#4{7y}O zK-*93$nr6b|A#dFqq@CLX?mZ=_Y;~PSNX#dFY-^S{EYhl zF_j0^|EE;`MfLwPD(_JL|5N2Zss2Bu^7p9!QI)@0{r`>1Z&UxDR(YfP-^z8ZEPr2O z;`@xsKd=7ZqVjX<|FbH8r~3bSm7iAsV=9lTf4Od!}((V66l{f14_>!jmdVF8e7d3}tLb0Cj+B2v({IuEE@^s=#`o)*{Bosd&R;!x zzPdxxGkYXDo>`Oa{|3gO>^141%1FN`?Y)-YCscl`)bD1VDbsW_w(natWsp$`?{+Q~2y9j;%kk6Tyty$CK>=&}MYkG{hWV!uLqwmbq_D|$V`6<DTveUBePQQzUJAEJ{&Dgj!`P(w={X&NPG2(UGJC~vVOon_kQ=Vb(eHrq@ z8EIer6Z_wMp#DH?-;pEr#r2OL*(dK}^VOT|;`#&ojvjpMi6`G$e`tTK_T1SQPMvQ; z&1=5w>|)07TMizrd7}ErwHitDojybNvOH!Mt#52P-+J!sJL;R8PPa6jtAF#_SqjhS%0pn^~9+&7~5~#Ca>vaYyFAy z=TALPZbsWbE-%Bw@A=jf#Bs9u?e)){IA!OU$O!l3xl=8zXV2AFl$to7Jul=zm3e>izCF-q^wTc@>X;ulbah#^eia2`1#dEZ1p5Ud@x=L|M4r zpB4O~r79M!zCZQ)qU$%-_<9=KzYJsLxf*9V<;!w3u74Q@Dt0WgoB5Yxtt@9ai*BFt zoW)Yx*Y9m0;vBFQrE<`QtMsT{Xo0+YXL*_XQ1|E6t#7KVOmC~Q3XWs(l;^!>8Aoim zGXKGHy)NwcBz<>X*ss#c?_x)Jy??olBQJQ$Z?)=rn}1=a`0hJPJEMHJYnFD#SF@N0V#KtuQ?`f2i zl(}x$6Va8FA@74Onfb8a)hf9j}uL1*yZ)SLsObh z$}Cj7tYV4frOjx2uJslQhs!()yRJQV)W5`*Dn-$CxocnRav}TpkppMXoa7R?>4;p> zYPPL-;sRH(O{beqoNs!vsrACSGf$m3eW5AM%Dx4a#x$L@tLBA!gH&PLs$54`RzCc; z1$l|bUCV=^mw8E$$2*bh^rqm{nU~JKo%rhOckEocQS)uP@G|0TYs(4ISj&1>Z4RT6 zrHAPG!r&ZctCnuo>jlp_tX3@Ds=TUrDfM5*cK3JzcXpgRmeHsgZ;Q@0R$03AN@u-3 zIosTh@}-;0w>R!s#uiS0ZFG*9mT{b9zPLHtTIF(EKiB)SbC?Y;z2Pzs<|oeNu(ymb zJr3twW~-L5yLcYZxeQk>Vrb9-$@NS7v-xEFR;Is_A2}F1c;M(0Pu4$q z@X*004?ce2;E{TMfw%7kq!Bnp4dU$-_TNbiXiYC`9D2d3cYry@Z zeeCd&qwaW$>wQZyKv&K1ikm40eiPRYzO!E(xa?DAX;EMu?B-082Sbk=UaJR_bv{_@Ot z?fT2Jl5^)@o(YfLe|bhS4uItq&N>8^SA5|hSYEmG!(e%3GY^EU(s{m4Jr0Cj8OK3} zg_pg5rdp(=`{FtC_*tZ=I9+CuY;Re|+mf9wx1`&*=V7`8@7G$^?ceM8UV{5;Eb8{2 z^SrPG*Vj_c?bqXEvINi9R?_V|;~caEpUW%Z_LX(YT7tLbmT~)AIL9r)(UO(j9@5W- zOYpL+0&Y*4=guYg%2DKW>kAA^Gq(V_ZV$HY%qxxLl~(1IR_@HY_pom%w(al|ge&qI zM4EXsV+@ANMIr-@w%KdxH$19S=2aR&p7sfc^NaIKOTC{B&ZQGeMHR}oJ^xJ-)J6NnzvNK{{5V)Ho9M0RE2Xdfo@-i1hX9?$Leeb?fj^d)MFPqlT8eoip#ra<$p()$K!UdX(=>twmC6 zRkD`ryS*}7V6I$tWDE2Lry^z5Udv@QT<%rc7MO46GENx_Uq-pE&oRO`LpbFxY_H~Y zxS+$+ka@m_)TGlI?z8L8aIV})&fKb0ZpMkb(o3+zOAxLI=L;BV?kyKC7l}Eqr*z!) z376$HjMQ%3+-1Wl8=$(xlO&Ps)|Qs%7iV1q{Ntn93C z3_2@S&I+S(jWQ!PPF)QV* za6qaNhReKci$KmB3#zQ4d6v}|;-7`bBz+U^ z2NCVug^yZYmHF0Xand{<>XUzc+>*<_)~2>r(J)JW{n3NRjykDqI`&+WxN9AIC;2Jt z)S2fs)5{*yqS#BOJ*lF5!QOLjgZ1^*`;P8g&$VT97KIpo>z`<7|Hv$mRa``*Jpz}1JC(pjH?fJ83 zpFiESZQ*b^zs){i)Rm19*{NL%(*$KLQF5ehiD{h(X)BvF={l*O%md^s&60NQKq7Ld zpOrM*Bm`yI$GEZoCdW(s<#87v8aOO3QUVlXpir4JhX`c~;+Rk@pP9 zBFD8XPTD!2>EqzbKA$=Ej8*$H?pnv*S$RzOq%^Lyrq}uG4lR^vFSAOHJ?A8pdA^Wi zU6xJ*`?!}XH?Xf{+7cDD$1!@sE|F=k$Ie|iSIGH8?6pAl|E$G{PwIR6)cMv-dvjXC zDO;=d`k-zibNW&}wdZ+$bP754E*DV@%#*;XXeyMS;BLz-~Xj zQ|-**4Dh$=3Ln z&xsO31OFT!_WL=6HKaKw*zfb;ByYdZgKclW&x3tqT?je5jQt)DkxTttw`@h@q|KE)kX5!-P{p0mg_9qzPV6PtTRnQy}Uil*7z z*6qs{nNwub3oWhhs6Tn)WV3wvWZoQR*!9?LQ}+}pFJ6jn2Twl1lo$CG7Xr_xEMJLE T4}jN~q*hID1(AllAdditions) + +/** + Wait until all of the given promises are fulfilled. + If one of the given promises is rejected, then the returned promise is rejected with same error. + If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, + it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly. + Promises resolved with `nil` become `NSNull` instances in the resulting array. + + @param promises Promises to wait for. + @return Promise of an array containing the values of input promises in the same order. + */ ++ (FBLPromise *)all:(NSArray *)promises NS_SWIFT_UNAVAILABLE(""); + +/** + Wait until all of the given promises are fulfilled. + If one of the given promises is rejected, then the returned promise is rejected with same error. + If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, + it's implicitly considered a pre-fulfilled or pre-rejected FBLPromise correspondingly. + Promises resolved with `nil` become `NSNull` instances in the resulting array. + + @param queue A queue to dispatch on. + @param promises Promises to wait for. + @return Promise of an array containing the values of input promises in the same order. + */ ++ (FBLPromise *)onQueue:(dispatch_queue_t)queue + all:(NSArray *)promises NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `all` operators. + Usage: FBLPromise.all(@[ ... ]) + */ +@interface FBLPromise(DotSyntax_AllAdditions) + ++ (FBLPromise * (^)(NSArray *))all FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise * (^)(dispatch_queue_t, NSArray *))allOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Always.h b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Always.h new file mode 100644 index 0000000..13000f5 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Always.h @@ -0,0 +1,54 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(AlwaysAdditions) + +typedef void (^FBLPromiseAlwaysWorkBlock)(void) NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block that always executes, no matter if the receiver is rejected or fulfilled. + @return A new pending promise to be resolved with same resolution as the receiver. + */ +- (FBLPromise *)always:(FBLPromiseAlwaysWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to dispatch on. + @param work A block that always executes, no matter if the receiver is rejected or fulfilled. + @return A new pending promise to be resolved with same resolution as the receiver. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + always:(FBLPromiseAlwaysWorkBlock)work NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `always` operators. + Usage: promise.always(^{...}) + */ +@interface FBLPromise(DotSyntax_AlwaysAdditions) + +- (FBLPromise* (^)(FBLPromiseAlwaysWorkBlock))always FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise* (^)(dispatch_queue_t, FBLPromiseAlwaysWorkBlock))alwaysOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Any.h b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Any.h new file mode 100644 index 0000000..82875bf --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Any.h @@ -0,0 +1,69 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(AnyAdditions) + +/** + Waits until all of the given promises are either fulfilled or rejected. + If all promises are rejected, then the returned promise is rejected with same error + as the last one rejected. + If at least one of the promises is fulfilled, the resulting promise is fulfilled with an array of + values or `NSErrors`, matching the original order of fulfilled or rejected promises respectively. + If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, + it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly. + Promises resolved with `nil` become `NSNull` instances in the resulting array. + + @param promises Promises to wait for. + @return Promise of array containing the values or `NSError`s of input promises in the same order. + */ ++ (FBLPromise *)any:(NSArray *)promises NS_SWIFT_UNAVAILABLE(""); + +/** + Waits until all of the given promises are either fulfilled or rejected. + If all promises are rejected, then the returned promise is rejected with same error + as the last one rejected. + If at least one of the promises is fulfilled, the resulting promise is fulfilled with an array of + values or `NSError`s, matching the original order of fulfilled or rejected promises respectively. + If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, + it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly. + Promises resolved with `nil` become `NSNull` instances in the resulting array. + + @param queue A queue to dispatch on. + @param promises Promises to wait for. + @return Promise of array containing the values or `NSError`s of input promises in the same order. + */ ++ (FBLPromise *)onQueue:(dispatch_queue_t)queue + any:(NSArray *)promises NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `any` operators. + Usage: FBLPromise.any(@[ ... ]) + */ +@interface FBLPromise(DotSyntax_AnyAdditions) + ++ (FBLPromise * (^)(NSArray *))any FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise * (^)(dispatch_queue_t, NSArray *))anyOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Async.h b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Async.h new file mode 100644 index 0000000..0588a9e --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Async.h @@ -0,0 +1,60 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(AsyncAdditions) + +typedef void (^FBLPromiseFulfillBlock)(Value __nullable value) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseRejectBlock)(NSError *error) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseAsyncWorkBlock)(FBLPromiseFulfillBlock fulfill, + FBLPromiseRejectBlock reject) NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise and executes `work` block asynchronously. + + @param work A block to perform any operations needed to resolve the promise. + @return A new pending promise. + */ ++ (instancetype)async:(FBLPromiseAsyncWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise and executes `work` block asynchronously on the given queue. + + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @return A new pending promise. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + async:(FBLPromiseAsyncWorkBlock)work NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `async` operators. + Usage: FBLPromise.async(^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) { ... }) + */ +@interface FBLPromise(DotSyntax_AsyncAdditions) + ++ (FBLPromise* (^)(FBLPromiseAsyncWorkBlock))async FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, FBLPromiseAsyncWorkBlock))asyncOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Await.h b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Await.h new file mode 100644 index 0000000..c97a1ba --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Await.h @@ -0,0 +1,32 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + Waits for promise resolution. The current thread blocks until the promise is resolved. + + @param promise Promise to wait for. + @param error Error the promise was rejected with, or `nil` if the promise was fulfilled. + @return Value the promise was fulfilled with. If the promise was rejected, the return value + is always `nil`, but the error out arg is not. + */ +FOUNDATION_EXTERN id __nullable FBLPromiseAwait(FBLPromise *promise, + NSError **error) NS_REFINED_FOR_SWIFT; + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Catch.h b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Catch.h new file mode 100644 index 0000000..a9ff170 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Catch.h @@ -0,0 +1,59 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(CatchAdditions) + +typedef void (^FBLPromiseCatchWorkBlock)(NSError *error) NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise which eventually gets resolved with same resolution as the receiver. + If receiver is rejected, then `reject` block is executed asynchronously. + + @param reject A block to handle the error that receiver was rejected with. + @return A new pending promise. + */ +- (FBLPromise *)catch:(FBLPromiseCatchWorkBlock)reject NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise which eventually gets resolved with same resolution as the receiver. + If receiver is rejected, then `reject` block is executed asynchronously on the given queue. + + @param queue A queue to invoke the `reject` block on. + @param reject A block to handle the error that receiver was rejected with. + @return A new pending promise. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + catch:(FBLPromiseCatchWorkBlock)reject NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `catch` operators. + Usage: promise.catch(^(NSError *error) { ... }) + */ +@interface FBLPromise(DotSyntax_CatchAdditions) + +- (FBLPromise* (^)(FBLPromiseCatchWorkBlock))catch FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise* (^)(dispatch_queue_t, FBLPromiseCatchWorkBlock))catchOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Delay.h b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Delay.h new file mode 100644 index 0000000..557df48 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Delay.h @@ -0,0 +1,59 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(DelayAdditions) + +/** + Creates a new pending promise that fulfills with the same value as `self` after the `delay`, or + rejects with the same error immediately. + + @param interval Time to wait in seconds. + @return A new pending promise that fulfills at least `delay` seconds later than `self`, or rejects + with the same error immediately. + */ +- (FBLPromise *)delay:(NSTimeInterval)interval NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a new pending promise that fulfills with the same value as `self` after the `delay`, or + rejects with the same error immediately. + + @param queue A queue to dispatch on. + @param interval Time to wait in seconds. + @return A new pending promise that fulfills at least `delay` seconds later than `self`, or rejects + with the same error immediately. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + delay:(NSTimeInterval)interval NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `delay` operators. + Usage: promise.delay(...) + */ +@interface FBLPromise(DotSyntax_DelayAdditions) + +- (FBLPromise * (^)(NSTimeInterval))delay FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise * (^)(dispatch_queue_t, NSTimeInterval))delayOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Do.h b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Do.h new file mode 100644 index 0000000..6838e0a --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Do.h @@ -0,0 +1,55 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(DoAdditions) + +typedef id __nullable (^FBLPromiseDoWorkBlock)(void) NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise and executes `work` block asynchronously. + + @param work A block that returns a value or an error used to resolve the promise. + @return A new pending promise. + */ ++ (instancetype)do:(FBLPromiseDoWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise and executes `work` block asynchronously on the given queue. + + @param queue A queue to invoke the `work` block on. + @param work A block that returns a value or an error used to resolve the promise. + @return A new pending promise. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue do:(FBLPromiseDoWorkBlock)work NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `do` operators. + Usage: FBLPromise.doOn(queue, ^(NSError *error) { ... }) + */ +@interface FBLPromise(DotSyntax_DoAdditions) + ++ (FBLPromise * (^)(dispatch_queue_t, FBLPromiseDoWorkBlock))doOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Race.h b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Race.h new file mode 100644 index 0000000..2f67258 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Race.h @@ -0,0 +1,62 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(RaceAdditions) + +/** + Wait until any of the given promises are fulfilled. + If one of the promises is rejected, then the returned promise is rejected with same error. + If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, + it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly. + + @param promises Promises to wait for. + @return A new pending promise to be resolved with the same resolution as the first promise, among + the given ones, which was resolved. + */ ++ (instancetype)race:(NSArray *)promises NS_SWIFT_UNAVAILABLE(""); + +/** + Wait until any of the given promises are fulfilled. + If one of the promises is rejected, then the returned promise is rejected with same error. + If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, + it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly. + + @param queue A queue to dispatch on. + @param promises Promises to wait for. + @return A new pending promise to be resolved with the same resolution as the first promise, among + the given ones, which was resolved. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue race:(NSArray *)promises NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `race` operators. + Usage: FBLPromise.race(@[ ... ]) + */ +@interface FBLPromise(DotSyntax_RaceAdditions) + ++ (FBLPromise * (^)(NSArray *))race FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise * (^)(dispatch_queue_t, NSArray *))raceOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Recover.h b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Recover.h new file mode 100644 index 0000000..bb7df7e --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Recover.h @@ -0,0 +1,60 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(RecoverAdditions) + +typedef id __nullable (^FBLPromiseRecoverWorkBlock)(NSError *error) NS_SWIFT_UNAVAILABLE(""); + +/** + Provides a new promise to recover in case the receiver gets rejected. + + @param recovery A block to handle the error that the receiver was rejected with. + @return A new pending promise to use instead of the rejected one that gets resolved with resolution + returned from `recovery` block. + */ +- (FBLPromise *)recover:(FBLPromiseRecoverWorkBlock)recovery NS_SWIFT_UNAVAILABLE(""); + +/** + Provides a new promise to recover in case the receiver gets rejected. + + @param queue A queue to dispatch on. + @param recovery A block to handle the error that the receiver was rejected with. + @return A new pending promise to use instead of the rejected one that gets resolved with resolution + returned from `recovery` block. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + recover:(FBLPromiseRecoverWorkBlock)recovery NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `recover` operators. + Usage: promise.recover(^id(NSError *error) {...}) + */ +@interface FBLPromise(DotSyntax_RecoverAdditions) + +- (FBLPromise * (^)(FBLPromiseRecoverWorkBlock))recover FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise * (^)(dispatch_queue_t, FBLPromiseRecoverWorkBlock))recoverOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Reduce.h b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Reduce.h new file mode 100644 index 0000000..5bb1eee --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Reduce.h @@ -0,0 +1,71 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(ReduceAdditions) + +typedef id __nullable (^FBLPromiseReducerBlock)(Value __nullable partial, id next) + NS_SWIFT_UNAVAILABLE(""); + +/** + Sequentially reduces a collection of values to a single promise using a given combining block + and the value `self` resolves with as initial value. + + @param items An array of values to process in order. + @param reducer A block to combine an accumulating value and an element of the sequence into + the new accumulating value or a promise resolved with it, to be used in the next + call of the `reducer` or returned to the caller. + @return A new pending promise returned from the last `reducer` invocation. + Or `self` if `items` is empty. + */ +- (FBLPromise *)reduce:(NSArray *)items + combine:(FBLPromiseReducerBlock)reducer NS_SWIFT_UNAVAILABLE(""); + +/** + Sequentially reduces a collection of values to a single promise using a given combining block + and the value `self` resolves with as initial value. + + @param queue A queue to dispatch on. + @param items An array of values to process in order. + @param reducer A block to combine an accumulating value and an element of the sequence into + the new accumulating value or a promise resolved with it, to be used in the next + call of the `reducer` or returned to the caller. + @return A new pending promise returned from the last `reducer` invocation. + Or `self` if `items` is empty. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + reduce:(NSArray *)items + combine:(FBLPromiseReducerBlock)reducer NS_SWIFT_UNAVAILABLE(""); + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `reduce` operators. + Usage: promise.reduce(values, ^id(id partial, id next) { ... }) + */ +@interface FBLPromise(DotSyntax_ReduceAdditions) + +- (FBLPromise * (^)(NSArray *, FBLPromiseReducerBlock))reduce FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise * (^)(dispatch_queue_t, NSArray *, FBLPromiseReducerBlock))reduceOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Retry.h b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Retry.h new file mode 100644 index 0000000..414a17a --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Retry.h @@ -0,0 +1,165 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +/** The default number of retry attempts is 1. */ +FOUNDATION_EXTERN NSInteger const FBLPromiseRetryDefaultAttemptsCount NS_REFINED_FOR_SWIFT; + +/** The default delay interval before making a retry attempt is 1.0 second. */ +FOUNDATION_EXTERN NSTimeInterval const FBLPromiseRetryDefaultDelayInterval NS_REFINED_FOR_SWIFT; + +@interface FBLPromise(RetryAdditions) + +typedef id __nullable (^FBLPromiseRetryWorkBlock)(void) NS_SWIFT_UNAVAILABLE(""); +typedef BOOL (^FBLPromiseRetryPredicateBlock)(NSInteger, NSError *) NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise that fulfills with the same value as the promise returned from `work` + block, which executes asynchronously, or rejects with the same error after all retry attempts have + been exhausted. Defaults to `FBLPromiseRetryDefaultAttemptsCount` attempt(s) on rejection where the + `work` block is retried after a delay of `FBLPromiseRetryDefaultDelayInterval` second(s). + + @param work A block that executes asynchronously on the default queue and returns a value or an + error used to resolve the promise. + @return A new pending promise that fulfills with the same value as the promise returned from `work` + block, or rejects with the same error after all retry attempts have been exhausted. + */ ++ (instancetype)retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise that fulfills with the same value as the promise returned from `work` + block, which executes asynchronously on the given `queue`, or rejects with the same error after all + retry attempts have been exhausted. Defaults to `FBLPromiseRetryDefaultAttemptsCount` attempt(s) on + rejection where the `work` block is retried on the given `queue` after a delay of + `FBLPromiseRetryDefaultDelayInterval` second(s). + + @param queue A queue to invoke the `work` block on. + @param work A block that executes asynchronously on the given `queue` and returns a value or an + error used to resolve the promise. + @return A new pending promise that fulfills with the same value as the promise returned from `work` + block, or rejects with the same error after all retry attempts have been exhausted. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise that fulfills with the same value as the promise returned from `work` + block, which executes asynchronously, or rejects with the same error after all retry attempts have + been exhausted. + + @param count Max number of retry attempts. The `work` block will be executed once if the specified + count is less than or equal to zero. + @param work A block that executes asynchronously on the default queue and returns a value or an + error used to resolve the promise. + @return A new pending promise that fulfills with the same value as the promise returned from `work` + block, or rejects with the same error after all retry attempts have been exhausted. + */ ++ (instancetype)attempts:(NSInteger)count + retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise that fulfills with the same value as the promise returned from `work` + block, which executes asynchronously on the given `queue`, or rejects with the same error after all + retry attempts have been exhausted. + + @param queue A queue to invoke the `work` block on. + @param count Max number of retry attempts. The `work` block will be executed once if the specified + count is less than or equal to zero. + @param work A block that executes asynchronously on the given `queue` and returns a value or an + error used to resolve the promise. + @return A new pending promise that fulfills with the same value as the promise returned from `work` + block, or rejects with the same error after all retry attempts have been exhausted. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + attempts:(NSInteger)count + retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise that fulfills with the same value as the promise returned from `work` + block, which executes asynchronously, or rejects with the same error after all retry attempts have + been exhausted. On rejection, the `work` block is retried after the given delay `interval` and will + continue to retry until the number of specified attempts have been exhausted or will bail early if + the given condition is not met. + + @param count Max number of retry attempts. The `work` block will be executed once if the specified + count is less than or equal to zero. + @param interval Time to wait before the next retry attempt. + @param predicate Condition to check before the next retry attempt. The predicate block provides the + the number of remaining retry attempts and the error that the promise was rejected + with. + @param work A block that executes asynchronously on the default queue and returns a value or an + error used to resolve the promise. + @return A new pending promise that fulfills with the same value as the promise returned from `work` + block, or rejects with the same error after all retry attempts have been exhausted or if + the given condition is not met. + */ ++ (instancetype)attempts:(NSInteger)count + delay:(NSTimeInterval)interval + condition:(nullable FBLPromiseRetryPredicateBlock)predicate + retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise that fulfills with the same value as the promise returned from `work` + block, which executes asynchronously on the given `queue`, or rejects with the same error after all + retry attempts have been exhausted. On rejection, the `work` block is retried after the given + delay `interval` and will continue to retry until the number of specified attempts have been + exhausted or will bail early if the given condition is not met. + + @param queue A queue to invoke the `work` block on. + @param count Max number of retry attempts. The `work` block will be executed once if the specified + count is less than or equal to zero. + @param interval Time to wait before the next retry attempt. + @param predicate Condition to check before the next retry attempt. The predicate block provides the + the number of remaining retry attempts and the error that the promise was rejected + with. + @param work A block that executes asynchronously on the given `queue` and returns a value or an + error used to resolve the promise. + @return A new pending promise that fulfills with the same value as the promise returned from `work` + block, or rejects with the same error after all retry attempts have been exhausted or if + the given condition is not met. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + attempts:(NSInteger)count + delay:(NSTimeInterval)interval + condition:(nullable FBLPromiseRetryPredicateBlock)predicate + retry:(FBLPromiseRetryWorkBlock)work NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise+Retry` operators. + Usage: FBLPromise.retry(^id { ... }) + */ +@interface FBLPromise(DotSyntax_RetryAdditions) + ++ (FBLPromise * (^)(FBLPromiseRetryWorkBlock))retry FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise * (^)(dispatch_queue_t, FBLPromiseRetryWorkBlock))retryOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise * (^)(NSInteger, NSTimeInterval, FBLPromiseRetryPredicateBlock __nullable, + FBLPromiseRetryWorkBlock))retryAgain FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise * (^)(dispatch_queue_t, NSInteger, NSTimeInterval, + FBLPromiseRetryPredicateBlock __nullable, + FBLPromiseRetryWorkBlock))retryAgainOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Testing.h b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Testing.h new file mode 100644 index 0000000..8478ae2 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Testing.h @@ -0,0 +1,57 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + Waits for all scheduled promises blocks. + + @param timeout Maximum time to wait. + @return YES if all promises blocks have completed before the timeout and NO otherwise. + */ +FOUNDATION_EXTERN BOOL FBLWaitForPromisesWithTimeout(NSTimeInterval timeout) NS_REFINED_FOR_SWIFT; + +@interface FBLPromise(TestingAdditions) + +/** + Dispatch group for promises that is typically used to wait for all scheduled blocks. + */ +@property(class, nonatomic, readonly) dispatch_group_t dispatchGroup NS_REFINED_FOR_SWIFT; + +/** + Properties to get the current state of the promise. + */ +@property(nonatomic, readonly) BOOL isPending NS_REFINED_FOR_SWIFT; +@property(nonatomic, readonly) BOOL isFulfilled NS_REFINED_FOR_SWIFT; +@property(nonatomic, readonly) BOOL isRejected NS_REFINED_FOR_SWIFT; + +/** + Value the promise was fulfilled with. + Can be nil if the promise is still pending, was resolved with nil or after it has been rejected. + */ +@property(nonatomic, readonly, nullable) Value value NS_REFINED_FOR_SWIFT; + +/** + Error the promise was rejected with. + Can be nil if the promise is still pending or after it has been fulfilled. + */ +@property(nonatomic, readonly, nullable) NSError *error NS_REFINED_FOR_SWIFT; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Then.h b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Then.h new file mode 100644 index 0000000..32027e6 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Then.h @@ -0,0 +1,63 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(ThenAdditions) + +typedef id __nullable (^FBLPromiseThenWorkBlock)(Value __nullable value) NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise which eventually gets resolved with resolution returned from `work` + block: either value, error or another promise. The `work` block is executed asynchronously only + when the receiver is fulfilled. If receiver is rejected, the returned promise is also rejected with + the same error. + + @param work A block to handle the value that receiver was fulfilled with. + @return A new pending promise to be resolved with resolution returned from the `work` block. + */ +- (FBLPromise *)then:(FBLPromiseThenWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise which eventually gets resolved with resolution returned from `work` + block: either value, error or another promise. The `work` block is executed asynchronously when the + receiver is fulfilled. If receiver is rejected, the returned promise is also rejected with the same + error. + + @param queue A queue to invoke the `work` block on. + @param work A block to handle the value that receiver was fulfilled with. + @return A new pending promise to be resolved with resolution returned from the `work` block. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + then:(FBLPromiseThenWorkBlock)work NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `then` operators. + Usage: promise.then(^id(id value) { ... }) + */ +@interface FBLPromise(DotSyntax_ThenAdditions) + +- (FBLPromise* (^)(FBLPromiseThenWorkBlock))then FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise* (^)(dispatch_queue_t, FBLPromiseThenWorkBlock))thenOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Timeout.h b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Timeout.h new file mode 100644 index 0000000..184ba16 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Timeout.h @@ -0,0 +1,57 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(TimeoutAdditions) + +/** + Waits for a promise with the specified `timeout`. + + @param interval Time to wait in seconds. + @return A new pending promise that gets either resolved with same resolution as the receiver or + rejected with `FBLPromiseErrorCodeTimedOut` error code in `FBLPromiseErrorDomain`. + */ +- (FBLPromise *)timeout:(NSTimeInterval)interval NS_SWIFT_UNAVAILABLE(""); + +/** + Waits for a promise with the specified `timeout`. + + @param queue A queue to dispatch on. + @param interval Time to wait in seconds. + @return A new pending promise that gets either resolved with same resolution as the receiver or + rejected with `FBLPromiseErrorCodeTimedOut` error code in `FBLPromiseErrorDomain`. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + timeout:(NSTimeInterval)interval NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `timeout` operators. + Usage: promise.timeout(...) + */ +@interface FBLPromise(DotSyntax_TimeoutAdditions) + +- (FBLPromise* (^)(NSTimeInterval))timeout FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise* (^)(dispatch_queue_t, NSTimeInterval))timeoutOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Validate.h b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Validate.h new file mode 100644 index 0000000..9dfa2f1 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Validate.h @@ -0,0 +1,60 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(ValidateAdditions) + +typedef BOOL (^FBLPromiseValidateWorkBlock)(Value __nullable value) NS_SWIFT_UNAVAILABLE(""); + +/** + Validates a fulfilled value or rejects the value if it can not be validated. + + @param predicate An expression to validate. + @return A new pending promise that gets either resolved with same resolution as the receiver or + rejected with `FBLPromiseErrorCodeValidationFailure` error code in `FBLPromiseErrorDomain`. + */ +- (FBLPromise *)validate:(FBLPromiseValidateWorkBlock)predicate NS_SWIFT_UNAVAILABLE(""); + +/** + Validates a fulfilled value or rejects the value if it can not be validated. + + @param queue A queue to dispatch on. + @param predicate An expression to validate. + @return A new pending promise that gets either resolved with same resolution as the receiver or + rejected with `FBLPromiseErrorCodeValidationFailure` error code in `FBLPromiseErrorDomain`. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + validate:(FBLPromiseValidateWorkBlock)predicate NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `validate` operators. + Usage: promise.validate(^BOOL(id value) { ... }) + */ +@interface FBLPromise(DotSyntax_ValidateAdditions) + +- (FBLPromise * (^)(FBLPromiseValidateWorkBlock))validate FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise * (^)(dispatch_queue_t, FBLPromiseValidateWorkBlock))validateOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Wrap.h b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Wrap.h new file mode 100644 index 0000000..664e1bb --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise+Wrap.h @@ -0,0 +1,316 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + Different types of completion handlers available to be wrapped with promise. + */ +typedef void (^FBLPromiseCompletion)(void) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseObjectCompletion)(id __nullable) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseErrorCompletion)(NSError* __nullable) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseObjectOrErrorCompletion)(id __nullable, NSError* __nullable) + NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseErrorOrObjectCompletion)(NSError* __nullable, id __nullable) + NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromise2ObjectsOrErrorCompletion)(id __nullable, id __nullable, + NSError* __nullable) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseBoolCompletion)(BOOL) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseBoolOrErrorCompletion)(BOOL, NSError* __nullable) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseIntegerCompletion)(NSInteger) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseIntegerOrErrorCompletion)(NSInteger, NSError* __nullable) + NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseDoubleCompletion)(double) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseDoubleOrErrorCompletion)(double, NSError* __nullable) + NS_SWIFT_UNAVAILABLE(""); + +/** + Provides an easy way to convert methods that use common callback patterns into promises. + */ +@interface FBLPromise(WrapAdditions) + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with `nil` when completion handler is invoked. + */ ++ (instancetype)wrapCompletion:(void (^)(FBLPromiseCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with `nil` when completion handler is invoked. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + wrapCompletion:(void (^)(FBLPromiseCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an object provided by completion handler. + */ ++ (instancetype)wrapObjectCompletion:(void (^)(FBLPromiseObjectCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an object provided by completion handler. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + wrapObjectCompletion:(void (^)(FBLPromiseObjectCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an error provided by completion handler. + If error is `nil`, fulfills with `nil`, otherwise rejects with the error. + */ ++ (instancetype)wrapErrorCompletion:(void (^)(FBLPromiseErrorCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an error provided by completion handler. + If error is `nil`, fulfills with `nil`, otherwise rejects with the error. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + wrapErrorCompletion:(void (^)(FBLPromiseErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an object provided by completion handler if error is `nil`. + Otherwise, rejects with the error. + */ ++ (instancetype)wrapObjectOrErrorCompletion: + (void (^)(FBLPromiseObjectOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an object provided by completion handler if error is `nil`. + Otherwise, rejects with the error. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + wrapObjectOrErrorCompletion:(void (^)(FBLPromiseObjectOrErrorCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an error or object provided by completion handler. If error + is not `nil`, rejects with the error. + */ ++ (instancetype)wrapErrorOrObjectCompletion: + (void (^)(FBLPromiseErrorOrObjectCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an error or object provided by completion handler. If error + is not `nil`, rejects with the error. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + wrapErrorOrObjectCompletion:(void (^)(FBLPromiseErrorOrObjectCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an array of objects provided by completion handler in order + if error is `nil`. Otherwise, rejects with the error. + */ ++ (FBLPromise*)wrap2ObjectsOrErrorCompletion: + (void (^)(FBLPromise2ObjectsOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an array of objects provided by completion handler in order + if error is `nil`. Otherwise, rejects with the error. + */ ++ (FBLPromise*)onQueue:(dispatch_queue_t)queue + wrap2ObjectsOrErrorCompletion:(void (^)(FBLPromise2ObjectsOrErrorCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping YES/NO. + */ ++ (FBLPromise*)wrapBoolCompletion:(void (^)(FBLPromiseBoolCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping YES/NO. + */ ++ (FBLPromise*)onQueue:(dispatch_queue_t)queue + wrapBoolCompletion:(void (^)(FBLPromiseBoolCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping YES/NO when error is `nil`. + Otherwise rejects with the error. + */ ++ (FBLPromise*)wrapBoolOrErrorCompletion: + (void (^)(FBLPromiseBoolOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping YES/NO when error is `nil`. + Otherwise rejects with the error. + */ ++ (FBLPromise*)onQueue:(dispatch_queue_t)queue + wrapBoolOrErrorCompletion:(void (^)(FBLPromiseBoolOrErrorCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping an integer. + */ ++ (FBLPromise*)wrapIntegerCompletion:(void (^)(FBLPromiseIntegerCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping an integer. + */ ++ (FBLPromise*)onQueue:(dispatch_queue_t)queue + wrapIntegerCompletion:(void (^)(FBLPromiseIntegerCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping an integer when error is `nil`. + Otherwise rejects with the error. + */ ++ (FBLPromise*)wrapIntegerOrErrorCompletion: + (void (^)(FBLPromiseIntegerOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping an integer when error is `nil`. + Otherwise rejects with the error. + */ ++ (FBLPromise*)onQueue:(dispatch_queue_t)queue + wrapIntegerOrErrorCompletion:(void (^)(FBLPromiseIntegerOrErrorCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping a double. + */ ++ (FBLPromise*)wrapDoubleCompletion:(void (^)(FBLPromiseDoubleCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping a double. + */ ++ (FBLPromise*)onQueue:(dispatch_queue_t)queue + wrapDoubleCompletion:(void (^)(FBLPromiseDoubleCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping a double when error is `nil`. + Otherwise rejects with the error. + */ ++ (FBLPromise*)wrapDoubleOrErrorCompletion: + (void (^)(FBLPromiseDoubleOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping a double when error is `nil`. + Otherwise rejects with the error. + */ ++ (FBLPromise*)onQueue:(dispatch_queue_t)queue + wrapDoubleOrErrorCompletion:(void (^)(FBLPromiseDoubleOrErrorCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `wrap` operators. + Usage: FBLPromise.wrapCompletion(^(FBLPromiseCompletion handler) {...}) + */ +@interface FBLPromise(DotSyntax_WrapAdditions) + ++ (FBLPromise* (^)(void (^)(FBLPromiseCompletion)))wrapCompletion FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromiseCompletion)))wrapCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseObjectCompletion)))wrapObjectCompletion + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromiseObjectCompletion)))wrapObjectCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseErrorCompletion)))wrapErrorCompletion FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromiseErrorCompletion)))wrapErrorCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseObjectOrErrorCompletion)))wrapObjectOrErrorCompletion + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, + void (^)(FBLPromiseObjectOrErrorCompletion)))wrapObjectOrErrorCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseErrorOrObjectCompletion)))wrapErrorOrObjectCompletion + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, + void (^)(FBLPromiseErrorOrObjectCompletion)))wrapErrorOrObjectCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromise2ObjectsOrErrorCompletion))) + wrap2ObjectsOrErrorCompletion FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromise2ObjectsOrErrorCompletion))) + wrap2ObjectsOrErrorCompletionOn FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseBoolCompletion)))wrapBoolCompletion + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, + void (^)(FBLPromiseBoolCompletion)))wrapBoolCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseBoolOrErrorCompletion)))wrapBoolOrErrorCompletion + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, + void (^)(FBLPromiseBoolOrErrorCompletion)))wrapBoolOrErrorCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseIntegerCompletion)))wrapIntegerCompletion + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, + void (^)(FBLPromiseIntegerCompletion)))wrapIntegerCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseIntegerOrErrorCompletion))) + wrapIntegerOrErrorCompletion FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromiseIntegerOrErrorCompletion))) + wrapIntegerOrErrorCompletionOn FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseDoubleCompletion)))wrapDoubleCompletion + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, + void (^)(FBLPromiseDoubleCompletion)))wrapDoubleCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseDoubleOrErrorCompletion))) + wrapDoubleOrErrorCompletion FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromiseDoubleOrErrorCompletion))) + wrapDoubleOrErrorCompletionOn FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise.h b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise.h new file mode 100644 index 0000000..b1380dc --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromise.h @@ -0,0 +1,93 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromiseError.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + Promises synchronization construct in Objective-C. + */ +@interface FBLPromise<__covariant Value> : NSObject + +/** + Default dispatch queue used for `FBLPromise`, which is `main` if a queue is not specified. + */ +@property(class) dispatch_queue_t defaultDispatchQueue NS_REFINED_FOR_SWIFT; + +/** + Creates a pending promise. + */ ++ (instancetype)pendingPromise NS_REFINED_FOR_SWIFT; + +/** + Creates a resolved promise. + + @param resolution An object to resolve the promise with: either a value or an error. + @return A new resolved promise. + */ ++ (instancetype)resolvedWith:(nullable id)resolution NS_REFINED_FOR_SWIFT; + +/** + Synchronously fulfills the promise with a value. + + @param value An arbitrary value to fulfill the promise with, including `nil`. + */ +- (void)fulfill:(nullable Value)value NS_REFINED_FOR_SWIFT; + +/** + Synchronously rejects the promise with an error. + + @param error An error to reject the promise with. + */ +- (void)reject:(NSError *)error NS_REFINED_FOR_SWIFT; + ++ (instancetype)new NS_UNAVAILABLE; +- (instancetype)init NS_UNAVAILABLE; +@end + +@interface FBLPromise() + +/** + Adds an object to the set of pending objects to keep strongly while the promise is pending. + Used by the Swift wrappers to keep them alive until the underlying ObjC promise is resolved. + + @param object An object to add. + */ +- (void)addPendingObject:(id)object NS_REFINED_FOR_SWIFT; + +@end + +#ifdef FBL_PROMISES_DOT_SYNTAX_IS_DEPRECATED +#define FBL_PROMISES_DOT_SYNTAX __attribute__((deprecated)) +#else +#define FBL_PROMISES_DOT_SYNTAX +#endif + +@interface FBLPromise(DotSyntaxAdditions) + +/** + Convenience dot-syntax wrappers for FBLPromise. + Usage: FBLPromise.pending() + FBLPromise.resolved(value) + + */ ++ (instancetype (^)(void))pending FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (instancetype (^)(id __nullable))resolved FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromiseError.h b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromiseError.h new file mode 100644 index 0000000..d37af53 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromiseError.h @@ -0,0 +1,43 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import + +NS_ASSUME_NONNULL_BEGIN + +FOUNDATION_EXTERN NSErrorDomain const FBLPromiseErrorDomain NS_REFINED_FOR_SWIFT; + +/** + Possible error codes in `FBLPromiseErrorDomain`. + */ +typedef NS_ENUM(NSInteger, FBLPromiseErrorCode) { + /** Promise failed to resolve in time. */ + FBLPromiseErrorCodeTimedOut = 1, + /** Validation predicate returned false. */ + FBLPromiseErrorCodeValidationFailure = 2, +} NS_REFINED_FOR_SWIFT; + +NS_INLINE BOOL FBLPromiseErrorIsTimedOut(NSError *error) NS_SWIFT_UNAVAILABLE("") { + return error.domain == FBLPromiseErrorDomain && + error.code == FBLPromiseErrorCodeTimedOut; +} + +NS_INLINE BOOL FBLPromiseErrorIsValidationFailure(NSError *error) NS_SWIFT_UNAVAILABLE("") { + return error.domain == FBLPromiseErrorDomain && + error.code == FBLPromiseErrorCodeValidationFailure; +} + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromises.h b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromises.h new file mode 100644 index 0000000..2d90bad --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/FBLPromises.h @@ -0,0 +1,32 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise+All.h" +#import "FBLPromise+Always.h" +#import "FBLPromise+Any.h" +#import "FBLPromise+Async.h" +#import "FBLPromise+Await.h" +#import "FBLPromise+Catch.h" +#import "FBLPromise+Delay.h" +#import "FBLPromise+Do.h" +#import "FBLPromise+Race.h" +#import "FBLPromise+Recover.h" +#import "FBLPromise+Reduce.h" +#import "FBLPromise+Retry.h" +#import "FBLPromise+Then.h" +#import "FBLPromise+Timeout.h" +#import "FBLPromise+Validate.h" +#import "FBLPromise+Wrap.h" diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/PromisesObjC-umbrella.h b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/PromisesObjC-umbrella.h new file mode 100644 index 0000000..5b014a8 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Headers/PromisesObjC-umbrella.h @@ -0,0 +1,36 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "FBLPromise+All.h" +#import "FBLPromise+Always.h" +#import "FBLPromise+Any.h" +#import "FBLPromise+Async.h" +#import "FBLPromise+Await.h" +#import "FBLPromise+Catch.h" +#import "FBLPromise+Delay.h" +#import "FBLPromise+Do.h" +#import "FBLPromise+Race.h" +#import "FBLPromise+Recover.h" +#import "FBLPromise+Reduce.h" +#import "FBLPromise+Retry.h" +#import "FBLPromise+Testing.h" +#import "FBLPromise+Then.h" +#import "FBLPromise+Timeout.h" +#import "FBLPromise+Validate.h" +#import "FBLPromise+Wrap.h" +#import "FBLPromise.h" +#import "FBLPromiseError.h" +#import "FBLPromises.h" + +FOUNDATION_EXPORT double FBLPromisesVersionNumber; +FOUNDATION_EXPORT const unsigned char FBLPromisesVersionString[]; + diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Info.plist b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Info.plist new file mode 100644 index 0000000..a963a05 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleExecutable + FBLPromises + CFBundleIdentifier + com.firebase.Firebase-FBLPromises + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + FBLPromises + CFBundlePackageType + FMWK + CFBundleVersion + 2.2.0 + DTSDKName + iphonesimulator11.2 + + diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Modules/module.modulemap b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Modules/module.modulemap new file mode 100644 index 0000000..bd7b48e --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/tvos-arm64/FBLPromises.framework/Modules/module.modulemap @@ -0,0 +1,5 @@ +framework module PromisesObjC { +umbrella header "PromisesObjC-umbrella.h" +export * +module * { export * } +} diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/FBLPromises b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/FBLPromises new file mode 100644 index 0000000000000000000000000000000000000000..3461c94d980f3f149e3b9ba82b855370e862fefc GIT binary patch literal 449088 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

ZIj2~bV^ir{uZ8tx51 zKkpVG#QD|&F9QEc;C$dxAfBmA)%Ay|xla{_#NO z_bogRm=B(l%yRq)$b9o0YS3%@fy^(@RYu$8-w0&ATmfXf3LxX138dV=XX*0Lz9!4{ zD3JN*Il0i8^wItm{R;#y0fJ}c1koCZGo-x+?-Vel*PyVSu>=XLN0a@ZO3Z=U#R7l!#i1IYaS6P=TMJpY+|PXUo`?Kgl-m&-g%_Zsn6 z16hy7K*r-a%Z&HLI34~lkl`zV=OX-4Af|-A4+0^#{5`;F@V_xu+p+p1kp1%kAoKNE zAf{42ekVaW)Ptn_3LxUwo+{xPK$idL7>&OHA}c=HO+mbJo)66W{0y)XxK+X%G}hJt z(baty0nsIVg+O#s-((=VobQ7`%KK-A&i9Kz*2g12_N#9LE8zbskonvWq?}IyXCwUM zK&IaUtia_JK<0z`i_9N&t{^dZXTMa~&DLrBO3*ZlcJ_U$)aeBg>#?M4kAdj?*g(gvZ z!`a(`kfZc*iCe|rC)g|4A=oU~Ah=AhPB17K5JX>4@(Ts?1pR`!g3KS&&k_VE{~;ji zEpr%%ddWNhge+zMYC3S2(02-bhtLOsq;CZ>ejkwWdx0eg?*N_;tdsB{uo(UT5OtaD z2a=!pD}p};SivA6EfbN0hO2znOcZ3miq^&y=3V0fQ|Gu_Du4*)5r49I*I z0&z=?O3!&J_z{iv(y{|%)Z{SJFK7u4qyOPAb4YMduurf-Fd*m`v;>DCAD5X!f`fv6 zf(?QJLBAkC#rps{IqwDIcpf$Nq>cVjKK&@T(f8>^WznB2@2h_!9q|W5z#dc<>3*T# zOZo5@il27)$Zy_@jtIR&=+h;Bp7>|uW@r2|@zZV;{Q>cRL->Q@&lZ23__vC`S^OjP zBYpGUb-9$^ya#c7r~GBYk7v8$H}7G&%n#~k2!kcvg_55>;s2HR8^nLR_y@)RN6F6) z@n0b6Z5RL5Lf$ArF3{MDo*{e6=DOO&5sjWh2VUzGMR?@e!_v$MSBJ?Z*mWh9eH#*!N@gEU?5c#K`xp~jy;6VSaNSE#pC=dPSJ=Tx9 zpx?ZgHVVIa54=U_=DoR5{N_D(uK3M+>#vc21VtUM?fzHbvHO4T@^5m*pNRa}`FFVZ zvrv9J{ohbNyZSf8>HnLHevQj-SGI)?d-U*lIe$L3cIUCU z7q49(i{ezKx36i%$4bw%JwHI88L!l*So5}c*BSb9)D&CBX_L$LWxAU)&Lo(#l^wP26zXI| zqRBsKkW+?_t%(bYl70_y9A?6B>Tj|SA(B$D{gNcEA$okYQc#-IPFQJDOJK)oMa=ul zj~VzbB;LlDqtiILL`Z)y*3!1F{hDxc8)M0jv^@?RV>6Q47)xP+3~^&~gv1k?f~NM? zl?5gd&*nU4TV|uRV>Y`~j-&NE?U-@X+h)ehI&M2=@_u2ygE8-KCt`lgpS-@H!*qvx zyQ9-*_?>pC4CQN>7tnA10NuG*jIujSuN^MccQ66GpV4vM zfNme;VM=V}VsR3$J$xOJHx*JXluu2yJngJ)6M1+|Q!aPBme&k`gzyNfSx^b-@s=Kjv4kc|iDm(1*v{B}a^eRHq?C9k+K;kYv8^|E8OP2NjQBj(~h zp}axJle`&{k}L8&?U)UUJkwwDo&~aPUP=czN^WS{$}jb zY{Pp#4Y zE*~s;__5gU%I|944d>D>tB(A#I`XE`Qja_ZgJ3X&#&1cW!U>hwL#$|HG)=zzprtXK zhYMS3Sf`ItRoGt5AF0|Wnuaw4YqnNLs;pgLd;{7q%>xe*xEsu~LRFNfJR=pf?^))!RTQEgRd+&+cR zLZFelX}{!ZHwr}MRD39+fvT!XH}@&1kMp{J(~t@}06S>QY+8{{?fcCyE>lMeuZK#y zDoxG6roQUPi4_m9l(mueSSc6AO1Ur>s*pHEaVjfKX_YTT{EdbBG7rYycAA58BPZ8H zuJN?_rmG*8-y*L=`C4g>Uy7qUd3q}rz_n4g8}ew{4X0*4o~k6()Oc0#jLx#rr021~ zrpZ~wY+++Q?#g9QkeXNSr$AVaWEXYL$Q6H)k zu{|OS{HTN-_DX0T2|>L*Y>yh55JG; zM&rF8+~zRk1of5hY{o=(q^@k~>S*k4YF^mc-qT^} zBQ#sOE^cXCxp-A2KR=#ht?FrA)xz^SJC$N-%5yIpMP-#>DGxMOwKMbGAE=SXvK|)X zIZJfIg3k)_JSMug1T$s+I8{(nlb>ISBP$Cnu?MK^_L;LRLeLG(e&&Nn*L$t-zIma-`(QMubKB7zH~7ljF^t9x!QCoANSep zuGk~I(Zy$vlk7T>gxFxCZNhc3b1uu!j}qx|(#{#(FYrr5=Q&|?g&y(0C;bQ0WI9)G z#e1pH<@F$r{!|M3vnk|{2z@FNPoxJr1^Y~NUi50Ad*y$H&}TtLBKe;e`g9Na&xF2+ znMhDSr^$HdmHu=y9(u&5o(`RKySVx-6S`OWw+J1tH*|6F&AYXip6CJ5b7cQh&gdh0 zoRc~ARjp^q{^;QM&=buUJv{c$RQ%ro!(QQMe@(_e1;nTE+bicNO8sNXo1JsZn95V6 zKB?Pbjf1RR!WVtbO~5xDd|yd}Zz=e0Nh96sz-P{@oT>_gelS&*_#Oq{ z+BDLA6?`j%kNsY`1nKgODQjWe|-CajQ1@d<^<(ifY3`SzZQr! zt^BKily?~r>l(fpK=RS<9{H%BNBXNk(*Fbmz4mb+=(T%M2{0S{a!e%}jZ`eT8pLm&0~ux{cT29iDmJQ;rKZ6kl>-vBZ{ zcLGmB_~(GA65mxomZuEJbn<~%x$#W|QqCA4)1e;3M1&s#;t}klUIFQ}<5`S)S^=aS z>hGZs=T8GN-YGyo_{RXT^yqs5{fhAp0--OK{{#?y&-Wid=H~$*^Lrl!dE)mA z$~;Bc|0JE$45Dq*S%QHCQeWrvhREIq$# z_3M6%%B234aeqXoROczG9)R=VQF!`;;=fz?&2#(*2q(Qx=tZPMhS?{$PUy>o-bwjL z&&(%#C?9?^e;g6{X1*1Y_ze>OZ<3#8@jpR2;+y$piO4ha!3v4rC;azG{0{MdUg*8z zzd_PB^RZ&dubF?HF7dYt|6<`c^QR;1B*>4MFWrrbRd!CeMnkNyMVpDljs?a?8s zqSuLk0{Ez(X4d7;KL{TlI``St0j57NzivqtD<{{9K^oB8(hCa=PR z+HGEId($=C{=~P^R6c824aKvNC;=cNO`RXA8lr0&1s5phbgAA zA3M5}A7dtKQ=R%)8q*+4#Y>Tn=0HS1L3 zO3@N7J+c(F<`nH_R&_%iG3XZ^dtE8($?Mah-5jIYPQcQ$-<$s zt*blA?Uv`4`X3aIUC1Bhxn=TxA>O#U6nUQZm5+!# zQ*B!zkNImr{#aJL2H2~@ZMFl*XE5@L)>cru7POqkmFM8*a<%jyj4aQbOW?X)>0Q`8x9@}My|*TM(T5d zk*?fegciHHpf`cVRdQZ3B$qV<%DiTEz~wFRi+1MQEYn#ezDBS%aP zXaw2ONF5=zw3s+Ox1Q6mCVzjk+C?Wkrh?lKOaXkB3w&R2OU08#~O_4 zsle(Qt;(QSp+qsSQrmj)Pd?yNn}-VydJ!951TZmWb{1qr^QHX z==M=T&rhRWJLp^uY}yu+9UORonYIN)4k~t~oH9^;CwqskBgvmMv%1%9N*2NX1*qAD zdBMF4@|X>+bV2148xt)B*4LpA;_yw|*^MyBi^%=GSvdO#BWvx>>6&R8W zR=2mWZVea2;&v72*hx-eL|%;Z%f&$su8Ex)E)!BY8YFUK z9qlI2u|5**U%yA%;~da4tc_28)TUWEh%IM8GktdH? zIXUA`%-V+drSLG#hNHUPOh3#zECn+8bJ-)>j`lp7l15h2M}5Hg@F*^n+L@HW_~^pZVlh_ zAg6X45d6wMM-D{x!H+(l-5}x1fDEsb@G>A?(XtDHnBr#pfu{k%qvQaX|4b%|zszCy zi9>>ef_;Jwf&oFlAliiaSNo3KAA?uP;eG=AwLgKM`$*=!>aSqtUW6G3IUdn(#yx(w zPyPdFEIRf((#^P6DSk6f<M;d0l=DsuKoBQPg z@JxW;xK3P8JYmT4OMKqb^luYC?Y_|8ApROew)^+H;`9Eo(}OPmZ(Q*wyZlcevOWGmSA5#*vD3fkihr$( z{*X%^&jYl_#|x-YYz?jL3HO9UjosaydFf-{Qf!Rg6<*WW(cIn{4ykF6?Hf8h zlkr;T#7T6eg`G&rbG0+Z5%+O>@@HDa3uouP2iEVH$d@;Ez3JRDM|cSJlsYA-3aFZbh9<4P0+B@ZuD zIa50@sJ~cveRpHiH4?0rrn|5M6Rz*>Y{$xu{#328he563#;$Pu8h=k)SL3QM)RtS; zcrNt2>sECSTfOS;f^0T+hi$>J>NX_j4iej?y$dl^zIF53@(>MIIY*%{X(G*L zSI-*63c0(T<7-q~KG+pR*c!8nZ#J`5Z0HQHGFw_|ZJvVlMwf#onGGdbs!f%p0(Eek zt1=y#F2HBME_(FyQ(1572zPe1qwltKZwRd`v=&xY+SUYH!-dvp*G*>@Cj6eXk{a%* z)=ir+{#$=k({O$;Mg{6aQVbQ*ozhFh7t z_;u4^iQtzQ&5+0Z@w-D-H=4kezvSz>Dl+0-C-SzY%wO_#*gj?kZkq-xOV$zjy)Z80 zoRn9!N22dZsaHprr@`X7q}_ScAJ=ueH*|1ZaDIPWCi13;kfHSCMGNijFJ?Y+MC2Wk z^7f&;nD53pQ(mv{N$YqI!I?%pAnT?%2#~TGlHwD2p6kR7BF{AIA;@z%m%QZb#OfZ0 zfPmZ#M&iRE8)EE-k{^IS`<(RIk! zVkQAtdhp2 z-Bw_7Y|b>fXePd0i~CHi%*iy0FV>>z;FRcSUGTy@pB#bon88fOH$(U0ryjR*Y4Xo< z@vDhi?0c}7N{5S(-q&DiEl7=droPSd)0D%s%Y1pRnsD>nHvV)mAdIr!Vg0AHbG=Lc z6CU9cU3{ZWHxYk>EpPzWiN5DzINf*fOGKY7?KvIvMC-+2q4W6!=W2b-&m;uXiiGrj zp)c~F|3>JXm&3)$=XxETm;4N=Z!h_ag)Zx-aq_Vir<{Aen)SgrW&hCYsiq#I-<^2a z#lKznS>MW;bywH-PMqg)ZhPuKwS1B1-N5Vt-|d5_{ZPWYt067q3P z?6Blh>MbGPS*R_OKWU$Yd|U$?lSaC&;CnuebUzEe2_jG0EiT>FXjiP0);0h!)cCkQ z%ynYgf5!T3egP2coxZbym~;8Y15t+Z|AuU==hprgknx`bVruOBHIVW50U4k3K1|ts zcLTG4p93;J?LZ?>wY@-$1^JCY#tQ-|cZT@+odx*HPXcninctN#y}zLDxo-R<5OY7@ zBS1_GefIz<|C>O_QFfmxcQyQ!vm8h{)j*bauJ{XpkgM!IGksihT=cPDBS{45?-n?2 zA)Z>NC8A8qPdfd5K;%Pxzk&S#_5B9c*B#$)FgyT0hWmw|av9FaI?~J@0%qfH7Z82b z@%;wo;n{--N7@ei$as}?e80i`1i?2R;Q=7!lmWqaO!kp+FCa_m-96inO2OZ8uX|G- z<#b_O=lZd6zd+`>zHHvt`8@;IvxgBzN4u%?9}@opiEqZ21>}c3GcMmN{6~a8SNP4i znkoEd9NjMbM}_~8(9JkWyS9{X#>Jh;6Tf3H?~6BypK|DC7be-1he-Ahal z4Qt*HZwJG~%pt1}>C)ATf2a5#5&y9G`F$DJ%guAlib!LnJn6c4+;a4> z+EbmCe?_d@-sCX`tBeKZmh>ApMSJNsQs_g$r*LigQ6eI0F|bXi>8#~zjw zaq!5fs%KRE%bnaQik_TV>L*D-3zC`(O>WWCYSp7%O~t&bnowoM(yE1vms}p2f<67B z^NY*;F;^J7^y_Q=zo@WqW@)M4KWkyok6%9mFlVxM$g@d@ zIR6K@;0AX#_?xrAEJR}%wVr@Nm2oIJOTJnDbWWCC&P`LbEZi3^;2y_e5rI?luB zxZW#4%I_|cS)Zlho<#ctM_lsuiM)N7#LDxHQ?#fPd7gU4M@8O7iLoE@><*7XhZA|8 zdd9s{pn$}xll9sCTo*+cn#YyDhfAfWohSX{h>3-M!z#$Z zOGNZt%FuxJ_DHlpko*6!_bza96=nK=M<5KhWKe{tv~UCX6IN zP%#sdfkbj6nLrQ%qYz0OgKbf^MEgM2aJ~|o4hZB8qf=nId6MHZd5QLc z`6kalA6eu@Ttr@F`@m9@*JBSu&h%?UKNDS2gw^Z=_4Yh8S*&fmNbHeuYEs?v!}=bN zCs3G(p?T!%Nq;1?b~-uQ(@D2UyG2xAUq2<4;TNfLLaMt_u;?C?ny*Crz>M}6h8{Sr zUvqa$_H7JJY_>6Ux3%MV<(M4?+2`+tq4m@HHQhNh#$G%%{V#FTdzmRb+09$O_Suz6 zc8jL(=2vYl7y=%5lei!9yYSgOZaXIZp>0asXl}wcr>47mhgsV58OCYJ@82+46Q0;y zu#5THeu{W&LvgxzYr`-pzU76T0Qr9(;h(C?in9|%2xcczIc3L=$u^zTjKytU^mOT>oygap zZ%6rj`1{~YYhU?r-+uG{S}|*k!$5s=J1u`Y|10b+NeDkG!WWKH={j41*b$;F`(s0}%l->|;~_9WG#bKag5u|J8wi{EHlFQ9sLE`eWq+{*7k}H7zKBit zZumZIe0G1t@;wdTni}NER`mtrOUmyrxu1??c>M{GzqITQl=Ud>-*zncd62m2PlB>D ztp$f;C%Ot$ycHm2l)ea5yz@cDYXNz8r6+-OY0^i5iZ={Aig=pG&bzY2QOF`*zHb_6ooxe(-DLoQ@9r#9YIQ%bA@7TuDzXs_Fy7N{QemDNX z_`eErZ;bjhh`fnC;9i8U2c_piQ04R%ko4PhKOBQ!-&u+zeVqBx*~Qm0i{5E$WqMh- z$0b9Nihoa%Y%)Z)^Fwn;**mN^BoEFHIP3?}ckosad!XBwjkKJdP2n3Yya!ZxH>mKH zp!oIvPnP(5ODD{hc9gJn@y&)Z<-%}(|i-HH}T_Lhf$dF zcM~r6Gtp6CY2Z!WB6kAe2d58Z!{&ouf5 zlRwDx=`sH*)5m}R7Fc@zdpFABZ!-SR8NdJDea86x_iYpTl0DFmFTLCRJ)|o)fuHF8 z=0{cMAI3u|ceV86h2h7O`d~P0@4mwP={4qeW5DpszAySV^pv~O{C+&|PsTsX=+D6; zd!lbI$lfQvZ=ZO3qi-+hJ1V+wpNu8H1QlE_>4p85;0gQR65(&A{KE7{Bk_-k&|4$% zuZ+moI=isEp%H%Vrx~U*a9N|hGSc8Kk5}1nSTrG36;!mW$j({X0T^(y(dfHwuS_%} zX~!$dv68jZaTHec%(;klJB5WJUCcgI^b6fSW#P3uMPuWbrcz_0Ta7cXifJ>jY}R-# zrQg3xnbAII7Oi>`H#*a11jw{um}8BK^(JB@USCi`ewblwh_ zWQXpze5!peH{axKK%TWjBJwKRdAFIo_CQ=}De}UuJii5#r(=t*i)yy|>@y*Kre6>G z`8o~D59c?|&b!0p9d41j?Y{9c%JnPMZ|pj-H(0y4!35k=o4i7%qxsF6ysakBpBq_M z#jc%X=k@J$Ux__*{&l}}BhT{cNiM}|cHTxkOgMkPY(iedMdVes^ER2h9=qB6xsmJ9 z&+50NN~+m;x0qth7HbwgPUY7-s%O5x79P(pP?)DDWar&M`XizBGC-uUWmRiCKRJyV z>8D#e!>_yu2(02pL2u+IHD8H#-pRYq6%4GJ92)q4@?62-7_>9$cVaYuXq)avXJ?+M zt5SP8=OOw4cG=3`hhGQsea10PVK1(M9>}NT2+c(A?DGRWkk6ToLmEX6)VT@gvCR2G8D{tI-HfLc!cLqC}m8|V^WsY8$xZNxWSIiVl z{uOdiUi{)bWyYVCSK0Qv3t>*MM&sxC%YV zPAh$tX1&>8Re#QT`(wiSXcriNv)9D)$JlGHLSU!a1y#Q#@+15W5O3o**VfxveZ<-& zAA@hE@mamb^1TS($u;mbpxcNV(rtzBHO8m=!8xD*ke#?IBv0j>#P?D7jx>38f5hhF z0r*;t&+e00zGvaf8eidY_xhO{Drea)-&lq3MefTZu^avgggxC49zj$6hv2c`{UGn0 zbT3H%A^iz(1a?R5V|EmHF37ug;+f!Z_>TuA&+UH(|G@!Y+ui|Ro7R7c{ya#(C%pwk zPMg+CEBsyy|4a}*@#7Z07Th2H%Ru@h=}SQRD(MTr5lSDF9;bk^vugh^`Yq|#fg=e2 zD`iH{CoTIe=}g=P*5Q8&yq`Dvgc+A=N=xC0VPN2E1Y}Cg-bqNPbW76Zosc}*MmIkCF?GgzjngOvy&_S zX5()HxwQs#ZkFuDM057uZVHjVf4Y5Ec30Uyy}L_F^Yi0e-=L7>?}1P5&BpKF*9REg z+f(-uonOE4yY-vI_x8|s$tS(9TAFUXCSkqC|AfiwGyg^M!|T7p$C%%LH*bbd`fWA- zPgwlT=6CBYp>Hw&QQ}9Q|1KV6`uOkQt>jVbHT^h{o&)(;^6WZFo49G@-VMWHgZonR375Om{C-^R7v|q=biE(Mzrp;Ep`YxjdPwE8E?R!yF3`6_ ze%}uHZ{zph<*d+(za5d+5%DwNTdRFG)RZodRN(-q_||y2h*GocuBTS)2voJ1{`1e8a-*-os!57^ z7Z#zicCL1njNQoxj^`&VT>Ce{aI{qc7oHt#;Dk)=u#9`s;(S0@@4RCd%X$>}aueQZMI| z7U_K2Fk#1Mx5QPmllt~d*2f~>eEL(eYu16NjiyD%SBwMwQ}?l67);l zk8+908)*VQT~%JeWawfSDiR)LrU2cR$()m$gmy}5;X5^V}p5*wd*)?aGJcHDF z(S;ccWlwb%;mq!3fhEatn3)+j}3aDxcIUs zS9S4aYksaRx0IQQqlH*<`4FcFxr+z13OBGswdVhp%m2hghwXz8mRjy)X(MhRDv%=~ zB}+4Zt6RcZzzX?$*RvbBNptxhwqQ=Q#iMKSPupUaFqWUn7?xk%=T0MfGVpA|GxWT^ z+`5l7>FVe`h8{hoo?nI^*}12e&=%H3Iy;)PsO8qJ)0s+>d-Y@@ZnG2j5X(!=?x&-z zG=QS*JlCz3*xcG|ed}75-|9Y1js96~?dmMStrId``*R|bBy1Cf@MeXtJ!LDGN;0ltUeKbQ%J_9|?K)Ln>)O?u09Nm|?0m3o!k-e0!6m*fP#b0xQW;$7 z%HU&?^bC5r3-12b{6BWipqhe84ocM3`aMBn+&b=_Dc)NrPusHM)f|PT8!xnM*i~i7 zJj-sU12@LEfiv^A>c?=e&Tf&XZ{3afb8qlN=A`;pJztv;J8ZP0{4DlTu4AT;93tvQEE|t6w9$ ztW%L7+Xk<}k*=vAN&R=1em$^nC!S#K&Z&kihFyl&8h+C7ONN&Po3yeCRrb{EBu>wA z7vT+`QpK%cCofwz=ZX<52d-&nSA+x+SmWB1X-cW>Ug)~=7#2IhQHtI;<}`jA=Y0Fq zw;Mf=zO`}gSZfcy%h2;A@lQ0qcN=G^s( zS&fR2TOQFXM5=h1HL6edPOI0Ji2S<~!moXa>BcG75en3}bR|1*KlC^|?*-Pb(|&nz z^uMWbi#vi}oSoJ0SDQrFIw!d#JM6z1UHwO#X%l$#U+akEtoX|4U#ddCvr77VS$&y( zuS~w$rgG8sw(37APR7>Tdb>bjy={UWcaib;6W2L!Cydx-CI2dZX|wyPew_3Ck@LA4 zAl}CBy=GrjeK_a&Lw3@~AY5Mq-;3~FXMC0Hq#BF=tnpbr#@b0`$Nh-$6&?q#U!bkl zR;Fafy`ly_*>TUSK|k4XR~etxbD4f=?t|gj@eT$l>hvHGd)lZ!a{o}4qn-v?N0`>W z1$2SZ_kqZo_-Rn_dO*6C=^H@Bdl#s9mxA0w>5D-6HR-cJ#cKjbfI4^ZaPZGOXKDC< z3}Tm?_*GE!l_0N}^cXM${Sc5YS-Ku1-HFektkVBAD89|$;rL~z9RaQeMZXjjz0Lf` zf|7S2SV#EwK>^geE4ftOR4#!^yQm5%Bs6W|*zYkJ` z>92vx?K;@4;$Q<+F~!tpPFBlEcXHP`|&rOZ!Y_$|6cwI9{K(E z`w^r2@8zC~58Z#iZz4Yg72KqVU;Fch>3T1P{pUpZkBsoIjqral!k>-sNA0g8BmA}7 zKT8|E<>t$pETGkdl-NM4F;_@28Z~iMs#!oQY^3Wr+~9Yo?=vk~+_r)a(}E?eD=jr} z&R(vA*JjV1f645N<}8S}76x|8$ga57Rf&(`?TgFNg>8Aq&88Pr+=_QnbJ?D}NrpFUy#eV|JYN9Tsa{VgX7w1bE-1-1g+fBcE8pCFqGD-m6ey5?o*mamD zZ=}WQjtD8&&wV@+?UfC7Pd1pm+iH_n$aK_RnKOCYO`i5smddlp@2=P@y?xwQVjrCg z$=ilJ%d0236sy@QbM}1sYTXjCmm?%1ud=<;p9i7#pPWB0a0mLC=#na_X0Kdt?PZ`GlN@dXA3p>37;++4E z`bL81N#fT&d(PQ=uNwbh{-tRA)*vg|jY3wVprnf=Z==B?6WUZYdurH9qwy!HGKje`Fy^@}D+(lKe4N zAB+*l%CBaBX}58GUycR)OTxK(pErJ$w{zb95V60gJ*PJ8(KVb`cPo7L#%J|VW?zuJ zhxzTa^sT&N`ThvsuZ_>jEtc<4%65NC*Xk#hZz_EMQ$xC11MzeX>1w~zeXE?i_a^F< zaq6}yAdhrf`*<=gK596q@qXDIn39$r49YH|bztOSVn2u-r0x5l;(rIEWtLWZPVqkn zD*i`6nr7+sU>$e`sQB*yxtH3sPK<_fBo&ACG`L)4`bn+R^8MaFi=Us?J<45Z@%{VcT=8=c`S-B1|G~4>__bbB zbpIZGm~i?1d-HCS-*5cKnSB3VlpRm}{ylgHIygH3d~)yMCx5s3Pd0y_`HAZ2JIwzY z`YKw7<@6_pS*2&}&Bji+)^r3QkRnsiKp z@k6WsPtV(9>CvE2<2l|&;8#EWZ=bhUs@yB~yuAsf`{*qxjDJUNAuI(!Ncmv@_|XHE z5o>U0E|C(w1B*+fOph|dK`@TC{Nfp%i?JCbm;(M8XYZA(>WeC}yJPjjE!#e_Tz0{D z5>y9kqNefacy{N!6(uW%Ug~)M1{?hIkL3~2W-*DcmwQIKwDXfwJ?N*RP(Ql72nej=MnTszr_8;Q z$Mad5!}_0z%8i}tmdiiNfo^%$={zSa9{0wo4Yv|v=MRfJ`TZn%x*kW%wdFZpkIDTH zZIe`;wid{DD|a48tUG*Soq)kcz3#@pOb`T^L8wu?ER4>-mtDc?>=JRYQ+Hja4nDW%&6m`$`t_wC4XaXY#m5 zC>~adT$e!?%7$euk`gRq(UPAgar#wFf1ft`zgecT#c`|?DL0|cEohNIS1ORT#%KE4 zQ?~h~N%_?&sJ*1bxpu4T6f4;I5np|YZh- zo>J(H_QcH&-7${QgZciBL8f#Y#DDIhn)nqiL4K~zgtU{PDD1uVS#HS#Tq&-bwl$Zp zyNhdXi(K(oN6H~MCz4Q(bzGV84;)D5n=Wt#sI*%0n{)YiRg^;Ds@P-HnqxW5q6-%+ zb_;N7UVAflKBpG=r8dsfIq&op3olx*aN$YjJ=+%EEOTwfVk&_jJB||f>u!AeXq2@> zrWr0Z{D`61bCN7HHcgFXH?qcLwR2*Ly@#XWPHmE<=Pb9B=#;Z&%r5NSaOsN96`hkt zG>hyP+7tv~^C)pmCBC9(o9XF4(w?GkMx1-z^V@gN^Ca=V-r7OF5gIhei#D6EIY;GN zq!f?E3oJO}n(UN3xB6)8n9`Lu-oE0?-M5##e!iYYTf4`H`+2(FUn^#f(WmR@w@!)3 z|FV@=G~BOWsx>{&=hOB6Fm{AIYPZMPZG3yao(4f2{VUcAVy?Vgq?S`D?f)ZpEWbgi zL1pwm8eMIgxOF+Nvqn;q-Q{AVC)r)DHF}a==ijQ(KT#$9=Zwx+zFb-Us@Z)SZC%VQ zLHwfKBf;+T5#v{VIOpv?G3#h#_qo#SAXYy``4+tayp`Vq<5N93=jEOjl%V(?=C{!J zRA0_{zR?$(Sp8)8xz_k9*_&kdc}ER=virQ*_$ukAvG2=`&+4~K zzkPXLGqm&e0J#;?&+w0RCZjZ7PnnJS9w_^e#_MU1r*8wX2TlAKIGlJlfFrAUPVJmz_xS(katXp9Ljn4M_85 z;zgkNXMjrYRFGG0T6Qdj?+G3b|BHhHy6jgY;JXLpUQT}zq<@kA5UBL81!c#2JIJdn zeF7-CuLC9b`>9|(%>AI!{|`|5Tn-M$zX()%=YnJ<-D3VzK~!<;W-{;*M|w<@T@ul* zrA8lT2sFiW>qLa=GYRVq0q5@q(Z{WeL55ow!!uE`zo5di@F_fF{CZ#WbL&rNP7mqB z&pqhY!6^Mr_$d!(hoUbwqz6A~m)N23m+U(z{c`ZpP;%)>PP56;cb8kKWZyxbKS)jw z$>&$dCwZnf>HhuG*1^awBm0hbljWy^{5aB)^7HfKHdj;F^80=Kz9~BKZ!rOLjJ}0% zIjut$|5o$gO{T@~zb|eb41WJTc&E|*`~N75-*55VId$;+_xB0L@88#7Ax+t%{J6$- z=3isq-u>ZCQeJ{!>O#fble@TR2?bk5B_F)bC z^AY}MBJ!g4wSm~TO51tmHmTapTh$~*tXtLCD<>Rnx+dESs-3P@X<-4DF*}}3+Y8K| z-??yU=Q2BMjbqL*L^!guTGX(BCSixbT9(z=(PnNFKAo^O$Q|M~sQL+On9c@;C#@BB z1hn2xu>0SjL5chSdD|O{b54w$);4yG7V1>)5Q*$NM1{1*jC+MHxJkC8mE5i}q$wcQ z29|WtTI81XGGc6TrRQRm#VcBmq(h-^TrQ}1V-0i>j$5BIz?0X?^emK7sdX!{msu#0 zQvNczN%^l5El{UeT$M~|6DkpReZ9??)WTpLPwV8t?Q20}JQn_0yYni&J z?w`pl1emQW=OsuDm`9 zsyVKxesykiHAhx>c}F zw&lO+ZDD~W>xH59dmY2)5i^^u^(iRLu4$NOzWc(^1E*nzIcJN@fGg^Pz3?G6m6M^> z?I!1z7+G$96O)^thApnjO>S-57Sf-#xh=oFO;zv%Zwb<_i$SeAqw8asTPN>)%q7G1 zPOL=3BK9_!i%K+a&EGH0`*QiV%`N%IbNN+lo)~DKe-vR}Z7v>k`!jO!P;Tw2Ex{dP zTj%8;^2W#e(T#2Oa%<1oES>vYRcv$21-aZUrfMKjcFO9iu58Oc)RKS1Y1@(~mwyOt zv8SWsg1!3k(>A-pP=Pz~T%hn??uK6XvH6%MYuey48%W9Jr}gIYQ!>i3+dfhWO=)y_ zLzO8x2%BB?K0tV|8)i_~Q<~ApWgG=s)=sNOU}O)>iB2gi!{82=?bI3JWjfE_xATYB z^>w|W7}T2oMQi@AZTTHRc|Wr+S;Q7RdFOd-YiKtWW^qC#XjPBsEEQBCqWkh@(szM8wRLZe%&gG~k(vn69C|-;YNgxQRAM=V^UBg`5haRT8(PEa(v&hK zsv+v}mdc8tuXEc^6?8uG$Yg5<2f?Wz+&m7d%uk>f9NM|FtE+R-QuhDkypGuL;GA|E z=<^n6^Bd2%VDW;kc4i~9mngFiT+}%cQ3Zd32p27g%!~!+n|v`dAVQafyIxgvTT;LO zsNavY+CHU0>G*!)x9S4_V}{Qf9%TK#jNyrfs|>F-{5Qi78{T4gw#uP6IY5bo2X#t_ zmDYhWp@PjiFV#9)EekD7D!5dOW;Ll`T(dFE3qrD|j%!L~$Gbf~naly-JWa|V;;G}9 z)!}#l#HQrd-TVCceq>M@sgy654(kv4@S`k$OCsUE{H~6K`*K?!3HRmvsYtl*AN%xb z#jG(ZUmDXm&-DC8ME(T{;hhQLOB2FRj>xs-t3uW|Y@UsqM>C0fseKK!n{%V;Y`V00 zp6-iNPRpKpX=rt|L}_}?B)dJTPRQZzayL&@knS5Nh&w7cRJCyGY9XJEg{#sF-|s&$ zQcg+y=h-+xbB+A(G5!fP@_*6zPm1ujm#SUx?J$0KGZjLMecVuxyZlE2f0(Z$=%Q4(1SNeJ<;L|Rc{q?}O_-2EqG@gnp)9+J851Bm!PWyjb6}q3ll$5>(?BtT>>l|wIr1SwJW%}o< z#DCoAM}3d(BkcxzpdrN$bcPNWYce#ODHjyWh*^w~U0Ri{J6ar~BSHKkp|pPf2ob<@W*O zx91>M?!)lC&-nB_IOpX?*0D>E7x^8$J(v%b^UUp8JQOUhMfS zlPkWd@SSITdd{5la!DAj_~Wj6X3fNq?li;^S&{yq(_0spLirV1pi?m^Ssip1(DbG zC*F^u{~kp3^bbKyU!xub>3xs71ElQJp96WPq;CY3-fB>KYhDm-#I()@RlM^-#nbr% zM-e^=WJo-%`8 z-c_LDEd-Awd=992b#DR{?~f#+`gjUd{6|5?-_x3pr1JSn5I#}!_*6ds336+uKLVbD z-0MNf9}gZw_%YxCpw`DrzV^3Py=dQE>GL5_>D>UTp0&TV(wz@7rk|bzo=EsaQ1M<3 zD&Fr%RPp*jrP~LpKE7i9&w#L|{{uwc#P@)Te+|fA`fUC|f9;z<(WiiluYD#YU+d!~ ze;-itU*P7a3evv<<^LHd`I_IS_z!`|Z@U*HO8S-{yzORC@$#VLUJOd^1)$`#fD}zy z9cuZH10}Bkl)N{9O6MR@a?vq0#udG@ZItY5O*(E~oiGcZkTe}O8FH^Uf5vc_p=>PT zmwX}Ma2AOUCq3;WfGx$%uj3IL+>HNq_?tlD3~mG!F9RM-xE6&dyxzj=K=Lp|nNau+ zlfNB2knnAw!uu_J6Ue)ENDruVH-JiaJxCL}WImzNT}k*pgf9gpXFjO#4v=`RoD|+} z;W>~@4#|QFZ?^CzkVm0p{-NXyBOF&U|4`w|ANmYd{)p@HHwx^BS>anjg>M0=+mdsj zMc+s`HZGS>-uWf_g^R9yiM|vReHN&4Xa_}CK19!gqBnw~XF$=Vx9Iht=;T%NNO^Qq zsSMb|&4ucNyA3-GvxXVNlwm*2;_ox;G3++%Fw7ce3{!^vq|4>tKEocvZo>}4tYO9w zaPb~jWg@`4pHm5%H`$|%;ck$hirvi3AU9Sw1%B5@7sqD6HoN5M&F^E0{Nc~ z*i-kJ-}h^l8-Ks?FEn|+Uvs4SeLv>)#=p(@rMl$%evHnCm*2O$zhL~TJh^ksUuS;J ze~`Wz^DCa>`+m=%x_R;Ye$I);zunTm!1Ck!DW5QYJuGs^7~S_n-ez>)?^ui+rN6`E ztuub#@A#$h`+ml&#ZTBq^pN|l^g%!0k7ze}!+d^Je#oph|L=&Sd8&S1z}@EW;Nu{7 z89&i`%sMi==vn0|NTKWx9gl(+LQ<-V7H{sB&0 zYPk8E&963^=sKTI?iq`}!~Ay{eY5#LLpf`ntM6xO-mm<=-?PB{z8`g;`F+1r`>~7P z_oKdn?gSOwbUb1IyCQzg7Y@_sMd-hd(6#?enE&bs{g?=SYlN;dK*I6WP6+$YiTG2q zi*rzeG0b2jw=8^W=S6c?EbN+W1HDsptkggz)s~Eamd~lJu(x~SIBL0+VqRu9%#IAn zmUCA~vn+1nM%%%BST<@Oe*)8Li<1OVVEPQVM`EhDByP?{%-t&4SDhk^odR3TiBrW& ze`@E#IajnSM#yDzDs2nHX7l6xeAwV9>x5ac%}ts)%cNaR>UEjWelpGe2=0Vfg>B_u zp5wF&;+U5^u8H}xZlIHyv8N3>_0mC1mJPO=oTPcW?p*G%W8yRKa}#9dLaIc$89)0n zcFb>zkK)tTJl=6)Q+gE^GX`U)<+^F!uhVUu5^{5pmUVVv(RgKSoL^X!*|lI%C-+>! zQ*ZOQ7c9PP$t8|$T;g{7CH4+YQ{@3KpKd$8sbs_aq(|A}I}=d3kZ~stL`d8O;voQ`_fc!hjG42~ zo_6}Qv!_j;GHnL0r_$Z|tCUG(+y5%uK}8NI0c{a9kZN{Gltn6iZx=ULD%d04eHuNF zJsN9Z+77?NfIeZO|8dyZDim8q;<(WjqmHgP5q_Za;KxlE*PL;#WFGv?&gD7+v^Wz! zZojF4%!AL+9+mU+*6Ynrw?h5m0ndZiI!`$-ubF;^8v`ETJopVJNBwZQK9r&9TX1xd zN?f&h>l;m;`uB1=k4o~I=bBs;HKH<@v2VFWm1V zn)L$ccS^sdDi-<7kuT zv-#%Q7tkzZ$EII-lR9dGK{sNM64t`u|FziGH)yZMf=v`6bSS z_v>=Kyr^9t(Ghu-=fP|Jr(B2opGsv-KaB%eQIu3kwR!L>P2L8R*JJX`o8mPy-(L$E z!;75<-%k1&XzfFJW>G}LAnp9*7}s|{DW*E1Y6k2^5u=fxWV~YM!82EzX?d6(G!Nd* z@3Xn)oIdX-RWswa@80g4Hlzx(7nubgjuPV4PEkoT=m5^?cc^PS91{tc7tw>b?~ z_jO&)+(hO`GlBO<7Y%LPd=VR1F{`+(_oAW4ee?1&OJy^WaIXi67)@W38~?#vVZt?^ z7vqj{w~EQ=g>+VIkYt2T>zzFGrU#$dWAYt?Y)YRdN4gn@n#Rn;!&QC2)ckg47B-g6 z2cGC`hAR#*#e%7fxphJ5taEvFS$pQ^n)Mpw(#j_o_p@35Xn5s8UpV8bcU~uRMnyM| z^S*WP_e}bKegI*{g2i(?r!Tquq?GR-p0RAnilwQ!E0!(mT-ZRFV_r;eOXkZoVoIgjgL?;-M`fAtr5&`^09(vT0Z}sDpCqp z{xL5E=)xLQ#hHJa=v6#!Tee5{KK1(e?}8Vim!iJUZ#2Cc4M#`(vd77Jdd~dQ4bL;Y zz)*6PRy#iFccYxeq>A4`E!1VbRt_OzCSNaSPxoN$7uzilw z_eb$YfQO=w?4e4}>LIQBO7_M&kT7T0;#D~$gCF_M{v{NjP<%qbVKaz*e2B`Q@1u){ z{oUEi(0_0r;e1-1-45YHHsa@#>+F$AZ#{m>Yw#LSa=Q(e8qPQDFq~!BZkRL78cH9@ zkv_skL+Vg=N~ag~RFaQ+!n4pRm%$lB!1*7hFm?W}?=O5wek#DX&)*MC^i4#TTP8pB zP4LN`ZS-EF%dRhauhI4V%HL=HFPeX|`F{t>-s7K#$z036qj?Q-`6>e{rOSz&mvv9PJW_qGQU1v^80=9b$+hwLB737a;c&EXKoqSht>5J z&IQnWFhovi5k%O3G@h{kgAxA=5r2ks!u&TzwJoeY|F04l9joXE$glu6{2L|1(fm_Khj>w@#ih zV|M%5XSL6E<9jtm8*qfes{9HjlX5M6R$Z&&xQnMQSiW>l*WCF*BO^34=}aZQwNWUb zAl4F^C^H$1=H%VkHacw!;AdaFaLI)UR*AbeXV;2li_dlKl<+`)h-F?0kI$ynDCy89Dl-MCp%e)$)>gq{;4}!` zB!0L)G7cXt>!UMX30G>-A#_iit*S_?9|X>%J6f=g4_^Iu}xH0zQ`A0`L5IgU%0)+xNkb$MLCgE`vh)WNb&CCBbL4 z=uBSXz7IVXsl%c)DuW@%YrDjmyu^JU)CiKxxc}tW^wYWk+66J=XYTEhxbH*8#E<)yDTa?EA0wmfSX9(Sg?& zuld|Q5|MpJrcRzYxj-)LSI}WWSsU-#h<>gyS!8ur{{BlE@ABhG{wC`&d0UZZMd3+d zd5Pm)jk+mtKAW467jY4JmB+i9OrC!jdQHD==x1q|nn5bn#=CU(s$7RXC%rUct%_VY zO|<#$!u}l(1`3mKc;5#a;q(LCxwlz#Bwk^>OZ@stb@dN?S#Vji8wF=0KV|L}JKn{H z3jfddeXxNxw{yY~D&CiWL3HBMa;>TjZ8Y&u-G#gQ7Tn5ws^U7=F21S*IutdCp#LfT zW9g~?zI@f5pZg7eZ#WaS;-F8_99|k;X{D!Mnd!3Q#)%ugBRXZvnnn z5x?iJhFN1!KUX6DX!+9o@38x8LilkJzHppM*I6T$>>{pJjVy4~+QY0CN0x5RSHlkD z7BzH6tllYc&VQ%;d)D(L@n7X%npO^;Ka3qA&pNK-#=#UW$5@G6nY2#^;i>5XmeIEx zUF|i&@XrN&*Mi zxSo|)+4x%nJYD?$W^zsMSU!zeWK5owUo77P@EvG;R*tcJ&%(FE(yhdI5M}mc4f>q| z-(Hrkm2X+P>)>IWtWE1GxFypXUt}C^l;)Fa+-@d_?K0g0YFu#)NZCz19OM~qlP=`F zZ7)!AG|tHPI<34&&Xb_zJPPtnPpd3w5~e>7O3ueY#k&!tY2nsaDBi{Rk?+=5XuPup zzw|p5l>a!8cy4`#(pTSsS4Uxe1ztCfsP_=@68BT?gMI)*NxjCu2}BP!pPv@XkRJTB z3rqGv#_#6$E4&-Jwyn)oxwl{-@Ub7T8<{8$(c+o!M4PjKUi z_+^uodxoFpZTt7)-r~pa--FTfFMkPLX?pj!h`%4b!gP(3hW(l+9`+v+p?^O@uQukF z)S@U3{rQbDD{l&1yPV=^l!hEjnl}SYG#Wc;dSvx|h(kkk#Q{L3JI-CUU@0SZvqL-a zjybV(SKnYaU^gju(4>kJnVG`PaN&f~=!H#zW9*LpWRqaZuk8~YQuUQF=Xdt(abru) zP)xWNj?Q#Z+tD#YVvnyqcD32EZX|KWwAN`;W}bC+cp7Tu5xUatYb)zN0A5WSEy-KS z4O^Tws&a`QL>XZ3IDA=YYutg(2W%eQ)D$-#5ZgXxiQ*7s-1uWJAIMZD zcr&W~w2^mllAEsq0^C-`!FfNgayS0SH_*9S#~+`t_qmssrIDky1t05fC&>QIo?Urg z+2(V`thWs@l5}n(f3`h&&F$-`RLmx%#$3w+IZ#;)9(|Gn|TPx z3p53)^sDVW%S%jNAM(PkT))E5qhpKCXPagBhi^|b zao?y2)}!Chuwc6m*GJs^y&R1*xsd^+GW*+wLAieJeVsVo+GX-aSp3%77vEsox8`Y9>ZyPpfnWzB9BoQ?dX<|}bLb4I&%{_J;KU_|3E7seNjV<}p`+EbGPv2J9qw)0Z#mgPquXNoC+ZJ}+hn6y1iP?x0 zh%1VcyY}s9epQRCr&7J~(n&&cg$s(pxaH7P# z&XZOUqlG=wPjXX8X=WBKd;kOO=6w6-0Bg6r(XheL+s7uDf3jhR;njwP9qa6(FtN1R zwzMl5Ty_J`^LAmxnT`0o<^eXAdJDd7rdP?}0MsP@fu3Kvhqa^ZGh0YEN&Y^@U#mWE zjPPszFf|!#`iPRu`k}Ha9+t_@gT-Ab-Pob~R{Hw$?Jl1Ye?MGf?I$1Z+k4($D`t(6 z&%aCedaEDps}OeYPY6Fh!WWKH={j41*b$;F*g1y|MNz-wr*Madst)6`iEuo1C2giiNxe@w$T}rj-{`t z5?|*f$|aQ_%~t24_KgNYHD=%Q=U`s3ucv~2!}j-5zho-EZN{g1bk6VZ6?2|u7Yqw_ z1aeKUGP{7%mwn?c##iV&dATl;;CzM$xSm`C-?Q*F){w5VDHvb3r4!A!^pkz#QsXQ1 zbz=0BE#s}m=f?>O@=U(uy$?R054#^?%jI_XE;e~~U&Qh~0pB^sS4p1Es=U(plImkC z_tA0KIld3_m)3qEN7EJfGB^hOB!~?peKSZ`H{A^$fqmpsQ1RXY%8v6^Q1PaNiZ=%bBC-vjck z81*iYc3FB6C_OF$6<_1r$ZOL)*(UG=qaP2_cS@&0>8W)V(nI6u!mXhAzYR*C`@ka! z*Su%xseWOazYl>7C8Xa4DnHA?qo7|5BKozOpUkr}YC0&rP6YRXKLb(+>DPjF;2*dz zcn;IsK)QA5?}CzdFUTu9eJ7}VehO4M+ytWE#P@@HL0JA0MF`|$J3 zID4D&qx8_t+1q%AhxFj59-O^R`me`7l<+kc-VG{T>GAG#=}AsAe#vPH=+53IIhnv; zVsBG8yiSe~JEALJ%6v%oAXn~#I}Edi8N-xeKk>L6+-KNh*lpNhm^I880xsSnZVuVK zyz3=Xn!oSI|2`%^JUyV?A1Gw`{TS&f7GL!s*K71m#($#uC0Fif$s;}gJ-^A~`|t0E zjem>r&y*j2|NZ@|`1$o2y`G0b{>|n;Sp4X}ouAy#jDM@qe+){V|K9!weDeG6>yIq` ze&erGeCYoB`b*>Y-_z$wLv}kq{`F1sZ$XaSW&A{!o^q$~lV4*qa>q&k{Zei|ru@&5 z)?s`173QPfY5r~KA$JxJrRc*n+0 zb)b?9th#x$I6>d7p{QlMsbX#%chFx~&0NSgW^wPEy5w zc%^-qoF%rl-KPShZRGUTT8y@IM=Psvd3f!}z^uBu^Uv#?bBV37u$w&;;)Y3z40B$> zvXhd!FV<@Hr6frQx<>Cz?83p#UTzv5Kf1(xn*3xIWRx3-F)%lmNGVU>?`mUuoD@|g zFyWN!$h2_DoOvp5R_HJe#e(Bt36E{m^m3b_BQJwOZX@R9+R7(lk}i{7RvOhJ6pBrc z_e(77<0>BiI=bQ-9#2eK!^8Mc1^YR~m#+Qj@s*MoUC|6*kvOK}mOmAVqbu$BGf?~f z3FDf_#n|^*#Z0Iu_-Ae}F(;^*g8cO2E$+w_>cIVP`>&QjP}o(n;0 zm6e|JTe{w+&gy)<#aNF#B{2-GBBC8fxIW_S@f%FuaV9TAn?CHy^$T9+N&D$MX!06N z$n@Ie6*3*Q$8R@z+fAOIAJIX63u9Cvg?)aL?D759pCGz(n)l-Bmw*cQU!pyJyUFvn z-Ad#|oKMOHt9}ion z*K6|n_7CzKgu1bz`TkmXJikC;?xv7EzMb@sfY!rc*amb|Hrx5h5#)aA%IUpC5(9R6 zm*|;O=3a^R_{rx?o;l-{u)avPTBi(~`!sVfDCe)*>3+HVqdMKvz1dsWE!xP;z<^o{l{c+3MRamk)c+VXo%ITaKe4AtJ*qjHbv-|wvg6^o;D^ch{chF+j zeprixG#jG)ETw7Irq2=?b zi2O?u!ap0~GjUZRTY;k^L|eyooE=x;au4&1qn~fz+ZE8`&hz@7(HSe3Ghg7*|6f@M z%}%*8`X4Q1dIJ44dv5eS#+Ai?tADN%=XV9SO7IY&83vFUNxY zFtW}}{H^@<`fFfcRe3w-?UFJ3M_mQOCyZa^@0{lkozHYDgx?#V)kCb^QEC2{@mYPu z^8FFM2aM0kEtXGvNd3U1o6%T6~7&%jhLPUD*k9t@ntXJ-bm{l z5Zbfpo#>?a+ri<)dkRFiQQrX-?_LZ4GAOy90PBcyGf3G@Tn}Og8?_dsshfT`I0C-; zhUb8ia|AdX{x^V!<9`h(d4oXOt?9p{0{wmr%HI23kY;ZBE1>lIG>F`Zc~J5$28ZLn z0F=BIP~~;1`PHAwKqt>mpXhoz@*w;25J2|gAsLYP&aNg@8(b(pA>gnZL@#GIMMyZ?K z4#TWr#t;bNNf`uqx0n3fgMK{XcPOWIb-w>UjY5;Zn{YXu8>9ICeYHgV`2BnS8PWO4 zE+lt^;v>JGpIn{ETVwR|O`d;`YrjFs^Y85ojempjA8!2qz5En%#qZz4YUt~{7vEoA zWBx|u$eqGZ^!er|YH&V``MZ@K4`jdjzXii#gZm2mfoVOf{LSbg_q_S%oBw<0Df`^_ zBpCO1e)9Y8%pu~(@4ss*H)D1DUn4(Z{|OQL(uiN{9K-zgk$%{JMTCBPg#N<_y)`2L zrU+f{v#@*yl4>-9mAA&qqgFOW6^Es3kySJ?U~8%+LgmEcBqUi5chwLUGTwyGvne%v zxy5=Kz3XJ~glVt~E)MNAmS7G`SZc_5B~_Oi2Is2`3RWjpx1jCfvP7qeGjxT@;FYp0 zaeUIU#Ik$h=*(r-pNq2}C0d~>$cdVeX3rkqRAPmSiR%q7UYA zxu9zHm^G%K>?U&c$W#4pLcfb#h&LMro@(}(TuZ>$L}y2C%k;v1;{5cP=erC0r`t79 zn8tg^9@Bpna|faI)6j1kS!$2beXQTH{JzZ3b*jLDxKS`S^3(nHinPbfl{>Ru~{5r|}qdKb~Fu>&2U9c&a-%s7L`*Qg+z5RttZ-3#EC67}w zmM(e{yCwfE6ll%=nzeJe{7<|EBa{W~Bf)yioj=4-qkn%XJ-gty%B^e*PE(3WHU$;c zL=iByxHWmp5ySWm0qZX4txeIkwHMVpEm`!(+CJ8r{#<3WwnU?y*pjY&pvf28{eh7~ zYZcF^AN}VG{CdBK2&iU)@%rzs=KovOY?Zvb`t*3!_LR!F9N2Stw*FDD=l;d)u{=~f za&0^@wm_MOc4IETM=uHRcA3K4#Wjz(fXW=@7~9(8g6V^ds!oIV`qsivC*1g7;&X4wdS{rFL;aWzQO)~aD)AzYly$Wa`_*J z?y=oBLFCI@{Uh-&_Ld3mhj2@0cT3@4_9k#Id%J;Yc0ZEK^GSTse-78uuGR5lp(bvy z?FnsNx9i4pT+p`8aR%9ITGn3Gz<2TYOfqW8Kl$6Q^A>GcJGFr?(X>r`VA@vydBvfn zN0F5_!{MXFJgtw&E%_&MtADoQuuAMYG;Q5EoO*U)T`8NJwG(omo(FMGH!{EEeMi(avv<)(heF^lRZizg9-sAny!$mED; zEvuZ&n1H-IM%LmL3m2y5EL%3`3T?1#eC)8iVlf*k`+P~&)0Qk*7}j+0ibWT8E>k2? z%6Vhb3X5x5+|_w;=dyT-Ml2O-fmP&AU9#fBg`M$Y16rxnAS^~`w2tE|Gqw_otO;@x zD@`#gRF=rmdhlThNyU`2Vk8%)sO5!N3{6O{ z%Tx*pFQbLiD1UB>X_eC~W@7!gxQSGYU0QuEN@-AtuT1v>dl|)ImDRS3Q5IUtT_!9X zsf=iGqqm5Q6AdikEt3?AQbr>t&d>ASe7Jnf8#R2+@Bo`2e2n2)hFyjqG3+tyHGItQ zX~VsporyhU4JR1RHe6-+e#6@hA29r>;d6%j9~tO-v|-NhZHAW{-e7o};eCdeHFGR! z>asE8f|E-xa~lG1gsCnHd)-Z9oqweb>4VtK#R%dL0t+&l*@+-^+1N2kN7qGWHd4QA zw8BqgZ~HNvpUOp%I(m#HeW|EY^U^TYE5_#c0d-y})%HIKGUWbG(#fm^<${;RDQC@? zJ#WGCrE|LG&Y$g1MYB?{NN8U!E4xd=h!robP*}SrHWWQxez8<{ErD?S_!J5%>|)7; z<12;m3A%pM3f-DPeP+W7QLAC@f!1)gL|E0dPje;sQW8W$^;BNQ44xL2RW;>HUvmDC zP(78fPA{vc|>xpXR zKRS&G_qT+5`_#z)S>xZg zM*i;@|9&;{@5@>wx&3S8Ki2pUsF8o6@eiqyf1U9Ut&#tG#$R6}|BJ?dV2%85(!wg- zt83(6Wc;tGk$;o%A5rThci|4VCGeZS1F zANA?@{^My8eSQBe%J2J^QGVagi}L$^Xq4ag2c!JHzZ&KD{l+N2@7G58eg87b@B6<| ze%}v`^80>ql;8JPqx`<#9Od`@+9<#8Uq|_U|2N9-``=N1-%pP6`+j~Fk9F=oyLini(;pZfTUz!m9{)F() zC4_%FA^bN9;d@&{E1Iv@CxjoL5Z;my-kA`7WkUD|6T&wogg=@P{&Yh4-xI-(K50==Vp5yB8I-@7)uk&)`lJx(b(MJSq zW%}=57Z8%lFK_gu^vCWK#7|29Iin|~f8f5A)4##!N$EH5S2_JZ8vQ(S9#_9-9#A>` z%|=g3f7y^Ae$xH>ccV{%Ew272*^Ql4{$DqGQu>{?3q?}-54Q*Z?Fs2$WAvo-Uo?7B z`k%7R)06Ulyf*d5P30Gt|K&zcN`Jf2lhXe%n?TAX<^No_AR(2y0G_z?zhd;H^qUTL z;uGH=KQ($%{^#0@b#g-bw;DYu{o!i7;F9wHU85)E|N7Sj@n-^Y`Tv>Grw43h?}ww= zj8V?m%IK#V-Ck2=^jsDCbfYJw|52kK8mLhwzqd;K!P+nrm!$t;Mo&tAk870Ek;Pvf1}Zp^8d{$@rR~^@=HqpSfeMUe}&PL(*L(A@%yW!|6-N+ zZ(>tdxuo>x8a+w>FBv^4|BqCO{|0SVRU!RxMo&ur-9}GJ|KnBSKU*dJy)sU{R8smg zjGmPKk}C1n&OQFml>W*p z@gFpLQvQEYC4ST4LHQ-6-(vJ6{ckpUQu_A!O-0X1)^MicY`7!XZ+lgsMsc6$Gp-%{ zzP)bP^Zk1S1o5}>`<3zQd*__rZ#%L-xA?E(H~Y>&zP`WCdHyp?(&vPu_i}0;CK5M3x@k!5yL8;W`##c)@%!K~|Ka1m2{XGrekh5N;x2kHGVd`B8zEqcEQ|8nE6MemVx68_uxYq?+E z2LBb`4D^0`1-&&!@3`4?2s`;YJ~H@;f*ZeR?l&-iQ6dnWuReXI8J zz7GBm8vo=9dfx`$ZN^uN-cP{)SL3fm@BR0oTpkScuBE(Bfq$p*tAFmCf3JkTQ}f_E z_Mt$owbRPl84W~!AAD~%K5OsA^4$*KX~xH`9XOw^c_r@&_%b!{?YVC%^$*KOCH+Ri z*I@DvwR8&ap-{Rr;TvXrmE>Io-z4L!l;2z7JH7^a55sp(4f_2NzLpx~9m?3_k{a}z z3SUPJ@)pAPo*MMK5x#fUAn$JYdTP+`Y4|=+gS`FsPo?gxLBDbEeXa(1Z-ejqHRyL8 zeD~EL?>6|h)u7*F@I6t3ycgkn)#l*2taSf1Foyhx8sxRY_d1hT>G|k_?*QYg^n832 zzOgmv_W*niHOPAwzBkpN-$6roE^Cl?3Vicw&~F}m=hPtYeehjbgMPQex1kT(*(+iK8nCVV|L$h!)@2W!ypR`~9$LEgjg{Z|e8{Sm(J*C6juY!iQ} zLBFZ+ZL2}vLimP!J9yqIJs&s1_bTI?Ug0})H++r8SLykE8ot-nAa8#L6;7?9-xm*0 zrM}L2Q5(V2IOpku;Mdq1`#s<{z{|i-5`GEzE^sDzC+9y+0~K!)cn#qrLB%@^RJ@@e z`=+P&1g{4Fn~tI4{Tx)h$H7wwzYkQruY!vApWuHG{$cPc@LEvuxL;X%BoLB)FvyoK;@gO`I}1{LoXQ1Lzrt|0uq zpwe3fD&8XSX2LH7yTCI+#XAL5yz$^@!ZV=ay#`dgJ-{BqcVtqjW#Chw;{54|T?&2!oCAKG@N>cW;HjYE zHGztEG+X!C)D&Blh@n(S^AiNEHD|iB^ct?SXmjN+druPFC?;m7V@qQ0} zl<;4I=YtP}igypFcz1y35q>MEcsGNJcRjeC@TA$}ri1#e0c)tSACj5t>;ynl|-W}lk3I81UX7EN(>8%F8PQ0r@x-aPk zpyIs^RJ>O3!-P);&jODD74Hq;*NJx!*hcuPK*jsh>w|c|0&gJvr(i31Kd5-OgNpZg z@KuCw0KZ1OwV=|w68v|_5X`l>4lKU&{sPIjE z2$UY51r`6JpwhV!R619HdlBy);Pv2akUoAo2TIP#pyZ@M$r%Jn&R-4*=slqF`5sW|Ukxh#m7wx@DX4s&2}=G5a4r5rz*9jzOm`Cg9QJAH z^J7r@+y#pNbD-qj0!r>0Q2Dw7RK6C2lfd&p$$1kfIU_;IsRt!zFeo`MU`Ia%{%xTA zkAuqBBcSs20H}O@5hPyQhd}YI1C{=D;CSe(K;>%`DESA2iodVn^9MOwc>34iN$@=i zO26Ad>30(-{jLBN{}NE?%mtNB4pcrTfXe4_-~{jxP;&MKCFfb@9Z1d=P;wpwCFjfF ziSTbU|IMKCxek<`*MZ9C5>WX(2UNT^Q0bomj)$HFmCr*!$^Shsqxa$eB{&Xz7?eI= z2c^#^LFuy^6#wO*fnfd{F7Pg2zCg1}a}WXfsLvQ=sDi$WU#rPeK0@cs%%F zQ2JdH&?n9Tl~1(^75@ZK=^O_to!5ZM=boVQ`PZST)N$Z1K*{+LsC?cDO3p_>$@u^% zIjcZ@x0jp$LQwgf1xnAeK;`o!Q2ES&iZ={Y`mY9+&;3B<^Or*c`CkL`_`e7?f*U~T zb3G`17K75~&7ky|0!r@5pyXyi z_`A)&1XR8{LFMahpz?JF*bDzL;9bxU0ww2w0Nehtzw@_kH~c9m`9A=q=R@G($k91A zBfu{h{ZmHo0f!U*?;uT{^fgAm+~}7Y{T)U>3{<`j1f|b+8EcR}w}aAqqv89(&mr$R z@Gx)@sB$?QRQz$E%H;o@z8dR!BluNNayEjJ^IlML7K4&A z50spC@KE?qH~)B0<$EkBJx72l-v{>z;(ZZR_$`L-1wRe_8u0btd{F7O1@wu>gG%?+ zpwitFRJt$n5tsf?fx16_080OdKt5gRO`zo50!shYpyVt7C1*A$IcI{0z(3jiO`!BY z5|o~4Q2Kv!?;zf1L4|+Za5cCQ`a3~h#p$`A(#-|*iN}CS_W)4o?qpz5>HYHh~3QM{jn zcM$Jeh8-5(0*Zg4VFUP|#CsjcD<%CZQ2P94&p@AVgVN_VP;x&GN}roR(Yzp9H1vpi0IdJ7kR6~EpmUjc#C?cg?;uLHM&Uk0~;s=v)(H~v15 zID>mZigNHKa24SjExgCVH-J|XzTU#uSa>&x?(VseoTU~%AH0n44p8B!Tl-yw}T4^-v%n(ehc3UUQGBF3*T(v zec(L8do6sEg>M8eB)rGMH(2<3a5mv( z6@Q7TyD%PWT23UvJ?Z;JXQL2X$ZNK;2haa0>orQ1Y8V{suSlZ!+N- z3m<0T_25Lp>nvQ%{0-Lgd@|wNLCM($D!ddXSgJkTn+GZQ(1y{Rv-c;qxuL1Egy-WR``uTX+tn{@r`34n3PKyb0tM9nuIY zJY(U*K%9GjDV(3nuW&WtB3=vjpaexSxZAM9Fl(4GOd0mmC>MX9VUJ<{{pgZm7747&|G46}wA!<1n^h2zpU>@n;%>@dt4W(-q?{S<(UZ`fnlZP;O$HOv^M z4Ew1B7vHeQu-mZ1Fl(4GOd0mm&U5h%dknh`I}Edi8N-xeKkY6T->}E9+pxnhYnU-i z8TRu&ckvB-47&|G46}wA!<1n^H=B!Z*kjmj*kPD8%owH&`+4YGe8V2YZo`iMkG=PS zkLtM2hVQNf5|}@7EQ5?mSObnljIktykO|jb5MVi38wF$=CsuZ4Nm#@}l98|>&}I|U zRBdT1-jGyjNus8_wQxzRFTrn>1UIrnS~aDuoKS}*q+Q#zpHkCS{fr%vK>R+>%$eQ0 zclYkD04M49>-?mB?wK=l=FFKt_utI9f>QsIOnU-I9KO4`&w7O zTc@v;^t<1q`GZo%H}Eis<(Yk`-?~|+uaorqgx?JNF#H1^IxxN2clyIyG;Q{o@;xZ| zW?$)>qVE=w7ZJYMSNd0+1d-nCBmDu=kv98AD+8J~`#iU?JlG>5^8P>3&+PMDc)d<< z_H`~T)wJ2i`94W+_HDjP?9(dp3Waa>ZGK$pYxZgWy42U~%lxwFXZB&?7RFV^P{|RDetuC(<}0h-lXko_F=wX+NV$WZNfMEFmICf zZYk3Gmm?k9+w8L}6#dM;N_BEZd-sdHlhS|8zRK%Ff3uHriRf?kO}0w?2PA*F=wtRx z9+LVD3jaR>S|77-@}#tv*(dpZX)m)cvSzVPZ}vgHDD5#M@(P7-_CdZb`kH-@vspgs zZ}vI9BKi(X{&!1#%|6Hfpgh=PMEG16pzJ3neH zA27e!C-{$ekVM+-3*`F)(q9t0v(N7d(a-Gb z`?BaaCi0@9pV`;9o)=w^XZG<;7kOsi-gj}`LcZCjM}Hw~pK+0QN$hR*>3v@68-v~q zCqN!nvdK#9i-ADw=)(0o76{2fAXm-c;5 z=%q4$6p6gKqTfrxuND2wzP4*cKeLZ*q3CD!t=%KzsYK+>5dF-)wKv3mZ`@?5@Vw}E zEyf)~o!HOpLz^l31w`JrML)9-tz6C*X5ZOoL_f37>~BOrv#)H1=vON8J}vs)gL#mF z?=5LBvyW^TakHl3{I`-^wT4L119xcpJ^=Y+LSwp7blGanFJ20II@at6-H77_Q--ZT zndaYs{!DuOc1^#5vPlQaHQh5s({+;muZ7Q>G=|R!-7o3?&9Bo(g#S{$riX8EF{y8_=rdE~ zl?mNnpydrp`sG583;(^MU#G~wPvk|Vz0O>t^LI-7goTa?f1%KWLjQ~CUnceCdp_1@ zRPrB^^hHAdInF~1e8ZO6*WM`f^XL~0zaq5p`!OoC+2{UKq+$Nkl71fh6KLZHglmw6 zrR4G0Nk0L?N%Oskla9FPdY8Q4a`A)E&zb)*SNhE^{k$-U{pJ#o?MY_3Q86xapzrhP9!(9Ua@Zb+sUwm%p*pY+CTW>+5Sb zuG@UMLXyf(_HZ_-65UzD%`IKsJ34lUTU**XTXuvWY3pcuEZkBZUS81!6J%mnmLY}9 zboVKL{#Ll-k&iTmceHdjZfl2>wMr=BTAI4Uja^;a9z|?QPJBWD1$K2eLV>2%$HH41 zx2YJd67+1^v8}VaV@J5MOe^?E7ZKj8ee@iid)nq4(^f$4+Kg$#Ez2vzKBuc-rHl_g zjD2_MUwYfkq*@Ll=+O2GMbM{lW)T(TVPA^!S#wopt-der_xZ|&HD66(YbPOWc{<}v zCVxd5srG7j4El`?7*7RcB;msdE4 zx-Vnea7$HHvaKpAF^*YM28Zyj5nEoBd9Yk*5z4{z+gpV4L7usY70biE$r^{Au`^3u zd8Ou0bc(mXu%sE~?XFqUjFYXfs>^7c$ylxmGxua0KWUE1R)Li(uWT45&uH07TX8wn z$=<&%%Sz4}F|*!!V#75AK5)TFN?$kJSuF=~LEeMTHM3TfiKxe`6P>|R2d~V{SCZLx zMVaGOuEy1f$3){+dwCciAEEh}CsFN+${h34X0Sc3^%9xOD?Bngu02O!G`8(*Ns_WAk)$~( zP103!;-(;;SxMz}bXC=@A4>2`J#JT)1fGO%&n%@8yE1pNUZ2HEBegPjsr*V&bjnAkQpK%Up1ZhAy>Z1PS~&S*TWNHf#5i$(?kZJU)nu)o?yF;I z#Fpo7IQL-Q*q%n-B-Hd6&gsOioJ4o=9MI_mS52akyoPjIxsw=yX$N&$p_4GK$FNQ- zb`r*Q4eYeyDst~qDMLG*z!fWU7nm5_X(dgfwUdW;I%!pt7(4C(o>pFRJ(Hf&EeSY3 zdFgSkUX?l?U6XbOneNe@Mp#wO3VICfbTX4?+zbkOj_Y(%lZRghsa}IRozUcyOa`H8 zM|3)gIUCetIH!^6I)!D>(lwUT$x0qC8DymlM`yZ6?2lyP;aQnHCEvV0w7#Z(ecWhiuasS zCZmVf3^ExRX(x=y2=JI6CL_W%9ZV)`%IKd==EPv1Os?dyJ(-;Dp*)$q9$g-1^GWnN zcc;Ic+$r6DazZ>i{^Z1Xb^XanN!$4+C&HuqPfmzy08B1($`F`b_QW8VT)yOCFuA<$ zfsm3r!}-u-AgpqY1DAv+y`M8>$?3fMb&sDcSy|{Lv!s@mGTw47bh0^}WqS_O97@03 zyw38y#&-_IUuITk>1pSM9E!f2e9m$`CX*aWzPy~yvR!jf4rNX*hqJ7dDJzH4CY#4u zUSf{Rp`e@-J4;BO4Ra`EQW=~jx#!Lt%1V<(uYXB*Wxwo>J2G7NFRRYTU73+vm62PS zky~D#nVp$imXW=@I`f^$vI>(Rt-&f*W-?etW@S~TtjjZU@ulVrt+*l+^Nz|)-0Fi^#Wf|GamuISRIkSf@U5T2^5aq@UL_O&OKtnYa}hxy#Ek+O*oCHEY+05(|JA ztM$)|%5Sfz4kSWZ;xM3(^>2AuSyg3aAOOTKLu7j5jl7z{mUSqJ`seR|^6x*x(sEy( ztgps0bZZQ2>#YF(5wL9~zD8R`xPIz{=00}@LqjIFs&c!i3gK{f%dT!A0O4@``YrVd z+I?i?IpU*^W8`nb65?&`k4mJMJlTF@x#h8n&H#B^odUz*b!+O^BvJ(A&|oR*%PP}f zfLj)m^66`PSE9mhc|j&ZpuHJtMP4h=xei@(DX)X8o40Lme6(d-`_>M(yjn?U6D|&i3ZU?rk0IBFQ6N&4&A0x>XKGxwEww7gy;nKBC4Hzj(!3aCGBVe1B3IRbv1pl-xY>HhU%2wD7r1}fpHCeN< z_aw*&1ll~Qy&Y@yRpIM8w(Irm;hGIt+=GYy?cJMI&#!62s`gDSTU&Otv^TXVY4ABW z*?FR>LZ*_)blGRng-eK<+nRT7-@ZFBRiv9I=nKON=z=*<(07Dapx*=rju!?)n|VSR z3h|SjCyYELRR2UB$7b9#(N^u~ZC>*P_fIjn<+-aQ<1jwB-Q$q$$DL(Zg~SL)-eVlhw|vZ#f)`HBKg%kq3YYVt*hHDZ$c8Ay!7)zd4oV{qNI5u z+q`2k8F};{;|fXgyyl%DsSo`|QKoa=p?>_Q{mAC=WP`^%kTeHSrboKBZQiNtXzp6a zp%!+IKIPL~&0D3Dt*9$~6g1n$w2zDZOF>4U1^>~$%3l((7BsrStZE?Uh*@Pow7v3A zg03UmN!OuWsDY)OzQ1o|l~0tmReJ)fHvsD=I1i zffZ%txK7pV`1Nafb(Ox}jZ6=Rmu-IN-gWEQHYP;T$PE3bko4CIJ}mK{7n(j~Yj5^h-^NLTNZ+@_DcEC4d{FrGg-iM-iGM`!+rp0s zpFWD1u0rTf2>)M&{&nzoZS+}vf?pNE!cA{?D|JOYbEj#>x6C-{8x!z zCiL$K&F_UU{q++6wBWzL19thA&-$|9i-L86pA|fb^i20N!P|;4U;c~Fnth$dYlVJ8 zX!-yrf4$)H>n$s4`K=Jr5%Yy^7wnUG`amatli(6uw3ROKTi0R|CZ0k(F)Z;Hg#KSb zKR!qEO9h7o|3vt22#yNU2Rr3$q5KE@)*XV&aj_d{_gnOhPo%GV;*j7M;R~Si*Zj&C z2k{$7N8BX%yzoCF_({RJg4|Qh^v}RYLERC*HACDQ=wPftob_x|4i_l;F5Q1{#L=Sz_$+d*eZB~ z;7jk)@t+c`6Pzvhceq(+K7O-;_@LlTf`2UXzajVo!8dRd#`HfC`mcrloZ#bvwSqpu zIk)J1D+CWqz3&tJkl67-@MC>>Ry%O$b9vUM1c!l++qJF-T6T2d4%Tc(cHBn_N8h)( z&gO|^!no&wHJflwPQ)(@x9r%_vBR6)@km$8jwevMcal!53B%J8eTk7F9quo?&Gkka zMV`=`M%3kq^GYM3EbeIJ;a-}})0edk)3MNAOr zqpqB0pSY*mj`XNyVrx%2?Imp&cEBfgpnFMPQKdJ(BK0F(mDOthYk6Xqme(#P>^xJu z@R6rXvN@GXyP%K_o|b`qW@kRnrV);vpYi*mmx8E|AlH&A4!{o>iIXzPW6x zPW0bu^!D8MDyHp-8G2C0-j%ucVtlB^^IrCvvGu8xS61|{EPazHbn)5xj?8t5Esoi@ z7-pRyWji8Troy%F+TqM0v+oB~023ZcnsirF+f~ip)U@r5i6=voXKXYX*B(aw|Jl$= zoEma=jqvjtmz=#bwP6mE`xTAO9EKlHklFfDwlRt^Fxlx{4VF2mUdeQwT+A|WQhwQ*-#_nPi* zzHaTR!7?OVJEc#wuBEMUHy5n#z*A6`l`0L>8MQQ9+ z9lwy%m$56Va(Omna_MW|N4j(_=S4u;{*$3&$t?f`Wk@8&NutZ0Bh}^liYna`AHcM-G_VntkSzANp_L%03f6Szb-7_uD z0bX4av&P%lC6)AF&`F!KS?uN zG~3lvHgC{L?pCiv^~xPa=iqAjzk$PO z%oU!`_+-|*QrFH&bIIFXSkhecb{Cd37iBHXbwiNj6@C1Z0y%m{cC2XOmB1vf)?GQ3 zQ{kK)6GQy0Kfdll5rI#yI;!4lk9}3;}|U$-`b?2z4l8v z^~3UX&rkslmc`2c6D(lHUPA`z&-h`~kG5e%EdWcdf)_Itnqa;m&7I@9B$i&C%KJn(vjWrda?GK!8Ak!YmlA&+}$6u?c*C3d39Q> z)hqJGSDUdR3<0yxkoy*Qv~2Bi@8c`N+I5Cf4HmyMNd3y}_@3(`VJQ%K+grL@xeXHI zJbC|hwaA+%Mk~acY-e!WQsi~Dv{5_mV@%#J%{B83eHyINfYxsd^uw}$Yl_)^EPOm2 z?t++jaLY6O3|m0r!Py>;p{n?p$DG@_Q|db|`aLPqh68c2>L9hgnfHgca^N6D)Gy}i zn{<80QQvgK$=GivzJHajeMdx|sc)ai3)~ssU*>9G_q?6l9-|^JCWh)4d8LpS5S^Xi z?0@O@%?@(HLs+Q6iY}4^fmHi-aQ`~{U-$0L)c*G!k@q{2|BJcFi&xs+Um_U)3`5dM z$`VZS0n8^NXsl=RVvrk!RYM1DUE8t@UbO zEw8bgyLwZ{TeVAGp~x%AEYH)QK+q+x2=ZJZrT=a3Y{aM5cD6sct-U!M4y|*huMKD_ zih<8iBKifOU!{&p>M~x}4a<<01rOI??t{UYi9>m8gJr$SAM6!{;~t#gR*Ud`B+TSO;Fuvz{sB)^lI*0?`MA+6Na{*S!|C ztoloP)*Ly%@r8lmyzonygL}LD!3(jx>z-j6{P*Jjz{{XbI?%;V`Ao+$h^8DKpGTaL zlfYt6Ig}C0^D8;dyl&aWK1=DJkeRI8r9Iy`aw*R`VDvHdy|m}~0mLQg?p3C-(<^z! zN*|q0AG2JiE#7)6|HYp?I`haxc-E0OADj(a7Qyz{!uI(G-avg=7s@N7{qaBW)QuCS zo|J2BX3C`AuSh&~kJl4J!la2ouUDjvLZ}mIV{>B9)Zm5MLhIR5E4m5SZ5N`Cunn(Q zX`<7E7rroE+t4~|b;R;~Uy9{fUy9Dr{o)NNdk)Hm9tU1sf?%M-TeP{yLxxGuE zH~;VQ6~5;4aXfqgZCHo4+=w>4@5oOcz4r*(_yETTF5$Cu){v(&3vJSAWoP%PEtRsnf>+=9@81-4l81Ft0I`yQEW=!dMel5yf za|C6n@&8sH+tr6Sl(`3Oi}=?u$8*jxbGm6~>heY!U6{7tpI(>bd0)3Rw#h!udAx8+ z&+kvmi*A~pAKi4%wZHNE1DMzQ{nLJn=jLR+uZO*ApyOKD3%aB4aqe>4OZBV#-~~MU zd3G{(F?N1EP2Dc-Nw$~QbwVr72Mc`Gf1RKEg?VOdB`|S~K)o}{m~s_lOuI4}5uDd( zf8EbbTNq5#g?-kmE)mR;mm@=$sjr#Xo~G|Ip7PZBz;8Xvb3Xciyq(E2V??DRAJ+u2 zyh4?a=?&jpXBgQDOui0smT%hft#9Vx+Gsk?qt~D>&Oo1>iE%Rv<24W0M)|ll%6o=$ zk{LTr8MU(Bd&wdZr3Gl7qS=SNpvBy7N zSEe_8dTgbojxk4E(s9;-*n6!@`Z~cnF!pr8kqdw1J7DS;yPI<4y72ux*80Xa;uz_u z=LGaMwv6S?#dTYW(*F+3Sur_|ZPe`_dw=jkwak%T^AxYY;`$aO^o?C(#dS{T>pL>G z$U1Pt$61!>_5=TsR}csH0BSDIshkClau%g4C;!OUtEL>W#}B3)c?EH-b7GE~tLh%e zllsbe!JHrBIvShG+;(Zteds&)q7Q}8m)?(SviD(5&QtT6?lZb?n09&Vo1CZfk!K3} z+f?*7ALePFx)wKmjeUxC^s2u(S8^U7!+BNGrr0=EU|kx!#dqX&*yvOKwMW?IF`WCO z^Q4Y9Ci(^YG_QAA--Jy>_ZubsT*2#%jpUraX9Mc99yVBqy6ZW;aK4NITyt{_@cOl| zD9CGo;=+>P1z$0arv+7C4_XUea?hv6CU~lP;3njI1?L&+AHkR)MqjWFG@>4ici!_j z=P}yfLRrpyoX@<|>vjmBJXOXQQ3lF0WqXxbxOnZ6n`S20Cs_~QGwJH#tq1gmeU#oV zeN|c4CYQyz>_>~HZTFhb&SO4%1M`{gk9tn#ST%iG&tbYPP2bYjboyLDJf!ycDK+qCSKRkd+wNv>!8$m<423`*>2{Jw`%-o z(<$5Ed~hnpRsrUULR_o+kbKRi>(ZZZRpQZk?@M@= z^5$G)_u!?m8`IeJ>AWMKHuJ_U)&=wpPy4gH*mYVS`_8L>l(6wDW_~x&7Ome7yQsPK71kN!)Z|0?#WHS-8BaQ08uz#~ zW1aJgb3DHJ;BzQ9aSg9+tL@Cb%XuWo>vlXhc$xhN&koG>x^q08N8KsgnU3dWb3OXz zgWnvWu5P_phI`J4I_9HHx~j3|=o3-s8iPA5tpn`p(3Q^&%(;nrtF};e!Z{h~%(!8i z%sNBge(Qh_&sF z)Ux*F6^`dw`}6i8iAs9{2Pb^RIFDcS1;85cmz-k`q&?>^#58r@->cKkvG9a?T~Qy- zqQOZ0R9Fzb+WZdrMJ3Tx@8+sQv51Qd?v~E4AdTmd7`D6 z%A#WFMAZi~?vz>jZe;6f+Oe%uc{<+KWo(aH$)TxSQ!Bjwni?shrCDsZN=R*{Ro1em zUAy!W|D8?PI3gaLM0qU_3u?r3lQtXCJx$)GD) z>|g#YX|5(aD8i^a#}3O6;6KwiiGXiH1P7>kzM%~=o}m{1>G%VRi-%Jl{ENa5XiSkm zA3_=G@Sje8oA8TZOpI4tx$6*<6YO3&zva95Gvowq)}1s%4w9yne^wT0b$gV*g$o=J zj^jUFem-Dj@XFsKd@7!F&|5V8NBKj5kALbI{Woz$$v`t(p^%9s8vp6quU`1Oz)zR|r0{D!@)wI?IDa7IYe@Vy3%^K5rP!xi_>wV& zzbgxWZ&WcBHE2OE_haO1o(Z#9~0~Y{s8oT;6DM|gsuaQfUXuS1~T6{ z^fzJ*$n?WN=07ZWP;f7h_1y);5D#^0v|EA99|1Do79i8r1J@uOeVhaBr9h@zEd2Sx zFA;vB@GZd!jAP0<3&hgjP)wtJ8pv`+ftX`M^qCH{M}R@lCp6l}fJ`?4{1W01Yqa}; zSh^ZIq|rVIyc2Yh~tZ>UqF-74{0fGmeT;xXPrA&qt|5S=r$ zPNQuBS^o(P9OAg(m|#rswBV@Vh~Ti`kl>);Vc-uTuMbE)_X4R;r(m;S1V}qRtkJFm z4pLu@b}bNdN@$%%yAnt_rNI9O@ryOu^MUULU82!00DK|7Zne;(=p;-(A~-BKBseHI z0DKYY4g#4U@8K2h6>J4Qi+VL{wE69Wm7pKiXm0^lfv(qRhk&$St;U8RkmI=;NIO;n z(L|v#jrLL?`)8>}I{>5}7iU=3w}Iz@uK-U1S)UVv#|4iG9tASpVWAHR9t5&}Q6S~E z0l$p$S~c3uz)H{&jrJDc?V#&5+99B-kH!XmTSCo@EEmu8i4CWLEO!*ha!&$T?ubVF1d!zpYqXC6X|JP# z{Xpj9LawDq*Q?R)0dm~z1yavW!DhjF;4!4H(`eTMD?qQ)Xa|ARd$mTp5=gzvG&Yn1 zsYeNrwql37RdUq(`c^-GW}BFmjbEZVvTkHNd4vmZ$*5GMmrx!{Vq<^`i%>o2J*Z+ z0;JqwAoV&X{G&kTJ1q1;Ak*&yGW}kls)z7fflMC}ItXOCY9Q0`n=9nc7yd;|Qskcp zk{<(-e;PACV%i%Y7Sk6)4yO17h0*N-(L~$=^=#WPH zAdvaEhmZN9K<3*8d?(U%YqVQ|%-5{Z<~N0yz8=W*A>e%QYc<-dgw#y0i-CWK`6{5Xp#(^K7YP;uncot60yh-w@8dw$XAH>l@!C-JmzYNT43Pchv_|_B zka9-^`F%X*+Y5XN$nW-%UJb;hK&V=yT?S--oexxc0Xbgq?o^FyybD$Q7?Al-137+9 zX|zvD{0I<#p%WVIVIarPagFvdAj>%nq&@mIHtYh@j-5c-VGEFUT&nqPr5YOoKE>U$2zamH`d0`0Rv{Doo~?K42i9Tgk~GT%NR?Y2eebwJuJ zsL`$lvObG}N-rSocG0Kpb{tja-O=S_47c@-ip(H;f9jC3PFmUCS2Fp%XP1X9oa zK+1~(nQkwT@^)#oyMdI`Cj5tiG0-6()75IU*8!o+ZL5KQ54%)rYzP3M+imlKv}=h* zyBLV3_rkr0zQ!yWOSKkr*D_|*TVgQIT)prERF9iK9Ai(+);eQiI`6qys`?+2Cu>w(m3Gq4c22?($@0x7o<7zF+eunZUm283q54}u0LK9Tid zzwQH$0)G$4e*GM982EpH1HjJ!`+=VZ_6eW;mi$iOV?g%bZvZ2}KL@hEegs%8@nsTU zB=PK@Om6{?17pyKa!v#P0yql%8gLLuIRg^kFY!^}R>bcDQcfpu2v`Sf1=a$GfkEKc zfdL@XmjH)>MZm8Dd(o*r2aEz~56)|!1#(`4j9IO~KLAF6hk%^t&{t>GNqjBv_d#>M z!O%K42lR4QK)11Drs6?F5bkp8}2nmjGkHE+G3;1UL#T1&&DkFp&Lx2zU!{5cmn; z0FdLMANX!ypTze9w}9>e-VBUN{4U_fL3aWd0b7BrR|LrMwgtElSO-Mkm{kkpcnJa* z0IPx2vkb`bQwqEu7?Ai9U=(x_@H${2koC2I_X8);Z>|B30~tRC;&Ri%@dqYBA^R^TY%KB4)_GH7C03c1hTwpAm-Gh@1!z) z0P#D3B|xaE`Zw)T2)Y9ZQ2m?udC-w5D&5qeAg^KBlB_GiYkKQo?$ zsvmxoe8GOfs9;1eC>Rj51Y@ux4yT?5QvN8A@`ojUNa6=2zF*>_f)T->U_cO{S;pPvni{`TfW8hVp#=qj|@0d^B$` zFF&t0?_gdZsMC38@H?D;BH!;Hn{sZ7&mWsIHpP$Mvs3c(2BsdJIylwuKUHwL0I~{3 z3ViKd-;waKQkmp~B;Z$TRKiG@t+UwAeJropxp#_|p$hADHg<_g!=7 zngajDYoas!{&UxiU*q?WUULe+gV!9p#^)cnW)Q~%*Br&~;TZ!neEvf-4kP8E8U6U} znX!LHf&cuB2^^oDF^1of87C1lF!Sh4q?y@|-{`D;v;6+^GbeD|KkM);pTBQbKVtf3 z9m4Pa*}b!oX7)b(9-lpo-=nh!XZ!qzXCKA!;n@TD9V$9r}4HZGFqGR|SD>{eY zGet4{_7xv0M#|y={GKQt!SB8~J#+m2-Z=;PJNMw+0{`foQ*#RZC+3XIfsN*zK>YDJ z!*dG#gL97Icx3L$xjz5!+>yDk_S_RlA1&EeQsAGMdlB*H=1w5~+}!cGh5p#wvp60s zIaUJ8lnkPM2TG12>|itG>YF7i$?H!c+miU4=w6nC4m z-<_?~cS`y%;O2t*?h^XltS{)O(0{;_6zCqITc{5vq!=%d5&p3#ndWmp>Sx}gf0^YW zy?KAm=Un7Rp%cUJQ9sD<75TqUdEf;^-`~WUh5SC@ch1#xztDc#8#0aGl<8ux0pUMF zdB{H~^dHe)NZ*5p1PqT+KIj3V+eE*!I4LqbNBO9e@uRXy${!MWH;TQtpbUm>QvYI} z7!l6FPAq>|(tlFqoA>w|CH+ZBUnR78PygqV-n^GD7TUar|EZ)u13ekGvAtkFew&uz zA+hg>l>h6}UgmxLzc4+{iN;US=h*%Z`eP#BytiK??NcW5KZm-h@qvECP(=HneS>Is zhQ;h(pv`;pCg~66egAJsd3|U%hS#VM(vOL}gTn6@{tKc{y~sZ!<(HzK4A-$ek>9*W zeo5NLycd2C%SWEmVvkRV`~i{A_mIqAi+;ken*9Z|d9VF<(w?J|e}er3eDhv;x5yh5 zd26M;iew-G$7wI zlK$VNK4V6{)Ms4iT9J3F$XkH;S*U~Yv(!j?p}cb8^V`(a=ckfCEc)8Q-$;FteuL0_ zf64Uu(37E*`JtonyA(!RC;elVkMxTq{Xxoy4#uz2JxuSQzb^VLll0GWe1QM`8+Cab zq(9UMe-Y~sKEFZDP$l+#SopI=-^YZ$mi9sVf0y)MXMV&Pzf8-atCOyveu&#G`7cO& zu$>sjFgG%NY`&)dR`O2>JdHDEYrA^*t^$*Go{p2}ysO)b}riKV9mp zoCcxDcS?Ov3!mR?Xa4J?{0SUW|2*m6_lthPcWQn4o}M>fB>_#xq<;K%Im6S`A2Qx8 z^1dbdmk9qis6Y6n!heeTql{AFb6o`a)x!TT(f4-Y=aUA1mGFN^{gJ;)`2P$Z`Rj$x z=k>Jr;JdVbpQC#8(SG3nh46pC@;a^8b?hK!eDat;eSFc(x-)vQXa}E3ut}Wj!ybv%7;$X!v9n99rRNy z4>k-6|6^<))TvhJk3yH(j`^9-M;4&W#lk;nX}VPC147Ri`mfP{nclSj%|Zu+|0$6_ zhIVFHfOGkR8N*iZJWcNtIwEu*bRoY^?D<3CM}__u>IZ&6=z8IgOa3;=UncaQ34d7V zDZ=N=83w**pgc3b^`Na6_=c@+*ofg(oLfknbzXj!58AA&`-1SzI=@e%J;^ug)}9x> zS;zOh@S|uWhCh_@%sQ+u3g4`2iwSMk=`{)+LAx@175|8ehr6MlljgCLUgx62E_wp? zaHfC4#edEv|LV!fC!g;(ob)X&{%^SG23Pvo=#S3) zzv4>2&c*+XD?g_RXZ{XX{ueQ}ocyV-`VYF~{RhT_Gkv40{CzI^IhTF^)kSx?y8e58%4!-?QSQF-`q?u0{bmeSbAHQMBlr< zeoaki&F0PF#bNWIC1Kt3z?w~nP3#(37Its!x^MI5?j6{Iw_!)ecC}B>J8NRsS6J)1 zI9#))e*N7WH$CJi0_COImXex7s|@99H?G^9L;g&kq0!%ef|t%K`Sw>+N9XQvYfBqk zYRb2{)W__#L+OlP!O8sHG4)xpw(v6SRrI#4Y^-y20ky%#N_?B zB+_li?!WNkrr();mL2Wf!lU*M>b|$5r5g!hwzb$B`55D{aWag(n%f>_EcXH;x~cWC z@Ycp{>A%5czWK_}I8M@IyK>O4J{NWQZr*eK5)ypLXH6=8+}Ykaq?XSMxV~1K@@<{O z#}^Zy%PtRNQqvoS1#|T$0jb+gci*fYVmhyVJ}`vbj`A zZ`?`o$k5e-Pweg7(f&YV+fL+l=(uK5Nt%z)=~Dw#wR{C;lc}eT{v{l z=6c8c1>>oDE)L&w-{$%?_tmTqV-~(=&Dzj<=QNi{<~0!}Qp5$N&X%qgNYqXk&Xa?a zsddyvZ`zo2jxgmWvZf?R-x%>mQmqFu_iJCS*bhs%AAC zFxJq&+Pn4eQK#WeEn8c5w6r&=6p4xW(VdMun#IuDyB^()-SoFoW zhpjf<1Jww+Z_T~y!)xm6H^rmb(K&3w^$*ppkH_lns#2T$@q{|otD>}k=jSFw6(wB_ z=FRulQCD72ImegcIqCpzQnyIjN#BsnQ|EVAoMSV8gO#;&n}Lxm*WrS}B|YvQAX#=G z;m^R8LCwOh#Od4=xRQuo;^rWknRbN7N2#kOamNiVy&PU2TpaQ0;EK&MxRXm2FApve zlNjL1;u_ta7+ivBe3zFDR|?~PBH54uV>IPG!o~CQK+&MS1#t(43a>qvt>lq9HN^*w z8ePk(;ta|Dugx|;E$3LLRwE3Lb0Y8)T%Xv4RmJoE)4Lwjp^RVm`CQlx2> zt5X@ek}FdgGMrKwI>!nxMrD;~oHzv~oo1FTHwn^q;R?v5jZ!OxC~XQa!AOw4OK6cR zQp~i%BYkx$Lpn(+Lpq5UV+9$i8&s~y)RN1+1XO@Qdt}TV=X#k&3#l~qbxw`d@mSYX zv@(?;eZq^eqVlRv6sg5%V=pHo-MoQ#n#wC57#YTr&b&OWiQ=(w6G?waWk`SUVyqxT z_lMS&!N`$Q8ehM1SwT8o zDnmM*7h{DNqtc79+>22G2CH43Np*1Ds*6$B;Z$ctAMEOAhbJ=JJ3djSWa77`?w;k< zVSP|x4$92|KANprc*Ld;Dl2%Pt&}vU#be_GR(g;Zqsoi1qU;I>$+AjF@a}`lGjc1S z7R~LYU4ju>vvz$b@d$gdF^k0ON9uUckHGKzrG7gtpn{Iqzveq?zcMU z{Vlb0-%(R*qXMcp?q#yJ;2nfl=#%$S{dkYTU}(G+;d);SuOC&&^*d_Z563`xc-3KX zzy33f$hV>d6S95x%*Y8y2JYv@tHF41S4q0I=Xb@%L@)S&SE0vLOe9iQXApUw-xVvw zdq9S$`o(%7*pd46z~FejYN7gsco2C_Uf)sUdrStru2P{C?};g|5br%jWtY6n-xcc> zdA~36${^1fQtKQ4gq2F>{_a%Sbe(%#gmB+E^(%sY@@iB#8l3e__uZ}l*1RyhM}sw- zR6E^wgr&gIzG=VP^*)ieP%`~nZt~)lcGs8ti5X0Ni||gL_3h76U$5_CMX+vxA+8pT zMtNm;FD`8nXEB}B*YmqrT=&Uf`b$x2Be>)>b!7T3)-I735M}6Bg8BuaAF9rf)MY9V z!6gy8d~|*~0zg=Xe-=D~eB8^xOls)_)}OTDcz6-!BiNSat;0XVM)~KEd>H>pii6H2 z+=fJ@_-A>yZQX&#hfj9wc+C2Re-|sAzhT&{w^;di);_znUt#*J7QgHAU7_>v+sm}{ zyBvd`Ui!0sReUZRpTx#DG^(BUJ0ivp@mqQR7bn8`@V7h#{*U3Geh++4!>2pHhoH+( z|4j!|KII3e=x>N^be!X9X z|KAwu`ZB&(@Ctl+Grg&^(szOQ~>Jo7TXt;I54&AU;>$Kt5d9l|%ZoH~9X&w6dqPv5H7-~5__Z+_)} ziG0dr{n(FQfsJ3y%RBHgz9p0|-}?#_TE`|(<`}+BF&}BLM5_14(3^Q+i%VFN0zc>0 z0oEPsDGn6F4&>c{w9G?$E%42MErR9lG1Pi`pVaiF{^sB39f=vg@$jAgYK`x}S@=ZPcDw;? zAhv-IbS395!S`xBIMq6^Ag}nf=YPWQkeRv%<8^1fqZjZEGU$z^C&etQQ2FhKjg{YS zZR@xWqT@i`LtILn^lh;<>KjuZLO=Z=`s+jJw_DJEA3Sog;{o_wzkfUWweq=6J>U9f z{)-noW`aKp>1HE+5%S@ia(mu^Z&~EW{nOL7{2zE~-h^&f3+?Lrk|p0(;C#fkxE^WH zzvNqP*T=u*){pPF@mmCAs2}?~E|;*hEc%_5`0fDXblaJ4y6Jgh4E@g9{m}{f^rx;7 z_`3ff`r1GH=e^dL^gTDup^36sj{csTmUHldwdz{}n4eVJm~mosHuIYCRd4v5hX?R| z8a*FrpYZXqEOXhwQy)yR|4qvNn_$Nez@Bxm>qgl3KG+}Mcl&1I`)=uc#0S!RtHSA9 zJvk39u|2*k!FKVZ{{*cCFX3X<`OS^EKmBA`zGqC?5sa0LWtwkrU`#vHU2VVb>HM+3 zUB2I6#XO#_JoLL4@XwGI)4kuaI>Zw=-l&SR^0eN~w`+g6HCQ$TAL3j(v!?r=_U4vd zEzO&EKBE0}r}#iucM|ZH-PzXI)Uwf;Yt@r*46b7)LBi&_)a|H4lYbAI#^h) zd~$=YeHB+HbLj-REVCQ-YO-}^$W9Jr$z&?U3tdMjbsVQXbS`2TnXn;dDB*KnD}rP!SlIL3XP`*8_<0H{EJ9e6a7!apJXD5TL20$ENakmYb+ z8|tF`Rsn7LtHL9M5Z9*z?IIwq6+<&L+WA11V`*#{M|-qFPE2qFxDE7>V86uo0kMYu zw!K2P3D!$I{Yx=l0Qd-y{-Byr4*fv^8_oh*&KbdB;733Y0Urg@&l7B}{5%1bpC|I^ z-wDq)ZaWCX{Yb_9s$K%s{<+FO9QzYEoCwCT?Tb3rJi(XIuu z{nu%1C<9XO`9RvGM5A2{q@EKPVdReiRX-6tE%CTFR{UeYW~3Vsx=*kdi05FT9-(&u z*{+>JM>OBA7kVAA2yl`A;DfC?XVw6eR?$7QD7tTb3O+)>;lpb z+y~D5&4LdL)&W_6`Y)lpG9dM#zmn;YyI7-5ekDt|P1#IE#Ud=&8;fGqbe zU=T<-)xbM|Wx%PxQlJeC0BINMfi9->SPd)$&GsR_4+yY=L^K}KO^xA)I4syN7!`~N z1_c9xmS7C>a5!~XuwO7L7!eE#1_S{rpWh!`=l2)Gug0+Ngb)5L`~&_1|2}wAf#(um z)bI0;`z|7W+;`qr=s)Wl!||x^6n=a1_QRvfMSnDJpZHSo`G@j{;ZbEM|9C#UisTRB zcrgDMjtBAwaXgTJ6vzGf132!_KaAtP{C*twpEm(XeNzujg-?&EG5nsI zdK!LMPEH-23NIW}M{qng^&H~qe+B+h;D-f%FbewNljU6Dc;R_?V>v%<0v=dSP8*$e z3jSEMca`324qk&4@W65&{#fWKrNDo1Rv-MO?4Nazo>FG@!k?4&rgC!DD7f^U0$(NY zo#OLP%!en3O25M+*2ubRfzrfgFY(usqPELa$1EVczfF&h!rYFGRmWkxxGqQ0@-up~?pws@dMgBv=zn*;L4-0*p$d3yBVUhnQLT?oLe=hW!K<0l= z=&vw8^7KmmnqVs@{bBO)Z{FXwOZv}BdR|{s-nT^_uY;NYPlP`~8oU7dCBuB$*Fpc2 z==USZe~9(P@nT8;LmX57gz$ft@{q>7uboPH4m!m2pzoLb)l82v%=_44O!O}o{-;Uf|D5pe6n=&9M_3=|uv}>RO{V_*I4#3d$VdH}gnxqig6|V~ zICm=j#)OaNP;_7hbK_bV@$~l)5qg!2Ze@AknfJS+EDslg=Kbs<%uNdlhOG$FG5iY( zAU!Pfi^3ll`XQlB`}6vh>3fC09`@({=Pj@s!xu5ONt^rYzYyBo&%cZ`r2*SOOE5c)dvf7g|Mr;Gm? z7tQ+)Xa3K)^7pvXf7z9O(3O6ti+{U|#*2QnJ}K)C*yM*{sk!tLEH1h7-UXXYM&jWn zHmoE)e4A8xuAE*whPo=N@jXcI?KIfYnLR}|0cBlSjKwvd7Iq@)T~XYiycrt`Z0GY#Uh< zTTZKydU>VnHud4bxbH6Co!IlK4xCTOGie)csVYydtJ=KEy6U$Tt2b^=>^gg#-%!1C zVRgb3TrvSwv5@$lCCo@i|=(w%QgF1GSnUWNw~KE@&@NJZaPU{PcMdRgGs!#^^$e$ z*vOzO-k)XQPHNXiyjLITZLIdcY;&uf4{8v_)z@aj{sd7b zsdr}HSrFfskjbW*Md&r>rtG*I5 zUJ1U^_4ciDpVg21CI&+@n*X@fQz6&&_M^C;W1u`97DB)VMoe$l*6v&?jbNdLZIUCux`g*!zt8(ThJgCj&nFlagnq0m%<0lE^LqPTBJXjLXPyrVsoKUI z6M5m(-qjtCa@%iQ4`1@W?S4X_R`Ukfp@P-Y$e8StJ){d2yl#=kte!cp!4@38ouN|pEDWxYLY zr`Dy$u*MInALRN_uH)pIQPR%!o=mIPgPL{sdfl~2qu1T*IOkf>OMBL0z2_RN_x$Dn zWEQ_w)0i&gI{1>8oR}ZHOiXDb-1RkuVS6@S**!5b#||F zRdtH5ZPxi>vfiBQJ?w>>r3W8hOZyo`0H5P^5}En6FRwso)D*45eA-PHO4J~eTyJLT027J;_HJKIKC zjH-y1<_$aBwr<0%q>!6hxbBqeHgy(_Lgui5GpJWXR$Foqe<*~Q`{Oj$0e<|1VfuOFFb4ZGAFc;U|}y}rOqEPr%9YG6wwIA;ChU0jEnSO9rf@(M`K z{YfVdulil3_@K!7MU|Vb8WBfiFOG3um8+EmgYgV!@t>DwePg$@KhKXiOv!&#_&Dt{ zq?r7;@G%dh<(v1zUh*$WemQ5Slpm53i#_B=gzr^;tMI+#4+)>`iXfCG_h{eZWfa4{Egc1Fr?$qtV_6#3f!Rs?pvB#5#?(ZjBAiz&j!5 zVIa%f0>sr%s9vL83uJj*U&Zpcjtc8j)H*7l9RQ76q7c_l0qqhXu7yIy8toZCmRG2; zVFGriywgCII}F6SlG}!WSZ{LMfbe^S-zjuGkm*8#>jbNTShu3qM^XP`(3D#Q#3gQM zhDQ4$Y+4R_LZey_h4Y454+XT@Pnquw5Z8k0dw4+m6lk<@(t0RdT82&_9%vs2vVKDv z8;$`fXFrhj+y$iGor29k>iaNoH82EZ`_^i-gFy1Df#jD0DK7xTI1A0!XqNzC()ju) zkZN5Nzw?09 zkMTj^3Sa<;veY^t#OBy;xf`fmKBXYE==wxZ^v6W3DQ~ z*K~ZNSX*?$H-gnhL%!pP=c*yB^1(_WeC-A+h48hT{JwmA?IwRej!)&E2KV5Uz9|L% zo+6uI%VIKLjU>v38XnOWn{|N&?&i|!-SX7xtw$bX>_D9bRLG&IOci^ zbHCos{GcOO#OdEdB|g)fAD*%PWpK% z&)DaS%#Sovr2O9`A93dS#4_mWq#q?89o9T=h)Md7Oa3FIA@6#j?;(v&Yn~@eqdpFL zqofZ?`ddk30yEDGaF3BhmkXbMvKb0VV`4PV1HOVoC%sSTYNTWMXVw@0pOW&pzMJ%) z3cZCi^cxoW|4I2c=K5iVzmoFb5I)yslfO~;m^)SZT%XMV^C@~z=+l&s6N-7>@FN#} zfHWo$^Zeigq;VoL_y1g9!1WjbDgUIK{#plODFv?7fri5`TywRuW-pbBc$}7n3Tny3!W?pCb8+p^Zw1miZyR%3DWKK=rClbl z(&^(h;n39G9r;?B9WM2qedQgKlaO|~L6QUFQdi$}t{R{YDGLWw$BVlQ_I&$~SO02M zr+b5%@=|EBFZ&a(ywkk5pPYq~U8ZJl6Ie9KO>1`hWl64^I{rT2+iG$5qV88}`fa7_ zg}Uptp?MLWLA-gb?G~@!JHp3ddPe3~&v<<-Z`@rD{#^RexgOr&UP;$nW?ls=mtAS! z-R9;MPUYwOP_ z)0YVSa-CynTq<7Hd&(kS10hfzE&;5%8}JP>MojWOrI8b0UW7qBOpr@8MayN8I_8gg zPvqryt4#Fb{Taik$Sb`mE*H0ji6HVk{fyO$yw!4%GzNLjz`8qw$n$(pY5bJ+OQuq^ z3+o$%ez;%eWwJ}Z%G;w6l<^ZOkz-+k47FJiK8T*I*4mDe4!4ewp6e zu|3kgr<@RZxc64UeAiLPH2UdNlGl66g<_qBBH#tQXmJLQ_V9d9Su65Pefga%*0&P{ zWU8;%d&+9*A0pN|jfVxQKQD?ubTcfacDDDFwIYwt6&TES12v_7UGg%&r>qls5i!)b z=vM^&r0XP^5YMDCzNZ{Oz7dQKX5yIZyjgvJ+$zHh#ZufC;Z`dCp7O&u=0BpjN0`qI zCmkU6f8JBZ-{B>EUZuRJ%=;hzV0_<;?s5?CRn>c89_QpA>?!&On+yM7CGhWa1N{8V z!#mO&@t$)&-uJ%q$fcTs18>Ot-q-QY6k}8QCBr*j_)#iJ_z1&0Tc__bFaKbCr)y-4 z<@t_89e%-r`PQ);;ZI4&(I=SpM`hkyUqszL;q(dSvsQlA`250qaN|RazQba9@c9Lw zOqB7e_yVJ!D{U9;YitkvFgeTr7=3 ziO;Xi!3(T6<`($&ir4ef^-dpONJHB#@XdKG;`H&gkv_h5PW%D<7QMb4{<>DC^YK-n z>_vTOi&zb8F7LdRKf1fE3$Kf>FY24*AMB6d`%8SR@%?*D{87c=Pb_A9h20LHU{87Y z1iM|{soyGSe1yR_nX+k(#%Gm}uY@25vKB)vZWpaPi>jNBeyiZ zz#7meA4cE&5c=o`(N`aWFRCqgm;d1Qx1P$~7Z}$GnEt2xaC%>0eE-jM?5|hu3rx>l zZeL(A__Ry!3rw%;$QPe-3147ZP6WQdXgf15sH>NcuPgEG_105U;8(2(w!RiNe+O)T z9onE6^TPF*7p5f71$nR|bTW3cU^mjVp_!X#d*yfSDUK~ae6Q*HTo7BU@r5-Bufn(E z%UF+K>L0mA{H`s+7=c{lGtcdNFv;iOEq>)M?M9@h4)X=s=3`yHBV&-I$Kkx!A{>X9 zFR1Srd^27TUwhhLn)qzXvnn;6?4yu#?Qov;EakJloNp+@w97^KE}Vc|){k@X%b1H^ zk#bnx1;wBL%taXkxO^Od7zUhpO*~fx!U|c%%V_gRFQhmcU!Z(~=Q*%H1Lp}P%X7rCu=qDe*n5;X3 zeschMd5M3J|H*4?d}{5GtVKB({i1cC5p()0R&>LfNySLlJbj z7COQ2-=6ERz9o(CKlD?x#wXDq;Rg_X(#-X=FWZ!J`71T(kMNU7-<8Hz{RP%B&bQ|` zT1Rlc+BAmtVgKU1#eCOczOM#-KCkc@<<}8>-PgpgqpaB)L%Yx0-35ITek^egTxt9< z(snmmH@>F}?e~`dy4Rk+#5q;#qx(rhC+frU$2g`gvK@85IKMG?WRKsficVtAz;&$Z zLoEMw^by=Q$LT1}Ph1oAGJOZCby3$#U)u8xtoKvvy?SB8 z1Gx3+#jWuH+~f5&0T<>+H_^8Ee*ymtUZ}aQ-^}a3+Tpjasbgn*_to<|cy&Dv*5R{r z_-3r-^gWpQvs;P9ZQ^KDd0rw)PhFea)^l?ak_iP?wcRaO)a8mfUXL)QO$9+qzno#lI+* zuz6YHF#Qo97&t<;<2dah2ADHsP47&M<5Cx$jm$N@@^{$2JF%=U$={)qVb=R4FZWAc z?WdoixJ;8x)hpr$B{!el{36Otr+mZ_$w?MX?|ux7i%T8&To&iz6h7a(GjJWrf;8&^ z4@r&?(k)1ne+(Cm47JRkhHw0ZR3Z&Tq?F%`iyj8{qjdcJ!sj}bbn?x9j&&aS4{}Wf z0>@c8`6q<$RsOjw{9-=1L#We`T0i0Qf)*jA>+BM~WK7}j&BBjnDSuS>?6>L4H~uo_4V}?wp9Jni z{4j72a1a;<|ENa$Fz^=8{Tl5;<+XewSb?koiKu9l-g(E|f!mE5L>#Am#8u260UAjNmZvqlg~@;*s=i0}|f{#3Ol| z`=w})R>3WT>wr%nekt$<)N?Tq=|l51ZI@`;zKHS0{9`~ocMhG^XrBR6Z~A>99s^SE zL5&UE=SF>Z2}XddcP)_VmjYSeQeXhM7|8ZHk4cGg#x*uzFM*O16QqAA>N6nNC-J>P z(+?-@(JeIn;4pnXkop9LUJPWq`9jnG59X6lkw)cLll+TVr^Ni{1i8+Mb~_Hly2a3t zM*A2L>mEac8ttP%tN{%TXteu*Smzm{KNz6h2c*4mKdsvdI1e=a%>eBlAlqf1M!OA2 zJ+=VZ4)jk1v_nAJvr_nFz!LD6YP3s%-QX_<&P9Acqg?`Iz8OH;o9nRH-{{wq?Q#sL z+EZi00Fd_E52Ri80omX7N_-oT`mGbJ1kz6Qlf-%!Yqa^IPT3Qa0P8WP(T)MB&j}#Q z9oE>;2c$mD5+9Lxe#?paa6K5YRmjN4DIob=f6jUx7d$5MTz^J>FOdC#>&;1b1KFN! zLe~qf0~Vp2pho4l6H~qN+X>9cZzqPd^4keiemkjW5#$kh=3_f^{V1@3@4`6#xqgrO z9~SHbQqO}xmfx$<=DPDvUAqr%@xSo~y+XR~hxqguKtOHVBHIRCg0WpP#mTI&E z63=z%k05@AM!OJ*saW~#1gdrF7&2;|I?x`+$&&4LPGiGaAj>%e#8j%*sRQj%i9ZRX zeMU6e!$9hDOmIJt_CQ@!eNb10%|O=UVIbv)faubpT8(xPNPabt{8Aw027u^7p6k+! zz~7D~nb3*fCsJ?69|QJ*ehAnL+yd+YJ_w8g9{^In`+?N29@q-30Y-ppfXJi#QPu(9 z3%VA#5*P$l0jq&4fMvi+U@34pFaWFomH^9vML?uc`rQr$sr-kI0q+GJ1Hu-{&*!7S zQP54mA>jLggTVIz2Y}@F1Ih0J27yuFoxokdj{rM?TY+`J)xcWdHee9g0t^7}08+nJ zU=a{)GiwC63CMD3KbCtRZ~*vjU_THtm0dpo>;=6L*dy^#;6~6$qx^sdfs|7XTnj7% z;uNLqv;i0ZO?yxebWx?pdSD@FwgYi95TN{zay%p5)PNwzA?X-?h{J;Yf>FVUU{Ek1 zXbHw3ABR(i1^We~f)T->U_cO{@};iJAMu^U%KM}KL9EW#YxL;_6#g%L`~2{KiS_#M zf9V@X8m`y(`+M^a!vE*KJo*8J_t5+kSf4*MDgU4F9-0@;--i|Y=ci0y&HljDqww?D zKlL#Dd>)%R1V5ig3kKom^KijY`1z#IPwW_&dVZ=8UO>mer7zI@yjbDc!ZCRM9Gi9y zoGf=A;gZS;Aad<|4UeApEGkQS{%{)F6UP@;U&4icI zna6NEFmn*c12d1}_t4CK#2lP?2*(F!_ThN{%!4@IKeHFd`)2OP@xGZo`0a%cQFt$% zeSY=?{DhvpcI;Y|e(kYqhk$*>hl=})3;e@#PRuFrADc5Y$LBvf=hz%*G-q%Q>N@8z zj?c{*2lwdQ!MX5GI`{D0|I6O{fJb>NkbZ_gh95bWspHQc?ZUZQuB-UEn@G))fc!Pzxw>u_(q@4&Bl!o!hXISqqMU- zui;rHpF#)o0qqkA_B}s3&(r<<7%F^JH1}w*cX~$rBlK3|ujfeNfAb|Pegjti5B0D> z4;g)kFH6aD(qz1m2Sn*(mi`w;4;tNJ^(``a&xt1gVM||S@*Xw%|FimsjXq}lP8j_g zmOg6qXXbi&!h3a%%T$hCzGe%((9B?{aLGD!c+SmUN!kXCi$ShZnQR%i#~7k zr`7(*{Ww=NJcIq(LHZ&}KWF_B?$>)HANe<%d_QaDf86LT%1?Ta(LbX4q4ycRTKx&# zZ}jVGKlIB+KWqGc$LLn$_ZLQIjNdHluh*@8!M^P@_mbKh=p9O@&S0;052TXC*K6k_KP?Gb)da!5;1HYHx)8Te6AHTmGA@eNUMD52}60ILFdI zZSC7<>5ZaEpKIx#RD1Z$GkUgYIV#rVG#3{7o^sCSG5R-!H^y+prM)JwE){2mGO2 z?s%p|`=l2X^B&u(Aa>HW1kcWh-7T<2rGTed#sHo@8G{$Sj` zF014tH1ZU&nQO;$Wp;8^bQv2jTXqju%(G-snS$F_^x~xzPu{3c?%A?yoAp;=LzlCq z$HC~%t-7nLxOU|hoFa#k|6gXp_x!*wIHLR%}{)$+^d?6z8GS8`3;Je4clDomHdRQoe4@g`x)8UNC)JG-|n zt;oSuz^+d@&JFuQmxukKg$qS^Ib%=t%BHCv#nO`Y)mfTgUlb(xO{rCSW?7;1W%8@L ztm*D%?`gN#uda;uB5rjP->+ZYdfwd?26>NE2sFzC(iWFn;dz>2iL5`;8yV zH7+zUF5=e#KU)uo@vFXHRrUf3FM24f_ZnHIy@jotE=%0cY?E#VLfV8mW%6|)-$I{M z^gr6(a{E==tf6;Usjz+TWEQc)M8Yjyijef@M!%&%@11*3H0DkNQ__N`;5mB?Z=Gr-!M z9=|p|3hV8oAw&0=u&*SprXQA&wULkN`@hAnZt$l&xu?eONeX*y!hR<0O&Vp-!`Ikf z@%5O`UF{)9)^?$8_T z0UNGq|I;@LL6WbSg@%e|4vz0bH z$lk;U*qfO0?O0phmvXqj-pN>L%(Ukyx<5(%q`gOyg?)%_T*JMnxWU>)GhhGxe@Z`m zdm8?if6n&HY7Z#)iSCcmw&R1@wcY$MtG-G9%X$XHaf>R)JkauzCHbh$hg_wgXZrR*o0P94mmUc3pJvyWWvUqZRR-o!CgD| z^d#K0j*T+!-@aqpBTuZAla6~6Pnf6Z#4hs@J;er{Ew(X7kZ{B_{73sH%=~|~{V^@L znhyS`o!@BhcRG8YVZlfBeR4%TefQIq*|1k578+x832F1t5I@uWO`%{V)I=f@>@_74 z6T8%8E)u4cCz4l})6KtHcgLi%sc08WaZ=a^^Ur>-)xTN&s}MRO@qJt~l=0WggyI#N zx$nxQ2S1S~$WzWQw(MsW^!`*X{h-}H_AV8>`x1$xmR|4Kl%x+&k$z$d{%0(`5&no+ z(*9bDsg!=FrB{+aYw3E9%JJW8>3S~9r4L!Uy)zi)J462`ET&TZ^X>iLvX%5-!xZVV zM^~s+|29k4yAGj*zx<$nm{*ftkgm@4c+7Nw8;RclvcJUH!?%*2g$6V7*Q$L1%^ovN z;I+_qddw^av8U}$d)!|R z(@DY+P~}d8DtF3b<~XQwvb$HlBcSrhzJhze+24biKFgQ4^u3ne>oK#<(l;4y0L3Q@ z^4^zJ4Ro{}Ac&rweAzgS@Zj#yw`nK;G?hXFX=lfNIx> z$IXMF>Vm3-$tZaxQYhVNNW{XYt_G?F{xF*5?He@}bNoCKBc1jrJZ^B)gp zhM_-1{1H%c4jJwP^&IwqYHybzZFKc+0L5<|$gPvhdd#$dlB)?+dKwhpMIb{{@E6|- zO`Zi=@J>+W?f_NpHn0)A6-%lY#IDhj(*@LTJ?^QnV9_0fcQ9khf z;28O+Yr!aZH#h<+{S>J5!ys!k&aRyomj#2+IWP|*le43jeR~h|!(bcu9aKaCAZ=mK*gT`?+1^9lJ_w9L*Nj29XJSPzyVNp`~4tGTh5MN@pCXn~bqWuPGXvskrI60Ps_0Z&Xm<1u-zJ)A7!XE}d5IYNwl+++1!dl>)q2WyA;KY=|wcHK4SYm%w6 zHRD*-pRF0IsZWj6oZx}4w)0qzV>^$P`0RcB zpO|%loadZn{kd7=c*7r^b(Z|+XHQ^XFU$H=>Qvon{vWA7T3?qsJ!fQ2UFyV~lXH@( zVQlEJ>BpA7K6PZyQLgiI_szwQeeQAoADMe}E_Up5kIaS7+{1IRW1oAF>+!kg=ceW| zXbe;c+W!`%_4_IN$*}&vhc5@wt>jbqlxW5}&zFnB9pV?Eze&9K_4(w)LT(t9Z?p0r zRXU%b577QZrE4Fb!gE}!e3)HDZtVVlVx=4WrS{QZ`HLh11AF#emA z4&7z+-NrA>Pye0KVLtg6Rz7d}KV<#UWAx`t{=G(DWAzVM{eK8b-XZE#xX0QzVYK#x zN}fI|UvK3Ht^Chf`7l4j7mec==40b3Ph8OdXxZNS89|$Lf@_S z@cC(YDy&z2>J0jm&kz@-KW4Q0RpIYV{@=0se$nJ>xAZPc|Ei^5XXzc5eq8l&y~XHo z4#aZHzg+D{zMr#n?Q_<6v{*X7WllcrUsj;|9o=U12UUI^<88FgYmCx=B7XB}ucfP; z?4N@^HjT8cgOM{jitX9OaE-FzMqMuzY?R@#%L71&U9yS``XnT)<5{jqaTh~FccdV z7cZ}rmYbeg@l;%j4U4DBU8T<0N)c9S+d6mm?%MfWdsk<7Pv@?7f6hT?OFJhdVD@VU z#1)JeAD=SEZo0Bs6-utaT-8reI%=2ftSv9`6o>ZC75B8;84T{+1All!@;<}p+GaI_ zWcsYVbJ^YPtfS84I0p)~gff**erQo1KPJ=2?aroX@4S0idvf}RJydSAI|ZWM?hS63 zt-H4O^zPi%9t^3mqIS1Rd*{mbXIp4GofH`lvnIZLM#hhJ_U_rW!?{Q*s%Z5dr0VSM z+_JlKTTz}#Lp+||$%m;>*cH*u)_ix7VQIt&wdkS45?ORvd*YQd;ZSN++}vDLzW9NS z7`Lka5}Rb#>17R&gKDDvN$DoA;g>$4vh7ldCDlyNm8kGoS9_qV8)+3A@=iT4Gs+(~ z6OIjb!C2RKdNJ$x2)V8;*cF$zNHYWBOCRcK8wp2^CohM|Zy9Ua@5g4>8$Ze%*Il9V zseDf^jUB5|)U;r2TkepQrPDZZ!wVvtSod8KvmoT`jVf}5^EmYVap^0lz6~W*% zTvRhWjhK)6JL{jsUUcQ%cP~%7P;4*y(JkA1r?MCA*IYjBr|{PRUCfayg$8?XI;=7Z zM(cG%A6}1Kn6ABOs7w5K)kz$Nf!5&A1LOrEOl2<`_%v97MZ7;nn-RpFAZ@Z;u?fowBi}Pj*wtII- z1mpIJq2EJ$l{MPl=sT9u^dr4vcdss8DB))vG-&CEt^b;MmkncTNmkxZKsY}{=AH20 zuzsT!uPqE3Kh|(v2=CKImh`3BJ61f;<&^OY-InJ)TkXvwpW4c6Y_uzo$H`aGesUzn zuMd8)5aU$4dreO&M8u>`bx03zj8*6K^!JGf|MEe!kwJpHD?Mm$M z8t@G)|JvAXVFQ(&pEx3$Jo?hv9o{%A@f&|IPin{fmz6$*?c?v?a?c@#q(6n6U1UE~`dntf>WhY}ZG`!98e-gq$a9rOhKuVdq; zGIwE*_Bu9yx^9G5;3M0=!0Wa5)E*kczE5?_=8rW=XOo7`&4c^kZ7V=245WFr45l{=D192vVC8?|>jJGBG(RD!cHK0FcV^YqK8 z*~pEC^Al)eGU@HdM(qrRLHa1f4SwPy6HfNHt(~)zY-0=_VJsfTr}hW1Gt52B7|G0B zx7`6g{d@}knicm8Z@h7}vnP$z8?A5BKChh5XWuUC@9*$@VWU`&z2+Yb!FyrjLhSYy zCcbk&AK8{ApcVh^5B(l;Cb?Hq*t#aL+4R1>gMFj=yANBq`dQ@vr360Ky)9_o&fHKR z$8Bii_I~PHvlA@%l26gEQ`!E7e(s3b;Jq0#PvuAZRXgW_K3m?zKf*04X}+oOrdS77_YAE&_MO=B+sKtg|EIYjf$7J9j?W-5J^7zk8`Kon3Yp zwr1IuU~N`deQ9x(MgFBD*A*_q*J0UYYg^egMM|$34b#oPwQI}v9gpnz;XR#uI`4Hv z=e7sT@Xtu^Jsag|Jaj}N&QX6|GO;d1h53i#6`DQRuZ$=3KW)D%4L+*qH%3v??<@G< znd09d#mf#rVFMq2uS)puw{+EyC?)B`mX5BuZ2Gw=_-Ad>qTe1u34hsV+`&(h>@(hh z%6Oy4%m(o7&}|+wIZ*Z$tsXP7+u%2LNh8QuE=hyvrI*x$E5R}3qD@Oiz}rCiKjgP_ ziR>qo-Uq6@{2i)%H>mRRcc}DcQ01>TYyg@6=H?s9UIIE(3oa#}dY(RV{tLm)6LcnH zmXrMi=yf8n~ZKVy47$MsCM27Vw}0;dT<%2=Y)rI3BP6XySL;#gU0V(Zro$$EU0oL z;7!Dz_UP;+_zusVfCe+iEZ<@9X5wG*m^lb?ujU3lW?ljrvfO~jOh2f8-tRHf2XgOp z@AJ5M8^}B;*Wod<31n`V+vqXV1~L@6oX1QSM8EIsDr$+p6B^8nQ2 zkh;|`vl~F>*p9FGq*8Y_p~+63M>j7$JsNTR;-RNc9_IgG@*rCLf#e|i`+?+3T<=c~ zaJ@g-k9WL%$v*OQY^zIc+>}h^Hl|X!wz|~Onqz4757!()lP`aFb*b|;6U2)HAeSX`Y3s%Uk&d!R}wFNX?Q5S$LR3A zwu*S=mp@vCuULBcUVF*t@ICZC(cEC+ec}!;Z*BMJ8jQ{;=%pM!|fUyRYO#`6DqjNcmM zh?duNl>UcUdFgMX=|3K$zZWZibBz8rg`?$@^k(&Z@eIaFQKH>u+B^G_Pqxnbv1op>xNG<>pQySG2NV@pJ@XPc1QpX}cGcr-qu z`D&ij$L(?|zv-UfUQ}+XGu&4!k80E+`m+a}WYf^A?Uq99F%-P4LHWgxs_uOD?AX2K ziB7hvY=63ZRPeI&ob^2Idm%+vx1_m-9&l(Id)+Oft*@eH?J47 zC{3+G*!C(b_T?Abo!0>T$>2L+@|1D6LR>gjyuE5mB1#ZfESwpRoUwr^>VTy|M`4PV zu;w4!Pk3(zZo#{$UF+$Nd6DM^|0J2C2C8%8gvr3}ojg3-d!K86)~|6lB_3S6HnND? z-RT$7n^-@$aLcmyE^qM*)9%0bY2YLLwg11Ysp+of=5+e5mKFYZ?sU;Q_S!AITf3%O z$Ik0_GVLp7&X(9{zcD_h`2SIxFAS;-A<+CZYJMpjXcwlvj?MS3g81oj<9ugls^7u9 z;zO8n9ozV5ey32+Z!td+g%EF&4UXG@R?e?L-uS`B1=$seUn?_4``yqKvJi}4#dEs# zUZk+igIgE3O9z%*h%$Z^*LBCOK-x<5n|y7^r?%3aG5M;mvo~00yO3K z5A(KuW75Q2NLBP8AD1N|Iv(Zx9;9sm8?EGUj7h0{?%~sTl=XYiYWx-(zp?4@D>OQ; z2MF`DapTv(Tu<#iN_%iLTG^cQesn%DO zH%S@44le%(#cSbiT{-OcH$MW(8(+J9;}i0KP{W#VEo;K~Kv*mP2PyM^Q1i0tRbBPe z#TvbnF~R!2k4wDBW99S(qwLoo`*iZqsO@)uC;3%YZ8&?2*6V#cwD-Km^bcX(-pLyF z?iXa1tm~0$9c$`qIlnaN*3ygDn$MBjV97$PYqVM>Bih9enp(7I6&o#fZHanP1P`tunKIPKG@8BxZxfM#v zzfe4BENS|FOXqu2p(I`FLkjjASi)cH84CPdDwLGhy17Cn{-H!A{%yw5=GP_sw-Iv> z>%JWz!sRx3%;dlp;NS^XfPxF0Q!S&=?B2g z7ib4-XG_k5s&5?Rog=4pL@+Z7s=m{p>N^fLkv{A(V|swx5olgDGKWFtE4f!ZW)6a? zZ_wlBeh?Lu(+g-lU-|&?-vCMut@n#wZ27d_ul!o?=U#B@{gU$>eXsmuAis&ZvmP^A z=Vv~XJLS=>_cKOry&udRC!TpuZrEeyC@A@kc-(v#6yN=z@5sC4+m=xa&FH+?I5S{4Aj0<%Xu@k{al}^ z9p&~wcg0N?)kpjeu~E7~G&e||=ThOfxYl}mcrX1+u0>B+`h;k%yNu3>e}vXPc=6Y` zDSSZuptF1wwirL%lnU#te2?+_F)M$-@?T-)!}ns!%1e)_u*%Bswem|t`;7kYpz06b zd!JKz%7*s-glNiy_xkUuz6h=TLDBxWLG_XT^Tt1;bmGE$_Z`#~rLo0v`iAfx{qt7e zD^~u3Ur38;svyDgRvF*NxWm7NtLK zbl89RP35OOH^W!qtkDk|{Smbvd36qr!Yu2LzcTq=wfeVO`aYBYtflkaj!CvWp(-QgNV}los803WAuLNi>CixEPYvwpYGFW{(ECI z3kK8NzZIKUmX>?y;m0O~Mw9b;wxCRzyLz=H#VaaUw0>PhyJ8Ey zg~jz=>{cjJv@nnA1^tK^J&r5;r^GJo|7mvnjNGoL6?e5Kqpu}?2bAATHTm9AX?K(H zv6C34t4o=z{Vp^q(b{LQ>1k3px63J_eQ>=%yZ_10M!0*)M<(x{#!7ERx2L!21+@I0 zq?vFiw6KK&ZI;p+uK5)7?mpv)eCH>WDp2)V8U6cSiX) z7w4X$=c;G6?hPs=uc9gFk~|rdN|pO^X;3u9w?6nS3$Z;mv3)QFZBxaeiYS^~o*08E zH=#JM+H#9tT-pn_tg2sibD{24S(WyLRCZJD%6U~)i*5B-8Mb@~y}NG{EV}n-N;lt$ znd-Y*?p|3=-?gr@d&_f|Q{NR9mj`X$5NO^NE=k{Y)aDQ3$4_!%kT-~Jni0%U-xc^Y zsw_e0jT>u6+ce2t>tE0}$i-qgeb=ZJ)_aXY-uMl_tuT*h@G1Vk@vErs8Z&;+TcP+q z0ku6Ej9*24SC=&?YlY;`LRFkVKFLgX#^kH6?+WwQr;J}K{Gy>$zJlt77TNtV zZcL7veDx@Qct0%((eWs!?+SKVVSI;}+eSmFeAV?`P0WWCZuXD}=QtYa?!|B|4DyA| zFY)$nG=8DI6Ue9W$kSf_NYHbZkE}!wMsPEcn{KEY_ z0l!#?@vE-y>M(wTVN%VzgXBviAD0S6L&BOxRee_<|?>_v#Y-B#0%f&?fmK&0Zy}!UW!k1N- zaowQyxYXCLaeJ9= za{XAZzFJtUFH9EprF5{zWvcxsYL|41(R}4}Z9%t}FrV0$TgNB9k^Awo>k!MeiMGGW z$A!)>esMJyfsUigQ&pe1O|v%iiJF`wqTZrs>I&KzIY_ww(^ND1hE)0QH|13E{#>MS zbZW_Mm!O8+7E?P)cTqj)3q2CFo?SJ>@;6q^Ok()GvwUw>{&l(q%IP&@38vRnKV?@e z&o%)BiDU{TI&SEO1pSN_I zYn8~iPLn)>O%_Y|Z?N=ApKI4}d=m?gQ^9J?}B2 zeHGkmxn7T%9*})9Ir#wtoqyg3(Gzw+gPYqx)ua7h%vaogFEEpZRz1z2>RAk8cjf%@ zf|*6o$evs1(fR3RexI8U4Q6UV)syhJS^A$3z-J6(LbhZSRJ~_FUe$6V9y2FFO7tVE6*4a=jpZpOc;k%xnNvPV42ub%v|JR_I1he6BZa0JD^z?=e#k@;;WU^_aQ9 zO}PMC>-Jz~98`OxPgcK4fAkRiPJ>sF@07>PaZvSWznJ968%jScy2r4~a1;0l@ok{m z)eNfqo#1?;8a-yNxA=u1^Zs0e$IN_?cY<8KN9TW6<;S=;R}+8MV`dcO)zkUi1)YAG zS2d?!1~Vr}SNo28+&m0Qo?{^I7rCPzGe^Mp5r5dyhroK$4|;U_%T#|awC$#v-qN0cK3CQ$4rx@H-buE407w_(jGJDR`n3)xVMFR_0c;|kw4ydL#zC)U>fA( z^t963a*sIwyU3b&7c}7XyQ3iQWX`|tI`9*R#KWOoJ@HXhZpyGQhz70fX zr$=57W}(-DY4B!Hax1>U;)g->^-gcCcBnq-zg3^~+=JjsZ~(-|*1$L-Kf&~;!VxCBgtYPaOzR&jFN3D!g3Vb}sfYHqPW_bq?3I}EdiX+tIQ zH+z))!ePTf!@OaKVb(Bh2)J^oRLiPVD!n+FT9i(u7F~}=+te%g&F#m3Ze6MmzqxfO zui^F{b5A*sxzcvmJCC`k)Y0TIwA}}jL+H7stFBA!tL;OFJyEj{y|sMk);kS1-fe46 zqwOBAJx~0|tTVHMf7}DJ2WGQ#Z}tIp`|Y3IKfB&}%uTsnczDmP+gHaPJ-p=NJ$Lqb z@|>GJPM*=(XU%V}+R{KrM)lwiv+fh6|8p%gH}ohUh4+glPguYD_ZlqdpjSO2nj1Z= z=iMg$5&9YJNkg-AF%v4Sbf7L?|(IU zP8hvNG`zZzN#U^M;nQd3pR@M#8-11WJ7wj+K)lL_-&y@miC$;vpE7=fR(`3KAF=em zxAGf|K5XR=8vS01#5p8j|r70{i5;vu9crpoPzTM%=O!i zmOonMzrpCN^7ARIC(^bkEq}AxHyG9jKcVu({hF2kYpeg=Mvoi6-!}R`iRL=!&A+Jf z^ifzJe1WtmJ=gL-Y~}YWKVR%&{qG6okI-MS^dF*}!fw(0aD??eeP2cCj~m@@`JYpM zuK(ETbAFGZWj~3>GNIkbUl0& zR_lJ@hcT=l{_7Y$qWb339?S3i{$7zN_?7)57)s9{>;Qh&=-~JG4(@xUkI+tqj~gAv zQ}YLO_VO}b`4$*mgeu7=VIinx4^e_*;m-~>YLim01Md@7-QF==(|NZn^ zH2qIw<(I|MAB&a$c#QuyW96@k<^N19orPnkmYUixZ0yCZv|M!s|D+ajN=B2KVL7HP ze$kw9wejMYY*&D_z~yo4TG&6h>3gZW-#oE%18O>YG*r9B1#EcgzeJNSr(|5)8 z3vr&oi>mch^~@oY)b7|g*nZT)RWN&~V&|}|rAj9+4TcgG3=J@nh*==`bH6JYPx#d7 zxi76IGX@rA>kWn%t@kW)#_uK zHX(TOT<$hDyC3kV`Nn1O5_*qWiWK<-mG{tPO7M3tuC&aEMBi(d{;jffN`n*Go0RUU zuDrjxWo3DLlbvR4^8KDCe~Njl!l2C~1FdPRK1^9%nC`ynbIj8e#E&VO+jski?LxwPY^xP&;ax!@53$(D zYejcEwZe#p z#3=kUz8x$+Uukhs2<@$8XQK5Cg)oRmc{dcl5%^hKLz2s9{3_a+G#bBfznp+yEX4R# zw=)Unn+)2`cFN=%Lp~edq9I{Tv#Om*8;gm<^&y;Q~UF@LmqE$ z63*BT_7r9IQ{yl6pU;yI{S*3Yiu2^xRz8Q_**>tRJHh$x(XrsxF0miNcEs7BgmL5+ zJ&>R2S?nLTGwHG6Vek6)cNTlFSuuMYzUmg{IgebjOU57cIqZqz{qJwtGtw*VX_t+U z^JUAx5?=LCjMeQ>cHUcLeiB}_FXLh5+o)pO&dX($Vl9k76$=$_!ZO`+$Fte{?~53t z=sUe?h%P#kai;lOsxl{0KhlvfC4bAiZs(*?Nh0!k9*LgTR(bt)7X9!>WO*|#v&K~Q z#=7>hR2TS{W7ZLg?BklQw^{6Dg5njV$1azC%!E!Wy^P(-8S6}@BMK#5D?0*(dJiS( zVP9#b^l-ma;xBs!1>JXuSkgY(Nhmb&DVP3&rQ6)8r2I)s*Z2`i@{N6cUZ!v5FAAoKECD(kADQm9YqdUi0e540dIq5%?Pj(`_y5yuU z0W-s(@*TDG!#nLELG(2X85X;A$nI}>p8LeRAvyn=l79y1Axm!63Ew6ik- z-TBYlyYBpF(D^Zb1UUxDr}hsR_8ayY<_%?MqI})p!(fNe8^KoSb)eeSVkr9((ThOY z_sG6P_C2yMVZLAWoM*N3JU6l0c@C7EXF;`h6y!a->N(HKcY=I%QjAn`?(&e zJHu_BNPM3EvU3RG^R>nFFgLIC++qF7oqr2G$VcHxmFLC{>u;xH^uITLeLj2Q0~%D~ zf*rymN}q*Ygz@`Tu9be+=ntuWv_#q-xe$Xl9iYJi$c!o-){8RLGjbM!U_*4orgB8=lwmhMQPoYlE2T& z&r*KAxWjtgUn+luep>mV-%T9~|5NqNO%%@WK1f`Ye$ME%=H|TuZL^NBYPMH z=MMu~ejpV7Sn?o){D3GpI~nSi9})$=gIs+_jix&tJ!15?B=0=dxIl$#;T@%aTIuuo z4z%=JMPI>pw$VQWL)me3nY^DjI*iY2MxU^B%@34+!02m{+u42428ERJCx;VZp1IiQ zFt1%<`Nu4O*3u{JdHSF5Q2CstYu-ebLf8!vrJswX<3z70{TE`i=1tM^{jqfUPl=|> z|9F&++kKph@q02x&%iDu@@iIUo#E9|Q+S$)zVwx{C^iSV^x7t0EKycf@gU(3ewC)a zg1yIOI3w8W&*HWpm*Ax0%{iLa4%=qe#K8!K93WefLZ#PVY249qUVs@MN>=io-Z7OXRikEtz6FPLJ`byc#lp10ZQ ztP6G*%XC%jn!)Sp-!y{^v#gk@L5A5dT-wR9F{c&Fzu&`UOKlD=i@`>b6@xn;_L3f# zX`KvvNt~T!hw~)=CLRK7Bkj*@t?b^TqC=2~-;c6Z9A$6!h%JX3+_Go(PRmYXCVuc+ zmIt@_MSk!f-Lkba>J}tX&R(NQbGfviV)0H~c(?E|#s9mQn<})~{4da&PU^!{(}n5U zYlQbQ@nh=b{DyB9hZ)*y1U`D7cY!%OQ@KL0>2-lN{dPrrjqtwq%T{6${Gvg!MuYLI zXs^*@{gt&s!zSM#i+@bn%h+pFx34&C{GJR#@D30S736dFALZ;Jf}J{RBQ88SCBK5{ zg3BMbUud=WlYZkT`wET6DD4gRh$UJ1>h=}kedlH?)EHw@slAo_c(|JtUgO5E4Std@ z%i=A6C1EQ2igDfiga!|ZEbmz2cM4`ETS#&_rn0XH3IN?33T^OH=*u!O9Qd{o~*+gDt=eFfuL@Q+Vd9+3Tp;_A`6k4600kK(u9$4~mQcYf@@k~;LQ z8@(S3@0Y{dG6Wlv!1L<`-}ds)QEW3JyOPlx%@;@TV^Q$QQQ0N}-V5LOLfw}x?7ZgC zcb~kL^JK5X2mbZ=v40mn`fuRe);iAkO}!lTxuJFq)m%Ff{Na0h6>oHpIq&15t1+d$|q{R^wpZHU#<;jpVlUhuwMA`80X_&M;`Ul_4xa^ zMtw+}>bx;|-QRU25*tR%Z~qv!4%a^S!o)A*Ut_f9+LymtbIr@@t8883u9xZ(FWy*l z{omd6k8fD)o?iAOvL}jU$KK;bYy~)@c2eeika-?*Am4Q+ z^K&)GOq`eb+G3gO7$eDyZHDCiIzC3unvGDg%)Y*IGLIrJKUE96=6V~VuhRAeHY=eG z!LN(#i_{-OH9tDR6oa!9vft6?{$%~%-IPphxcK~!G0vMA?@f&RM;QMfJ#=B`hYxW- zylA!$2P*nBLH?+(lHz>a1B?8<*b(z-a=HDLl=CMd+4Z^Hbyczzp^snXqfmrZ?L&4k zi^NUI&YtJ^w`WK1n&;N<;ApK~TY5Rb{zKb)yB_Q1M6Y}K1?RY~-S@gYSd{F3KgV!A z^2A!%VBVY9`S|Y6UC(xgvu}folU6JG%Hk*0K0LUZrJngsnlxw;Wgal_&N z>9=wwp>Zae$vfTr!8oMI-w2Wa>~EyB!#g5TeOxo|i@$Cp6t6JGr(AlE&C8@$M=x7a zUiJwJ8b7j@q#v0g{fwpCoUEk$ofd;mRYB9NqL8(8gOc=hQ>3?AdZqeAfB^-Jt9|x;$pKfxLp`Iy`2ix5}dDm;Y~Y z^D0pFw15rdYxbCF1Xa)Vpz4_q@~r0SJ!Ui_S3+MvI4~o9B2(-fa|~hT9H@H6JZ>HV zAArvZ!^7Z%(1V73;A-fN;2O#2akKOyDyMzq!c~TgK*=qAiEsp52M&Y0+T@OU%pA1z z{h;dG3yM!S$ecYRdl8jiWw;m=pZPxB`43UPac)B8I|K46n;Y?%IR%REQNvdZUjocU3pEH#GhHIB$6WB_+>^M|k11SErh8MV5m@nieJZAKKaSnv@3j#X7 zAob8^hzFftkXg{Dph4#sB#T_fp~20^K-F^utRvrHkC`D*_3i^DcMm8zy9_sht@<|#Wa(*8{B*z5wFNs3?x})(#!aZ|8ljo1IeP`!V<^Au78*dVrCN0U zGyr#QLm$Yy(t_M=XarLbN zPY}<$q4Vn@JCDQAvbPuld6ir+2+~Gpry={0erVnvot=i_^U&`F+d%4CkOjp@?YUi=pg3Af4StmQ4K3P8*64JxaQ8*l^G=Z`fg&HB1`< zu3ReR?J}^WNM67bM|Gbahm%L}*)dXcrlz)Lpys8TLGbi!e*$)2{r>v8)P=fyeKK{v z?gF+G=j$f0qZq3@$Muo=qokg%pWy#k{W;xdqj2%VcqGsXM1`tH@(7X(cE}p-RwT`i_kw~{Q7+MM1z&jTlqEOPlxvKQTPv* zK4|IT9D_ciuLC7dztLM&A9T9lb-de9Y6M7)AKXN0(5=kU7nQ~yRw zZxPKy6xP*#m$WGTX-oe)JQUuL{Cv^sOHtuvK2iE#8r@>)_o+M|`Poo#b{Fuv-S|1X z3ex_@(jQR&l6HrsJ3AMy-(z$hl>9$t`B#WW{=c{Mzan1gTPUtp2Z3f$SoNjMnd*=rBGyCq;G* zVIK82uofNWbvpN6bYUK)^3Y*kr}I;YDunehTEC;w^p8>V#eo=+|{ydx%U!LY+um1b?394yCzKx%GnpVcZRf|y2!pjYc7>S zzs;Y*dqkk?D4-8(DK1RczMzG9iGuj)vWYny@3C4z%L_tiZ|~lY7pX1Xnm7{L+c&J= zsF!&QfzKkNM-YZ7Qz68g6!gWF&K+qpx%3{Zpn0hHHSi{D^R@<;VE>F?MSF#f#;@D* zPpGpZ!IBFx#;>Bi!U-#owh~&i+B`bqaTSNDRc7l*(7#USYA_5Q~l9@#*m^G`hr|!uX9F zzcFiXp7yftQW8RYEBS-a`=3G>#Nbb(;mX3|Ye;hWj9*265PIKL2*WzYyHqU1_*J)8 zXfu9Udl<&yry)uspRq0)lBw(!dMKBtyb9?V9*1UKD{+d&;lq6A=vA+ckHUNHqpu?N z9+kbHh^`t~gL7;3s_*|6dj-a>|DEVugI@^g!Nd9VG^6S{Bwsf@chna_IUVoC=hvXe zU5y_13q$baJQDeZs3EQv9saCC7uP0V{3bel*3GHA=4I6@x$2QCYM?{(sLuJ*5vjtm(cVdh14z>vRvpI@nE!ZJksY=b;!E*5OTgKc@vyDk;3mn zHgV&haznj%6ZF>-`A0*V@N(;N%ju2NZ_=3>Gu0c@UKgtCkNqqG6>=A+NCpkCBRaP| zu&4Wp?cLq?8u_T{gLj28c9AfgrY4xv5wiC;O)7R<5~T-Kp!{XG|74!~Vwt?En0M4i zoML;`BagKgY{Z}0)48YfzMG{$F6I&O9iWbB^xaeWzkR=j3~yHcM}2or>Z2pt=y+1l z{c^HIj2R|F4+jOhi}O$Q2ZBL{Pl(nAnzkf>OskMj=q$fV<1yJr^f`H-jaEV(_4a> zlcY1|xf32U$3f;RxnYl)qoCxG9#irh2E}(jC^`0mlCQ^b8z?z8fs!K!YCKv!X0o8t zDeKZ3LGeq2+}FA5J!Tex3{^p&3F-E4E1o<~e|HUt>`q^)bf#bn^59}nay5gJOM1OF z@D@;VC_ZcPY4B=j@l|{S$Q*FNFnBw76x6=)!{Dvp5Xh9z=_lU}4nQ}8{UCEcr=L`O z9{M&=_1y$!LGft;uLGMvUagAsr0;~591Nk8L;LCLq19gD9U$QJn`tufH(URNqr?k` z4F?VLh8>1k!?Ypb%B51Rxm4=}|5U5L?NS;h4Q^Uyq40kB2G^obanmSVFMeEy z_wAk-J!JefZVH>lj}FZ8QTQq2H)8y{tbEq!HCBF`<^KxtDj&WFZ?p2FmcPTww;CzkMoZUql>V627y4t3>Lbt7mVb-Vi3{(~%c(a?uT?rX zWOyI`1FP>RtbAHDH(_|c{hs8F&`(D?9$N>Kt$;cvGk{6^dR*`^Z#Ki{hk=VzF7L2 z7|lYMTV|ZvuYJi3v$W)NJ=;%%Rk1=ZK7*ZU)nzKIsM)Kg$H0Sou}-g`xx0id$t&13 z96h<-IjQ$sgp-rHxG9|0KkmKOCw<{Uu_;PX=&qLH+NZyNIU=0f$^2GS>)liAl6q%B z;S{@*(Cqn`QsvyrWi#bbRzcWO#3gCXM zrW(IV^-S)e$2PP-y8eOnkFI}s?fSEW6XQl3RGMX{)4%^IMyPYxgSb*)5D4{7PQfr&g2c=z4sq`x*+GTvG#9 z)s~qDc31!Rx3{*%Jfs(Cz9g9Zqfg#j?Y7^$5Sv@QW__-G?dlEdAAID|54SJY52pN^ z&t%{1-FLTG_LyF4+n%DGv)`{?Yd|jo1nHp^0?pLzlJr`qZGIts{A4@5#}A9~4E0(g z#z*fj3VWH`S(Kw~+T^bFFX$C2>9vC2CTniNZ~AaUVP3-3WH5de^;%)x`YTpsntGXv zdaXfgP^0n7GB;FvPau_shEGhs>UynUKlr@y>w;f2Xl$ZEU(h>t_ZFf`^gMQd^ji+; zQ6%3uQZY0oAvzxA^jagv?+z=uSBj2ED3!0eUMt1?SRwHH<>~P&G&VGxIz%e(P~pS3k4xqMUUwVI4yxS!>hJQia7s_V6aePoAC(nn0b z5#+P3EE&E(Dx_z47G+~*2)FiEEls1LPDZ*P-uQkzr z3_VQ}eN75IQq7@@Uq}@6NQ|A+YYF|HRj*fi-RYS8zQf?hT<6Kt1qEGK*h`vpda;FW zFRR}Nd38}fudniPVJ~Aii(Wdki_fn`wl&DOn*EE%ho}QR(d;k1cFWtIzOeJ{>}Pxj z@e4_RC;6_T4Oi2KSucL8rWRdT&C6j=s`Oy`4Aor2p4OC;A-<BxdtKER zYLoVxy1k;0B@Ri>u*Y?DcIh5h>b=Nq)&F`b@!~@80H}Sh;#GF4NPpS6L zCNKE?vwrVu_E2aGzajMBwJ#5T_l?g9L;sALd||wXYCc@D_jC(;PbJgE=Rd@_{0QUo zLB?qV+ATl)G~@W9##6G^*RMHLGeQi{tLkYU*DfEt-#jzjt>BqP4a64G1y?J#; zn#$r@c6EwIUn!WTy3(4M2%AqUX(G*z*R+mVc`7f`YjQNa*Lqe{Sw^gG3yje16@{iE zsti%|EA{5-IUjYsSYBZmoF-7 ztp2I$E!UEcNaPW&nHR*T`w7J>oMygqV;O(uT0c~s559{8I71GD8 zyv<=s%4apXBdA{qCG~H#bbfovrguz{-eu{P>OX4f(ti<3>OVy~``ebB1Q9-W!ed7J zI;3YD0@s2AAagzEj~sOV$e9x6`iKWJ`#|(pxxB~BUJ(6Vcdy6I+rTV*Hi4_b4WR06 z1Em+$zELov{i3S330w=NLFR?I>pf-`g3^mNc+AWPnL|2%=3piPt$HueQgHJ*Q1zZM z)IKZKe*}~saUUo>VIEYyIdB!_TRm>hf-2u)*krf}l>FzpX_PMgu5c7w1CD@7KL)M_ zhd{}t^?Avq{WsWmx%27gBL54}pwrW$SIkLI3ud}O-m7w59y8Jl@k)}@{2a_^-Cp%H zgWN;8CXepC`qjise=DptoJe?j3{*SMdUX0%wSNFQ3-%lK8NL9jUA>^{>i~7XZ1R}d z04hBPDjnXgUOiW;zY%0;a*I7?(qIbudXH4?=KKrNp!Ab^UZl@#0HsHzZHcSgE#f9J z3-ZvnLGK08UpsxQ^q_hUZUtK{J_{;74N9*ozITJ-+YAna?*Wg3E#P7B-QW;No&|&8 z?ce}-2iOntUgGqziqAtgf~xNpFbj$gAGbfX3FLdr>0@sK)6i+>_a^KY-PDmvEpAMvu3s$uY$|m)btF|=Bkk-tG_caNvcofV4t?ur>MZ}g z2KHdh5PL;W)Sj$8h4%HO*@JlA?&sw8Bwo1tIgeewxa(6FX63m)Ir|i;^1{tY@_6A+ za+Z4^dq{Pnd%Zi+oipC+oR7j1(X1T|f(plY7(`3| zs_^Hcxxq#({|(|Fq3g)&^r}94V!f3Q`%S+OLymYQ-0XwlTK9fj9I!npPuqvMrW*i`2KeLSBVSle_ZmyYr^tB!*!It&DsmJq#7F5PN+<4l z%ik}WFSf8=)2jRt`rldl+o(t3Y0-Q^hV_`w5*MZS87+Of!V>i_*I%;w{#Nqx`L5Bw zDjIpm;H%*D@TC14OTSa;$a4#*@GaF(+NUg??{HWDkfqaIj^@48h1*m=KS*J{=k6H& z*W%9?Nm#%6MbZ4Qh4mNxu1Jr&*W}A`uZWgDS>X>YJ&Z@2=p=rx$*1s5KB70;{c)wG zcNo3Y=rF&zig=<5;pZWu^ylFlr9T@>m%oW<`u~XKe>Rr?##sLM#_I2n<^P8mzqlTH zCVJrFdHGCru~EassW`>7z*A+fu78fdYE)LHO|`Xi3KcPqv8!q7lswaop%v82)7dU+ zM}#}4(mJW!RK-(kh}rE~q@ONmi0viSRMp9f{;d6WQFrS3-LX^8S1i{C)as_UN)8T} z3Uw`Sev57-t*mh_x@)CyRzz7{ais&xV|Q-gQATH7e6(;$xx$uGCqrT3q?FO*jr9ZG zTso-^oQbNrQWqC%fh&IV6gspx|FpYriei4mCwtpe&Q-L&lWJ(!A2Gdc&`QU(x?X=8 z6w+1LSJz6fT+?P42!-l=bg?N^_dDpL+0)R+z*4nBxB%S!_@kw|P*YnO^BV%fC2* z)7^jh3UfdO@zd0)m6y#wR>TbT)Q63a-un~=d4sd5mZNRj=&tpzRL@$xpL5Lk@eb<3 zNQ|FF7a*!<-PQTT?zkRvBF1mb`1QZ5uqYI&ay+NfduuTQ~oi~2GOS{lhRJx*k()0H|*VD=P6pzO% z#!u@X3NKBMUq!ugns)<*y!BrL_qDrUSOi$?lZyUxzwGYag*!`&jmtNvP9priheSVm z)@UdlkAi3}Tl{|M;9W!^ZSu9f!^@Yx(XC(j#K`|}|5e)0nYa5RbX(6t&+iocOtz5Z zxEjBT`#JlKpWW7pJp5uI#;>~Gd%*Y&n=pMQ-{@p}i@K0CP`9S*>!)zc|8#$vcS`zB zg|yZ)aZ@7kQLyXwg!8?v;cw%ku-QK9@*n48UC-6@!xFMK@=<;Nyq`0iV_oWpTKYW3 z%;}bIv3-%3uA6@+y5LLG$9tW4(8rsOnZ2Lo^zeU!jy=enXxMRs>75t8cFXTRJ<*;- z=bJ+Ji%r4v>`_Hu{!O*<`oV{zzNTeYARh7=JqkZ=lLM?Bp=*xX7kHn}N(*~WgI-^{ zc@l(RD!t(oQOEN34f*`sy^g?=MmZTYHegO@*QCozgIYL%UoIgE*P>*ZyB z;}ib;^NIG^w5N`C)iVZj*dv@`47^>0WcPBTTZg}w+21pgM}4Ar-*0{_G%k|6UbYA| z2{&#DY#V$WHVAczi~RiJgF5lz*t?U5zI982v5D|`hiKm(cb~E6c^f_)H(INxT?jJmLIdBWL9N_8=Fs6wX3d{;!$5{vPo>`Q2y^eXn}tWBu#Mbk^kJ z_k7`)tK(|MgfhA1FfFN z&z0_T-EYYmNX=f4j*M)iF146D9T zo>R%=^74%4Z?J2gPo6XEk0yU}3TG5lcs}OxjOFp?AD%@R&ULK@>AK-ae zf9MVT^XvYtuU&Jf_Tbt>H_u9ZDX}@ZKw~GQyVF$!pa>T`aZ*S+*JvgdocTU;(ZJpg)o?|^`$F}YA!WZ&w-?6>7 zjcpcsOR%C_Vyp^u1s1NDFN|f7qgFqOPlU)N@$RiF?ms^`$`6k7r*f!Y=$be6;!$YFB*C;|C?fbn3}kCiBDLyky9~#`Jw^INLT2XVWt+ z+jL*7T9dv1nTWRzv08=mjr(NV#qBYr;aj+Q;*50PI7Zx2&x%jtS=HB+4U0{*rExlq zj^uf(i=G^GBI=M2LQ_S$BzX*F?exTUID~_gBh6OCJPTcPuHt&VCT| z91u#%hyAoCNvtblx7KJSj#NmOJ(Gg$i^`P`ex$9RO5_`}m`d%tVCe=W@@qj(p;CIS zrB|wdgQZvMpYAEjAG37X4-rb_3w8*V>Tk3!-LxxSTE5lN_tL-R?vG(DHWMnH8Lqv&?8(fy~ENgl^-IV7w0AYU@zEbn78;%;BMk`hU*Mh87>A@e!k%a zJg#U5yX7Vwg7iRiF zwWAMwJMsHGW?ry(?Z0O!HrMMh(*rJs?)I4321@RAp!j4#=J~l*9y5!`_Y_9o~FkD2ozON=?`AHa<4QPhsJ9ygx`RgZKeEDh&mhXZDgf~w~gQ1$3s z`VP_uJZAbqmd_j_E%s==Lsx?mc16383I+$L64jFg6=*v>@w^y+-NBKCFN^1%o?^BHW@AiCAT`~ z9n^b)F9k5eJCBP$2fm$n)@y{BQHwtVzK!@1kD1dTUskzO9y2GvJ@7pYs@;R2?yr8s z7Yw@%H-TFzztLl+4Qzmx{VbSi1+Ro&=h4~Is$W{5!Ocye_%AkGWGFjY#g8DI#^D&K zevzH5Q1&*$gWwgQ?BdiPvY(w#eR+?W7r-9kdqDBqX1LLCF)04^p!lgXgcE!T3S~#D z{x}PYzx+_>`8w_~qu)EFAF=d!)>7I*#tWIL2kudtH(?hRC)`j^hQu}q(RA{-zl)f{}EsR ziKk3$`s3h6XgHJBleIF7HZU>d=32>D34}v40 z;!lB3f=9uJz{4OiIJ@O8a1go^>;oSJ^WX#EUQp>hpwc&j>%lf~9S9GXo&}ZO2(AIs z;A(IYsPYY<((Az=1_9Z9FBs(JM&#Lf!w$o&VcIZZI7(*aA2u8`%o}zXW)0JZ3Byt9 z<#P70;h1 z$GE=0i92fyOZ=GLVS&K;VY zOuaPs;M^4d2j|wO`sW_tdUWntQU~U}G_NkTe_sDQB%HT@9um&$n^&Kjn0tXdC+D3a zb>IBH`E{v@c^AktK5v3NSO`mUfi=1U!=I8UCjE6!bk_pK{NxgNgaIRE!u*>`0sb>PZ@D-(&Ip3lv}K!xxw zZk#Bsd6TnW)(u7YxmnP}rFjSyzNm*3y3y!yJ#6sn_sNN0)x%19lcl@!f=EAT>A}7{ zyqA4`j?dp>`G3>+h4->X)<0{IMf?W%5m2}V6g_72O5@jR<$v4C4_o>Yp~N?>}4lQ&#>fR({0tf5XZ*60dN; z@{d^laqCa@yTZpst8KJP;StfuGt4+Cd`C3AdaV9`OF7Y9Mn9x<#$e3&eS!Gs{kB>( zvIV;q=O-;f|E2Y3xF2^&Uee!X@+=d7=sS(R-T19D`Z1L!z1!%gL?e6N|~ zpE&uuP>@nVU$(&x<*@Qc=qs=A^ikvYL6h%eR{n_OBmW;+`XZzM)aXxws_$nle}ic9 zk6HSEmb}pa81i#1`}j0`6u!YHN*^=&sHLw_e##Cam%_u0U6lS4rPCijYy9ig9?Eur z3Qt-2U$^rAp!Si!-}3*8+QaoWtra)gID6W$9|S=znYU^`hyI zUk4R_L-q5y+S>D|XwpAt>3=SHpnuQktBpQkG;@2`KND7-xrn1XOx~|aKFa?O%l}nS zwC+2F8l%5qbgT78ICp*6>iY*vmmdwa_eZR~e{B4}XXy_sKcBq&<>q@;{T-n{qw>TB zJDazOCU3BlVeXZD6~YH0qI6%3 z-Vw|HR4n~}$I|bo-YCDHilr}$rT=v-{rMRGUyh~gy)eo@(LTBN!0SM~Ca5HSUFQ>9 z_H_5IHbv1|ou7>Lo3q=Uj#IrN4N7UbDrZ$y)Wei=nQRLlyJ9Mx(%e<*EGb*{1gs{V zIJNSw$?Xo4*4@bQ@MG(D?b^93G3j)B%M%>YQFKleJy~|^!(@Y;L^cTPq}O|B2TY#b zQvC$0WzAt9#Qm$1$@}lCup6SKNjoN1EO(nHTwCOCucaORf%Y#{C{;Kn3kQFNO%qi% z?EB3PQ*5JX@6>*bW=`$$`VtDQN#6fVvf%RXK2_x!vtoJq#)sDIW(P`h%j1lUTC=kK zSxx|JDqkctMf*3Jl}+_kX^L0Dl**?49!|DqRpeX{?dt4BG5Xdx2&~}ty?6W5vR$q4 z@V7tSy_4hFw(od$=Tk0QbH(GsiqxjsU%+!-y3Jx`Q_%rnm7ZuT?=;D!Oq%bW36pXg zPgWM6LpB{TO4+zUEgV1Qs4d;}m%4K+N6WW&b$0i3?y^4gkCnR-bstvAWOu8}litt-$f8 zzjZK|iI1(XV_8)O)g6a6SKM$_NGR$6zYnX7yHV@%La9OrS%2F8t?B)ww#!qgdtREu zt}Z7<>9^}rY(hf+#CL}kL@?O`t8%{^ORaFCdu`i8%kFMpR_z{cuC#4zMb%=L<@CV2 z&4(&7vg-_C?+Oux{b?&g%rafXz7G6wU;tA-VMQUKXxND@^3xjc+Cr%kSFJPM|8`f? z-FKBae{e(R?q1CCCU?M<^V51t@1$w}>Z$i?t;JOeM=fpK-eW^vmM)}!@C)(aboalV zw3kNl;}ttGz&Zi?94VLbf)J)UfAEy?vDaz0F2^frA;g;$_6t?=(>h}Oq;F6-LF2?v z>x{-%Du_Zbeii++jvK$PT8UA0RwStH(O~>4?pKqZRH4yBLhGcGs}=b)G<;(6J-!=# zULnNyTZM6q7K-+ti61FneLq;}BwJoBtjh!jrR}Z0AFSSl$r=OgCsb4q?TwGEvP8$X zoZnaJsTJPlA<<&%QbxLaFr#mglG(}1J}}7?czYkH+S4N+sn;UA_7?=4+`Evy_{QfN zZ|b<={DZ%EEn~K@nf(A^&yr;E<@|n)QTpWK^AFH(>*>FB^y6Cka}EAYwSVl7y0uT? z;`6`H-nYbyCii!4oR#>EUqYP~`sw2He=r13J-YpTUgVkUzX?=5ufOre)uFs-9`*i4 z`Xrsyo~U~2E|g6?zwp-{{OZ5hhpM}L*tVs&^F!NvyEd>86ISvb+rDFK=fgWcdT%1E z(>%Cq=boO#);+s+b?)eWbkC05&Ye98t=+_nBzEoD@xdLv+q>7n_g+lygMI&oHFrLG z=ej!|Cdv*d?A*q+Kb??E77+JzCN^X(SEpO4+%RdKZ1Kecx%4utV^2!l`);O;#(GA< z+bd5NNl#u@x(Z(lMd>z?nzZDX;Wh^MA(Osi7}JWOffW5NU+y5j)#{yTec3VvIwEmh zR94QhB$oIB8j}FYp{)&fW$v#kg@*bUkL*?u7`JLUB>TQ7*HW|w93VR!O?wsP)$r2LOqosG``y_YNW9Bd@J_kX5(sF|yGcSQW=eYronSL-!zCKWV_knzO zr znZ=;mllGWt0A)vnEY6Q1;QSq?LF^};JG9`JUs3v2{Cz;}Zi!P~$#@D{KY zycNtEP2IAmb@C{kvhLiuMW9rSYR8RWJs8@t6gmsdEigN62sk>G8cZJK47q{iAoe-~ z$(Q(_PwpdTZ=TD&FQif(+mfk`I6K_9DV1uxGnG1;JVuH?N-kfskE7%UYF^^M4xLN< z5`!kYf)IXGG&fXuzxi~GzMa96T|szXIZ9sXZNvM)Pbxp@qsH?e8EmDGl275cMUy^e z>1!-~%+kLo{^SpS1%FHY_)J*(gG#4tc>Y_tmfeHwVin|{Lv(n*z+brQ+(ybNd_?jR zH^fKbI`Jnhw8!~1gjaZfdWY(Z(Er}#4eec{@`^M0KBj9v*Bd?8==T`?bH*=gbi2|c z^4=_3?`kIRJjoxSzoGKnEcKTD8PPo0twyU{l-?tnFM{yC@D1vX(!VbGxe>dp{1>S@ zO1ty;km+HQH=Iwm(P-I2tG!!{mR+;xa9-Ze8@<=kJB|K{P~PZ&W%Rh@CGL|(zhv_C znS7tM^k1~}=Z*f1(Vdom)beY7t@cb9-647Bvk!qf6l8B6rEd~_1>aeg{y!xj-!9>O zLAQ;33x@C<*EiM=7slgOx;z3tIQ+S=Wk;iQ@veRJhvGcHg#lgO`@X<6)%b&o}~hUKdB>y?u&c9Ynp zPp;d(yJt)9)-FG%jjnS`MII)%g?{p-b}}R0fD&>CePtT8?(OKkw{*8Z*}e1e3fk`# z%Zt>#4?ngRKIkhtA9Q6*7aP&euHMtTb600~=a$`_XmR%J+VLZ9S{zm2MzU-x$`cz{ z>R}2V)tNaH0L{x|k&}Z~&=flfCVQ?usA*&R*Z2tEo(@8|UW=C zx|_x=tFGR#;nDVzg;lru9AYD@sv)Ydmg;y!`=E5WyI6NORWse9Z9$t9lXK~mdL~;T zE-6=40~Pa0S5kN?^-rZrXQIm~sdOssOr=VLVx^Mup`csQ;&?&zQBwViYRUw!QHkp= zN_a@kQBDn4&|64^f?lGecu-7KY6&G_z%o7>g(j&D{BpmqvaG^n^3b-DHGlnv&2-&= z!g*|{riod=Kl)vk1T##_m5TO z(j)7_T4v_wq}Xqp-cJ=e-2X}c%0{}jhijqntGMnzVf@loXu#xaK|ZyW?hIYwazxu( zZXJA)I-kHhlM6>Rn2}(~g_uZt%dUfKextD1L*lQd$M64d?``1YxXMHC-L-6QjN^#J zNtECu>qLo_#2@;yv~oQ5+Lj#|mP8~b5nxqvEG2UBhhoc#D5e$Q_ElTAh}M^iThnff zS_D_6x~=+Fy@+-J-HYG~5UmPo>$VH1AX@jWXw_UnMS1_voM(1tKV~J_rqGM$C(VD( zdCqyB=bZW2nK>Wh{T^KP&8og2J4W_L1LfuUGHY3Ep1KA-IOI7|7H3{U6Eer5vn|Y? zC$VV4a;fsQQXH!L%wIk*!A)zVwM#?5~PBH73`Ryo>%`J871i-pMCyb_IIa=DO=#jgu0Imqjn?S-U!BOOw~s zto*Yo=iR3)S@{dJJX{}g%4M9gEM9VXuP#fyL6-d%mCNzMl4ZXWIc>FDIv|R#4J~=^!%uW{v!PWC%NQONGHfh_ytlUB|MSku ze*Z6a7jTN-r0Be%J^otkCJ2k&3CM3$bllJ$cg?MBG)@>=BaphW+XtZCJ|K1nh=+~x zeogFLgxo(wdkpPy*2_BXurQNg@c6ehy9SB@^vv-413{&um^I>V873o z_%6Z^K=F42j6l&N{z|(7+j389zo(b>f)HV`Uj*4jwqHEE*nWwh^~7(4qHi0FKzV;3 zg7RKp@=1K5#s}dh!oY54NI>+iiYsHvE@iVaq6{g4oiBSlZ;$^X-!mHbPq2>rM`;-t z_Qz=ekY<2jV8B1f_Pl>Vq=8Ysc{CIl4)_BDFu-~+5DdfueQZmE0oMSj3>f9E;oU&&*?uh%>)B|rbpne}PS-=hlqICw-Z^CQT@ynFV$^e)YRG9!FK^T+Je zj13oiq@C69e$^-MU1fP*^LMMh_iKLVy6_>*?_3A|R`R>b^9c#_?>tx4NPbuN*F=sD z=Q*iP>=E}nYVXq`=l^3G?vgMkTJkwa^tr-6qv^k{>7SD@&os_+PNAfCh1*pAS}iYg zJlY3mn}&afI*^0a33q8YrgE9@L)r_R=M)(y<__O3axNs!b4Qh?@4ydPUL#@re@OMc zL(6|f{of{G{C$(kuSk0Szol|H@5H}^$|YLDMXLWL$M%ZqDSnKnJ&?(E` ziGD5w&U3>K6yCQcp7h^-Ur#up`u~AEGA^z_{b6n?JM8?f?8Pq?+4}#UfIIBZkbfg1 zEbUG1^jk9W-IwnD^bf*Bx4Rw)`L4S-PIo>t1b z{&0+`YHF&i*z%Ut-YxMsBpwcRu+uZ&&69ik(sM618fnp&`N@~@*Y&Oa(hJa-{t219 zRVBl6(lneu={-I+&1-hbPRzL(>t`KsQh%lB_(5qTx#Q`yg_L)g^75CpIOX+vpI#>?6pOPH<-NSu+O_~(#c_OgW> zCH#w%KTPk_zxlw&Pq^Qw%XcuGcj`WUr!MceaXat(bNSAQJB@jNZoYLPebc}D_PxBf zmww=%I!-#?ldt&VHy;R|c;(rfh+o6|{8#a@pgnUeHi zcF6fXQpxpBpP}CV4as)G6_b%+ss6|~81`h&CbUeEwxUU0Ma=gW805j{6jEPHFu%QN zKgcc@zaN_sRVu&bKM1?I%GB(N>}1=YWBz!Fmqp(5uE-&G3d8M*ELlZcuQ6P+a>||l z++K2-=T{al{b7}NkOmj^uHDXJuVlVqS@iZ!Lncnv!y4mdKdy4U*UHi_?~P^Ao5d{s zA(eaOZ&$fj`MQuF;+E_j#CWvR(2{wapCrB+Ho$tg2f57O3@w?rnf8=u#L%9}WFAXyU87Tm z)&vwgFNxvN+|kEq3GXiXoaBoQ3RiXg;3J1g}0C{XlN~PkV$aLmq9T(mo2UVJQ1y2#UN9ialu`<#{DJZmNT@eLO>{ zPtwZ##dbTW*k#coLn{bhOA`jL=Q)nR&4fiC zI_&nzO;Geb2t#lql>BVl?TpgyD0=RNz;5SEz)HeX@Bo~EwQvwtz{2!>Bg&8x*!cp1@XkOWRO}BFg#v-14a`FvSfKUQ49gl1Owi)m7w9ME zLZFBB`9L@88UGd9X%qfwT5%`+30iI^{Zq8!$~?`?SZufJnlWJA1s4ivzbzPKeST#( zvoa?NrV9#IOcqQPTqbU;V7y>;;L6I`mFQbJz0x0;TA3i#)XK{%gMsmt6Kr2x)w_z8 zW9Dn7ZFtovvo;T}iZfHQ%-2lI@v1?#=U2%WDtx{u>Ah#cPr)xUa8-|NWL|6Y~L z_aa1pT=oAp@e(dnxqQDw?8P+y8m*6*%Ae5uAr0H(!pPsQ;a!rSZKwXfE9F7gu*zrH zc8Bfxpwa2(!0XHCiV&MCY>yo#U4K#&ilh}5$6tnLc{X?60j{0>Q2<^h*Q=4qC8bm#qKG$Z_n z;@?`zqv@ZMFh9`F`@&b)fA_79`=oz^EPt%wehojvaV&CYzH1rpC}C&+epJJqn!a4} z`{O?6zMG&O9?$?(}kAy2J0x(03*y{IeP9GsgwW{jyu%mon^2bGOH=jW3JLYf{9DauF}J zi$UfSY z)T6HgGs(L9j@o?{TJp|jTT#wbu}nUuGvB6O^W>X1*3PuF*>dfq+nHt7?blK|LGZRC zzY8zB$2=~tmxP=E&$b?UtBwuSW8M{GzlBRBIC2fcCDZnOYOgLn1hOWrf#210Ama$9 zpM{CZ?rO2UY`HqJJ6zCVBb=rs^8|5qOfY`z$aKWC)SY?ZX}-a#VK*S$}V5U0C`J<}q?LAhF7 z2s3Vcf$0sVa$H>yja|O4u$wePul3}NRg;)QcS=A@+mt>Lm2BNS2mgJ+oBeLa-_3v?< z`9(W5&)ev8FKR9srTRSk_w;DtN;F3)&sh@HjDNCg_|Nb!fBzomdHsm$TfF~Kva5@o zBXgcd=XtqD^~Ke{Zv102YjN+7T>X0nbq8+Mob^0&x)+c7^X%W_JP#MElAm0fzGR^@ z%Nx}5VOI6^qfhq71m(S&{yp=m&)JE+JX72Imxzo*)3&Jf=h?r_~=u^aYmmK`p3M=_g&8So`>0<`H=s^i93CE-z2-Qj`ka|`^G$A`j^NU zV96`}OPqc?GS=7Wi{gy;HTIo8HfAhv;!dX@jWf@s^heo`@3r)!+4o_}@?QL1@9qm@ z^!V*^h#y_I(w`(Kb8w>DzxzvFysDG_P*P5gv-RQ|<+ICR%9!47W?x3X87HrqYcth1 z#z%jcjr3jlD(S^1>Bl1ckLbS=`aaoO<~Za}Qr@g3Z$B9(-?Z;$n6NW%H*Up;R%f(!~vMSFV;eLrne2H6@Yx^qG zKckhEt0PLb?8bQR%&L!MM!3Swu5I~kHvBmt~UwT=Ev(uji4onU#M=<^250 zlJ=V|5%VhNS|>}E+=;0-@+|$*??4vXT4l+~FZ~u|@zQ@>b-8$N9X!XEb312X@x*>Ix*8hUGkK>)h!^Sqa2R+SD z>>Y;O`b8TIttb?G5h(UbA?@LIe+y_y`yh?z(U74f?Gf@QRAgusLb12juu=M5M9?z_ zW!~6nDEcQgehi8qBanM1d)`@S&o|3G({bs40UP_F%$M2+xo?Zc46R}1Q0xaGzyEgs3TQ2`ucZ95a1WeTPC@SJ?EVzc?oYun5gj8Q z+T+c+-;2fxL%Sb^)W;BEssBMJ`Yu56vlB*OyRrp}Ux%Ui6@_v<)EQb4D01q=mX|=$ z7lNEup5w{!E!oa5{SPGleXs~_fE+V+{{u-!KO?)J1h=&7x(IKA;-~aW5I?2=K|Op3 zieC~R(fAOQapIy^;zh6YZ-~Rqa2SgHL0AI&A-B-$V(<~z3m=6&kY{we--E<=5q=no zy_!Q2}`+!+*{k_d=Q36#NR4e2@@vYs<<+y z>{2!>Bg&8x*!i=^p_?8I(qCb9)_0|Yfg%5}j7eWHvZ7$cz>2{YLwrp-wxW+|X{8Ut z>OicZuYg%@3u5$L=q=wVxWGcbYe%1iWPxUjN^ehlYVUZC%S^m*WG&jkz8 z*J0)O%D>=Xl=gIIS;cdkJN!BhGHJ7$4VV<)Vq4nVo#*#oko<(5_IkU$nY2@y{+~qd z3jdkt!=CI%SzZ!-gq`dB8L`j5(;okfifFNW5mhw4b`7e`LC;fpN30Sf4zqP zUHu)@{C}(YrQK7OW19cCh9zG7bFR}bsXtDA?2s^d84ZN8}vPA+f&_FNd=H5&!ORw}vAs|3fJs|DRBM@7C~NYd9id{QIQp zze&Pu|Afjvr}mlf$X@Jm?QFkW$`(0{}>axSb8vZ|`j~@=_eZ&U27`VcNB43;8 z|8P#iTwt8{1LG)^_Ianie?i0b>d(A}yEOdg_$BT2GsMgCZ~RNxxlg!L(i4_^vNS{8 zw8Nj^cyouX4Ef6$VVT##o&Gb}cZa(&)0Z@v%fU&8lcO^f%{4g0q}u^YZ!b@0P7?0>u0u>Y(>33Tk=JQSb$nS$yY!-8HqFxnmAm!IiFLIZI#KBjRrwnz(_4X4P0cyV?UXmG zv3W_kGA0(tp+CD`)1Awa#c|2iNS)rEY#RDf(-NdhO^ch;Vw|TDFn=R3Z((w`!HK|{=N1r`?q&?X-DmM_<+CCbL z+P5Le`GlP?w@p{oJ~~^R(#NfXum27D?6A!CQAbag-rV%?@Ta$cwgJ8UGR9ah)}Gn^ zkVz{2qh%@NA=JHyukK~B_RM)6PGy-l@b#7%|4L4BzegNq3RPr-UWjKpPV)&!jm(^% zcvk)SAL?HZFBRNNwtvZ{Jv&)u``)1DpXL5mmU!odmdI|Sui;E`zhsox{zbP3h~{b^9aeq3`>>Y=^tqSp^4j`5+ecqfeR}x$ z-nTS;$x6&DZ)k_{rcn1sT+7=|dEe)DRJWb_^P2ylRQ+)(X`)v5M`!XSqa(64sy@&5 zQK^4fc$Bi21o|?T41M|AN9$ByoM$6hX4Jn@{CnO+rR@?qyyRFg_IZ6$z}rKXt^AAO z=C|`q%SA*oNxGtU^X$*L-1%R9z8EircqB`NuN1b+2 z@$GhPTaRnyr(d!CyzL{g!0s=l+F;Gx0GaKtalR=iZJhzySpCew9P!=v zC7(xIXuh`a8~a+0$^Sh2TK4me{dvzvOnqNjVXi}Q_xXKWW?u`_Ml=JU0>q*A-;9}Qr`rdow4%1h{J-Y$nOyVKn`?tV0nyWiB~ZiU^S zC-9MG`K@ssdpC}YAI;+;*Y(JKjNCXbel(AZ?|sVuMX&FP|0{hR=jiw7^iPy~W&3{l z7WtNSs{f$eugh>|02@fA^Po1+)Ik{I0#ieS3x9_Xl#X?GwFF z`ag;u=YC)8zC!=XdGuExwxfBVh1#l^1#-x!xP zLjm8=zwqze7dT~e`ZUhm68W~dmxz4(Vf@|g5B|d^{JulEz9~-KzE|!A5-W;q-Dmht zxifd#4BrVCdpFLz>vi7!;GXT=_hd46+HE}R$v#O_1utlEM?rwIrsN+Pd6jS8TWN^EedfR5^jWFT@kdeHO@8k#e2@2od+&JT8g%3L&fMGn-~5i-eGR&C50n}YW}X+!xG<+JL9R{zaqS-ed9Od8 zaJ@%$?tdcO|H!@1wcca@M~pj@=Rf(s-nP8Pon3D`x#oht-ZpNOC3UTkdlct-;an>c zyu+~HU%Z|1oGZ+D&Kvv1d#r7)`nqw9-8jaiJx+cz^gZKsA9sA?7`t(d-8ja~eeP0z z!@SNHe(OHTzbrTS1E`0*^AWsE@8NxX2I+Wf$FWmPoB=3$QC|%I=`86BR-Qu*U7WTkNb|CK7HhE^7Rl+$LB-Np5$vGPPxR@ zy{AqccYAvB?1|@EPfI3|WT(wx%dPI<$&S_+T2JTJsKRum8o7wx+EZtrJKmaGt&yc` zHE}tVX71zMJ2U4_OeOWu>$%e;XP%uU;>`Wv#Ce#?QO}aYyD~+ZU5Tk!4?C$E_et7R zkl8dOBJ%*v8L4SA4tP6hMqHZKESFr$vt(`?+2>8lR<=xYdhQ=PucuUVr|&*HOL~+m zU6$|3btEv?X1t^X8b6+3Q`q!akWN20w7YTrYM$ z`E*muu`}&QI*ztAy?D0uZ0oN3sTjLDG!x!u>xx{JGIHhCmaLMiQ|ro}TYsunug-uw ze{Ks&7p}5q-1)_Vdsb#=vLiW0&8~^K9b&J#Q!jT9N79rnYJ0C;gV$mZ4U1d3js@K7 z*0reR7q7W|Xjt5e+ox;XfiJpsEo!;tn#+fV#jUt~y2kRgxOHJUeJM!~W``K3<6ges z=}X!8})gke%v+iqjo&F%P!l` z^6a0QBQjI!gi|w2q^Dorypb|K_QrCf27VAV5K*J{80{Z~12=5mr~zsqlBX7$U9xVr zna85Q6=iQqyetF!=aMr9#a?sNBo{4z=jze@G_p zVDa+bncq;SZ^-h0MDu&uuhkm$vOlZxQGCc%ze74t26KqYl4XBFHOj5H@lh zA9E`AvVTrbTrc}2OfD;nSNX4~yn{5k>^I+PXZI}sjLN<2U%bua_d0)z*BiN4`8!qa zRet%1w=7=v2UPA={`Naeey{RRtK7@}aTyWE;$^=`Z*slL->>p|bmXf4d6j$F@4Cx2 z?`eNClM&0}RsLC(w~;27{f5`r*_}CSvd)iwmFsTGI)6u0t{JoB@kQjLi`ZYU7hbKV zEd85RF7?Zj<^MUAd->n9NdCkk_U9MLUnd_jW%06qSmj>+52)O${G*HHU(e*x`Rtdd z+{=Ea%DwFOERsL5i2b=m^4H#H{P(hdSmj>+52)O${^N_}FAU|kU!rm^`<*KHvVUQb z{FhbkRsOj}^4D(k*^8I`29-5n`|(Bc7v7)WezD5E?02Z#%l?H$@?T!W{_G<8 zBM%t=z3exr+{^!dm3!6y$RhdI7U#ELta2~=9V+*--@QowsYUExLH?rOw`B&tnfdvr z4XsJoPW%`=3x{EY-xnP+vVyBCaLmx^g?vN&_(j9U^HA(`!9miUGql>F z*lB@c=Maoyr{2)2gTG5ut)Ufxze9MZp;ZaRPN`vI2#TEzkOBJ9B10<(#m)lzOYB^M zZ^X`wp+*00`HhZVHngT7gI=SPhSoR~J7b28!%*xD!4H#e(9r6GVy731oo;v#JLe6p zbFiQEorYEi{B6SRhE^LCJ1vHdhoIQ0hp!`D)X>@q#ZD;{J0bWc>})W!*2CW-eW9VX z7JiU$(9rThv9rMW0~@bEu`>gIlXTOD))W*w<5293z}I7E*w7k;zd`x|L#rSDI^jM; z>kJ6PZ?ShQ0$BwHjY5CGYof< zZphH;gJP!_ik)uwEOyQtTIb-ekiOH<>VW@+aJ!+^2E|T`VdEhvcIx3p(nSre2oyV& zQ0x@L*I_4QXcfUO+m3U4#mz0JcONL zLu(NBkbc0>>W9BbxX;kK1jSCTVPiLx@|=giK)NnNs{@LiHYj!)U>$Z28Cp?zf%J8T zRxSKF!VyC&48=~RVPi2AJ0Vy?x($ZbS}1mWQ0&ZdAMs}FTrsq!;m?vjVQ5{3%ugDf zGPEY3*cmr$9D!nI82$|Dh77HKD0VJEv2y`Fft_wcs|)@#>CYKjo$%d+I}EMkQ0%lB zHa0-9a|muEUA>_dfnui;ik)J}9Qx6ap;ZLmMf&xIRw3*nyw=bvfMUmI*f`65o!Geo ze~NT7hSp^$b|#?MiNnXSGh%2B!Jj1kprJJY&k^o7v|>=~TrzCD0L4x>8Lu&@UO!{dhFEX^&L;40r z3k|Ix6gvfmjdMI7iJe)vmULGPt;x@3DOT5S_AN{g!>Jxn8ah} zl40WoD0aHxkCX1aq16e+&T%Mq4#QgPG#Fa-@EGZ%hE^SXfpD#%wG)b+uwi2f6g$Om z1?fVDRv{ES1yJnF@m%{Pc4iH&8TdTurwy$HY$1Hv(3*r|XTq>?7>b=Cc$9R5hE^XG zJH1fsbi;kvId5p4gU^w^)6nXG&4k+xtu`ojS_~Tx!PDp|g&nX2+U0`{;E8(Wj{QF{F3rKY{JhjL+hMS{4}&W;E#!)hE^N2{WNTBfTAy|EP+xF zg;4wmDi`iD<(Pv~j>}N;O~D}gCk?Gp$lScqxS=%y8<7tiT0`(Hga-|+eklI*88*hC z=sgF;k2WZNG%F85sm~}BKX$@5qc3b|m8!f%JVJP)g0_A?b*wEUb^7Se&fTC}K_kmLX^M+Oeirx_@`i7wB z8-NE%*KcU`L8Kwa(5i*9efh$~|RhO~N|zO&D5Z@NvSU zhSms_at|9e4no^cDCO>iVy9i%0>#h6(DoBb`UsTz-)U%VhEo3}hE_2=fIMVqZGg3e ziwvzoD1NLpYz#utJI(uh@nZstA7jc9D1Hn<@uLs!Lto6$>Q#A<%DbTG>x5GO9fsCn zD0;(C^p!%<(P$1jwvYlCZX(~2}3ImW&eyATElQR z@*zWOP~r&>7+QT${D~PhUV?UgLh+*oiXVrS_0T?^q4*JoJJDBZXl+(`vC7v&(YF@L z{s|gdv$QXX-f<}UMxp47L)kwghSo5Y{WD}}$@k$UUzf5Civ9+;n{ppAwCZ7)d{INI z7FH9E7+PT{<*qbr+zf3$p_F@$_BF9{MVWx&=M=R4gpz&)O8pNTTK!P!zt7N$!7AjJ z46R;RN%*3nbpeVW-G+_lq3CUf;ztyUAGOLbw2x;feuQ8J`ZgF^>s7v1{PZXqfq>*h4%3P%dk^vXqCcJ!kZ1P5R~*q zP|~l5+mII;T5I7}!a+l8j+=8ye+5eV87S$e4Xp%}^p_2-K`8atr|eaBLn+sJ!^T=D z<=&~RRBl$ThoUE_oTWYY2>bPlp)~`yh#!U)b5ZyehfqLqaT)_ug}oBr1Fa@KMzIUIVi_jr=hhOir!-72IYF?!c8XM zta1uAQm#ouYXUxmzHviq3_eJB)X*A%Qm$dc#sMgP#FXctl&=MfABUCoP|8;arF^AO z@@VD(ABrC_ zD1P)ndH-?2&^oX3b1FX$MPCb)dTutfLAwBFFFgW`X!VdG9HdNx4uzW|E<1&j;jyR_oJe79Eon}Cvj97;Wo8QR|umwIH5 zWT{VU5OQk~9Wb=|AwO}^K11sg6hC?m8!tl9+YZH#!%*xWQr1E7BLc;bQpiu0{k?E# ze=l6*8&ode1s8nIVjiXyWt?b z3-+r#rt)scv9YcT@-5$Wa-Ej^?J948cMz_Jx5GM>M^s({*ApLtx4|Nn7ph#oQ+zA& za=m^voPnZ00mZ*D$T7Jt4sU_-onw&?s=OESz3O#6@MhSp@-CIP!L`IU!&kuumDj60 z4A&4}3U7iXDi5hV2!q7?;A%KuVC+kOQ1NdHu7VSAB^*$E%J!UOW+*wA^0z_ zNackppXZ|Y&&1EdZ$Y_^Oa273_dlE^J`Vp04y#gOu^b_!l#E(HqABU1Y20u@HFO>8> zP|~-sSQ5Fdt;z7$IOLO4o1$C@4Q)A$6t|C7X120MNNO8P+LEKu!8tD z*hhS`#y7xn;_G3I_&SY`z%t^)@B_q`YJ3T#uGfX&`-v~o_(Hgi_#k{A@ji{8=lI-8 z{4D$>;%A_gD*?B_Dfk}ZCp3NxZYDksf1dbZjUR-M65kKIiH~V~FMNdf9(bPkZjJAP z4-?-B-${JC#<#%|;+x?+h;PvNdbo-BI`|XBM>IYRA0oaKzC?V9#)sg8#23Lc#20FO z5Ec{fgQtj>^HRz?3m<@TULGetq487je&Q!!8}VZrABP)>ABL^O4{Cfr3=toLM~Ls$ z_#SvK@y+lbh_8ooT-Cw9BpiX<1FQ?fzk#JterHSIn_vk3H7tVi`(6mSS6CN>lHLd9 zcUaEnH^5ma>1W^!Ou*N}DJbbDp!{Bs!Pmk#l=Q<;?iU8(e%KEseGGm9_QJie2TJ;G z_;uI?cfn35>D!_F?zh3mU^A5T4e;+^J=_lKprnsLxi1LAa##u_eF>a~A@~R^f|9-v z{!bW$o1hO$`gzXZufbXP0Ho}8`ULzGVY$A9-~^QPWALjm4mZGIDEbHCCtyFk3&x3xUcq?p&lD-WlU^C?6V&4Zz`g+12hjs8(Fajlg7|Q)tDdg6{ zz7LZ0A;NOMQv@lhef^U3LBeuhCZz7{>(>>+v9)%(Rb9$vWkeZL`jiQrK<}!!GN$ZO zHY+2_kkY42tkL|+n6gXRtc)l_N}n=uljc{(lwHbZWkeZL`jiPO!1iAmQ+6qvl@Vn~ z=~E_FYkp-+*`;h&MwB6?Pnlq6+4hw&WtXy98BvCmK4oI1=2ym)UCL%W^0lnJiq zwtZzx*`;h&MwB6?PnqC)Xy;ePlwHbZWkeZL`jiQ-KX!g)OxdMuRz{Q|rB9h4vz=cV zQ+6qvl@Vn~=~E^+{@Gj=SH_fG%4TIm8Bzi}Umy^v4FuK~1p=4-3IFQAn17sg+&}8~ z2ZsG|e}MIfKNuMB4-!8gSO}~R%m(HH{=hU0u$~D715<&^Y!4I+76bxa1?O3htsGyu zIxw_ynDxNQ!Il0%-^ziN0oMI1gMr?amx!NUHM44U;PR@(Dt};N)#X(I)|0D(fzefC zY%i?t3KFw=a&;ikd()+xRtL`C)XjP!*maXXFc(}vIv1P|1_Lv}E5X%)(KTahRtHAb z#Mk%(Lu*FX1XvHR2?qMt46r@7c782htsQ6Gv+m+L^xWLVdhX`=oBe?+H_zQ1U_Ek;MUcF zi?{Z&zHn>Lt^UCITQA%iVBLLdFfjk>g;%c*Ox`wi+v>phZ4h-bMnrD73c5jzU#tW?3ue}?m~XoG~1W&O0e#^`{LdH zK=<7}cL!KsU_EsAFfjvn53xOP_u$;BpM*<1Hdv)xzRUrbFE_Z8!Lag25B!M+FC>&5eIk31BAXmz0f zp#j#hhx#7!2YMfhJ;YJ<(4~ihfeR1y5I?o)@}|{+iA|H6*h8BpHnE2`jcsBNZ5m-a zUNTz3`A`xsp*BiJWc~2S!yE?>_pqLPWa<&lnMX!h4?i;Uh(9p+$nYZp)!VLMjUS4FK>#j2>)s!LUztJU4rq_0{aezt0!_}Qwt zD$-ZYusv8kgmkugj`ei)Of|=8^>j7IX?3ESSJ)nYYy|1- zV{@#hADbb~<;SKU!{^5mkKyxUlWbqw8QaNT*g3^|Z0Gn+&V`+0JE{MjqdPelb`Gmp^b}*Tr4zuU$R6f`P7G z=h>dvHHox)_l4c~ysK+BKJQu}es0%1X=Zj^VS8xzFw!f#XIUq9Pm^Y9cVc&d_2u2c z!1(S7wl76u5qyqJu^x+zNANi^7QyGpXat`l!)$l$IlqTvW6ucdfjxtJxSH=7*uzn} zr+*Ju^F5c?p4oE+X>4!bUVPr$yBDALUfhe%dwcfc^WO7pkMEs8dVXK`K8}sO3#6Id zJ5T)V-Z|1t@10?LXx}i>EBj_yC-zP6!{>d8efYfZ@;-dtH^Fvq?WJ1I*4jzdqqSqT z{=i7>Xf0=YZM-%Z7_1#)yKDdX{rJ3pg!RDw!TtEWe_%g8@9*D_&-*X2J-vSh>7@g) z1FHi)2QD7q>Uf~%0N14h7Y+mi3;Vm+9zQUF^!(%9kK^-!1=7qOm?wVrz#M6&56rMV z`1lagna8iNzWjLNaerX)@ym~MW<5UjcrY;b_&D3Wb(iY!xo(p6Xx&&HKG%)b;d5QQ z4xj6W*j}jXI>VQDm#<#`En4>DV9!bMf-;diONZX@U&F>Nk6LTSB6aZiiZEF#N;p3{F^ktG&aie+51d-XWaPZ^(HL$U$P{m z{MZX>`ajufvq1yR|;Mc#e=|m8K7C`eRz3wLGWDG9NPbTQux{ z$k;1Ydq1oGMl}DBrgz3|zeCICjMIKu)7NSG7A@c5wPKBDVR`uE86#F>!cWWorar@J z@1Nyi8F|0T-%h;9BPzeAm@xI}jO%{89&dFj|FRxG^=f}wkM|b)Ns_Tbdb~U1y4$pV z8Z>>M9^bKBjDJsUGX4yzKR4;|R`2+`(fH$x^Nw#Z{x+!mPqaRoRsZj4`g4Uwzw{H7 z@;KwX|6fhtrs;3f;8^jf7(?Z()#RDeU+Nt8Rz|Hx0~`hDTlx=>B!aanGrL zgDU@(*O>ZhfU##JBI^a)M>1ufsGrhkW)Z#{Zs`FA;f zC||$YTcP=9H2?q7@|9@%=&OxAXB_qGwLWGweZAW2(e!`0)}&8p_`hiR2G!nI)!w}3 z->3HGH2rUBeb#c_m!(hBOXnV0ZlyDZT^}m{Q!U?sh7(%8VYT3$TepU0AX#QR;UxTJUBri9~->>1!uh;ae_4sN~`LnwJ`ZfH1Enhmty$tU4P z4ZlX~qKC1HH z6aC0Prt(i=M;arBYmB~0Ii6hMPwW19QS(0|`fkEMP5;M|-W7gX{3RUNVf4LO{e7qA z|0ms_zoOxHImeHNE4BVVqv3CffB64(4G(E~R+3JZ9S<7$T^fGB)}QE+<)iBV>oojh zy1$NTc#rz`QyL!OJX^Ph=O6Vyjt+PDmo?nBlMR+m@t^vf(E7X=JyL)FOY7$w;y?1Q ztNho*f8?K5`FnJKY~VbTrC0n#KBn?Ry8kOw{;2qi{4**)srG+dze=afpeO~2%ruJX2^3!Vn z3o3uR+W$qBA6NSmDvzjrxo?)`dvbnJ{x7Qh&1!#5sgYk+`+utP(^DnG3D|ID#3 z*9Z1byUO1$=QsK%RlZC7LH+@i@1q_>{^u$`sMn9bSNVhD5ArXm{G;Lz`EM>W{(VsV zLH=cxKc)8TRoL zlzNtBr`o@)@^5JUH>&(^bpQXg%3E}Q{EdeFdVXKh^XcQ_&rS59((~zv_`~`9-&7tJ ze+Z9g_;(*P;V)|VpY(j5(QuLYNBRW~4~c(-Z>8R4`EBu!@Ky~+#6QAO4S!zt58*Zq z|1^3e{4*Nfs{Zw9*lw&wKC0oLSO31O;Su%kiiQ)izevA|dXS|@{kvboXVky2hJ)%~ zy@r1kJ(B-~hF`D#UC{6v_3t+{{5d(ENk6RNr`5kn4L^Yoa{cPp>(!kap4}zhF=kEn z|EuVOvfG4zCL{c!)c0E6PpJGhDc{YEDbsKpy6;;R_a*fBkalVbJNFL@++Rpo2D8ZW z9?k^`7ota&36;lH-lySa4Sy?O(ucS&ljX0ucar?_Tr7*+OG!AP;U_d4VZX?-UhTy+ z{881{OgUwFtA-O{6PErPqA#T3Pf)iKj%)f34M&{wN5fs3{yl161`)|3{m&(Tz4|wJ zlL-%M_?!=%qTzN8uh#mV(C|A|Uytg)SHp$s&&Ra9_3DrG_ZR!Kn*KwpO}Jgt z@6hm|rr)dnm1_Dos=kQsudi{eh`v(YKhJA8rt*h1+^%7Hk7nD~^uMd&9u0p`(@$vn z?-r5XANM))vbAY=lH)>_^BSJOFIn!m%cOVaY5O%Lgrw^$eUQ0d6^7|a0Dzd|} z?GC?#fIGY|BTV18H2GUH^!-wX{Bits>pPv1{>>Tk@l1J!zV~Fv4`zgYO;7H9?Y^dc z(LGN;-BjH4#M67^TWr226J6Z2Z_lCqk3ad;o0<;njni5WR+4$mmz|x>D1QC^ zLv>HqK7F-H(rl;C(7h~+nOU1!TF-QxKJ~Vyw$|hAt*4uwJAUfuTbo+LO%>&5sDgar z%F;8w<4s%1o>hZS*k7jeHJy6y$B#ChZtXa7>?F$e+PaBrJ=)Q9j z@UVNP;|P8nZF_6e^GA-^F~&38J$m|Bd&jBMO_im_&*#nv`4W;}K7h3Jv@J_aTaMnn zdDAwvR#Z0m-Cw-1o$>Q29{+B$mXF5db8QJK844=5FLIdqm!qvbr#p-8pNgE>lKa>1tsv~2 zu$859(w0^0S(~bXyhmq6x%*W2=S|zxT2+-^SLKzQ$6_hZcg-@+*s`kpC(E^(u)mY^ z{WW2KN-MvK?G;V_b>>T9k3)Ist6HBkerZ|fqUsqL2?ki$`zs-e>dkDVMC>JSn->@sJ8%agp zCtb#swY*eSy%HZ2oGfyfyAh8IO{UuwO?*RBs!#Hyid|m0#Qaic z)IIllsmx{N9+_SDp4*#VVo#Nl&~>|O-|KQC`^3}xPMti;EpY48a!0GtcETfPxr=Q* z-g@Lr>r<^AXHTDe=E(80t!Y~Jq>{9xrAfPMPCXkWGuv9_KDw&v(YK`JB_2;L4~Jgn zBS9YDL~hiFf@3FNI`vlkYiinFvvj5A*EaPr;%sfpanWeY`c`cYrQxN!==s6m9BQkV zuGZ@V&pEVKE?uj9s(2~oU&em-_yBjdpWByFsTp63&Q?}cy7WS4eLgu`-StIKyZ zZePY8PXBCl4xg5Bo@9QwIa^!Ra%(@=_p@`TEn9lUWuDAWp3I?d8E$%<&bic9FXM3W zJfU+bu3E-U@;aq+>RrYenDeC0sdO2Y>v3A=RJ)AI%{Z}hsw-dmA(eG%=Tf+R`_dJr zPVStVma(_fPw!mXs+Mu?WS-zT^`)0H?PcA=p;IT{Am88Kk>|I1NA~%cana7BGxO}u zp{#1j4tkv0xpbyqaq~Fnd0ywzntuA_(duM_;asZHFQ|Du$~=E_C`-Mxe&Otq z(=B>8e&WmvPq&^V)YNqJRC}&B?a$?t@vcnYl0Usax_{rHC!cD1YX5=#PwjtV-~OkY zcmr=g3rO=q(=&UXYC80$`u)jR)AaDfp4X?Mk_k<$ms8@ASJQy|rG50^(}&#t6gT;n zeyR3);8=!=%xhNTvh!x&OfN%)=M`x=et2DgmZKx*^=3H=JT5QGQIT;qSx(lhi^p;@ zr>+&t$(4R-SWeE&E5UN|dK~iH3@qcQ%RK0>CU@3hzdR+L2mbQZcpdu7(~|SxU!Dq& z!+&{7GERWyWzISUmX|$s5-cxY`f0GdyqPCLR_;7MryeK5j*RmlL&MA7uc;Qv>Arc+ zJbxC+Dn^%?CEHro`L<-E%gyPw?RlCm!TQzab=&tkzn5VCDzmz+=e#Z~!SvPSbKCW} zm@L8a)#Y^C&bS6G!RGRExNT)!vX)?Nxq007QrEa87+P{-w}tep;S#JYD}&oo=CyMP zwsK@S-f@C%Y330i*WHP zm!PcDOX4Xgs|e?-H>4grtK7+F7drd-a4QKktGimt%97C;rAi6X(w9nl`=DTh%C2^T zHOZ}Ta;rMIRV7=wj-c&cg0jkFW_v4F=CTT}+@69m#@XaKFp+BU%F0rksV#b&=E+Su zs-(&(s=MN9a>j;p##ZNytxCpb?5XWug0jl0eBL6>y-&(2^5#RDna_Uxv9*jb|CthV zok$7Xby8NA*A7zEmX@hB8J$rN#8dm*$z&g&HOVce2GF?b^+=z_%JRm&l#LwT2_|S&Q=~ZW%N4F?I7{&hYCmPcC997Y&d6Z zbuu>dB=8b!_Y#yXtV$Anl6`D zs!MM_@q9i`>y6Q5YrSqwJVxEpoitCyIUZ1RI9YYwn|ajRB{v3mKT+m#_qsOqEVp7k zp96DvdcB%^^jNxX4L+*x+M9e-(USLb<}+EYI=f!YKKQ0*c};RFoZPCGtz5tDRoMb_ z=dwLppbt2eNv-x)F0Ex1Ub$_7`E@Sml9Bo`%5{H^5`G!VlJ?5%&71~PX&4Qe=VwS& zIfT)3;e1lzp?WtC<597dXZ&y`h(#9Y^tY24*0E6=MKsa?Cd z^Ohx*+gqvq)TBp2X)<3%4H&hhzT^Aq4_4MRnT>L1BdifM&PLeTsCG80oQ>_yMuoFc z=4@1}nhIxwF8sz)O_gqhoeesG8xg(a&Bk_Tqte+ZcQzQ}*s!8&%H6c4wo~*fK)v!EBDeZ z0=aIalCqiSn&3)Un$#KHvv+?qHRP_Cv4#(nZ7UClQcG!SGi0{SnkucTtPF*Clb}hO z*QC0>+V@jiPuU|F&FTx^`Nw~Eh62iXLxz3&W*N)s3-QmwFiGE(dmy46n_AWDrp&u8 zixXyes89ZNxFxrJ9j%=mlEN%aO^5b39CAY0bo99-U9N5P9pzQnv6C-oq?bOXMX{Gm zeNsgCg1+b73Y(g0_Z-@jN)ggchozKPirma9Qfax*9;-m^y~Pj$1S#4$|CWdZIoO zNVo666RjO~4p+Jm+Zptvk#a^)Q4T$68FxUZ8;SspQ`R6>bztI3F&gTh{bD}t5z6ECgKJ<$rmJjhS@@5IJtPnZJuyej`%m{y%G%~-NbN;-E zP5C_$JF@&F{}Oielif)wV%raia~7Gl!yVRpWb+Iu^G}$!Y8uUB-kxlcxm32EXzzGi z)6pYG+vG(AllAdditions) + +/** + Wait until all of the given promises are fulfilled. + If one of the given promises is rejected, then the returned promise is rejected with same error. + If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, + it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly. + Promises resolved with `nil` become `NSNull` instances in the resulting array. + + @param promises Promises to wait for. + @return Promise of an array containing the values of input promises in the same order. + */ ++ (FBLPromise *)all:(NSArray *)promises NS_SWIFT_UNAVAILABLE(""); + +/** + Wait until all of the given promises are fulfilled. + If one of the given promises is rejected, then the returned promise is rejected with same error. + If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, + it's implicitly considered a pre-fulfilled or pre-rejected FBLPromise correspondingly. + Promises resolved with `nil` become `NSNull` instances in the resulting array. + + @param queue A queue to dispatch on. + @param promises Promises to wait for. + @return Promise of an array containing the values of input promises in the same order. + */ ++ (FBLPromise *)onQueue:(dispatch_queue_t)queue + all:(NSArray *)promises NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `all` operators. + Usage: FBLPromise.all(@[ ... ]) + */ +@interface FBLPromise(DotSyntax_AllAdditions) + ++ (FBLPromise * (^)(NSArray *))all FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise * (^)(dispatch_queue_t, NSArray *))allOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Always.h b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Always.h new file mode 100644 index 0000000..13000f5 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Always.h @@ -0,0 +1,54 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(AlwaysAdditions) + +typedef void (^FBLPromiseAlwaysWorkBlock)(void) NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block that always executes, no matter if the receiver is rejected or fulfilled. + @return A new pending promise to be resolved with same resolution as the receiver. + */ +- (FBLPromise *)always:(FBLPromiseAlwaysWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to dispatch on. + @param work A block that always executes, no matter if the receiver is rejected or fulfilled. + @return A new pending promise to be resolved with same resolution as the receiver. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + always:(FBLPromiseAlwaysWorkBlock)work NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `always` operators. + Usage: promise.always(^{...}) + */ +@interface FBLPromise(DotSyntax_AlwaysAdditions) + +- (FBLPromise* (^)(FBLPromiseAlwaysWorkBlock))always FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise* (^)(dispatch_queue_t, FBLPromiseAlwaysWorkBlock))alwaysOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Any.h b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Any.h new file mode 100644 index 0000000..82875bf --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Any.h @@ -0,0 +1,69 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(AnyAdditions) + +/** + Waits until all of the given promises are either fulfilled or rejected. + If all promises are rejected, then the returned promise is rejected with same error + as the last one rejected. + If at least one of the promises is fulfilled, the resulting promise is fulfilled with an array of + values or `NSErrors`, matching the original order of fulfilled or rejected promises respectively. + If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, + it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly. + Promises resolved with `nil` become `NSNull` instances in the resulting array. + + @param promises Promises to wait for. + @return Promise of array containing the values or `NSError`s of input promises in the same order. + */ ++ (FBLPromise *)any:(NSArray *)promises NS_SWIFT_UNAVAILABLE(""); + +/** + Waits until all of the given promises are either fulfilled or rejected. + If all promises are rejected, then the returned promise is rejected with same error + as the last one rejected. + If at least one of the promises is fulfilled, the resulting promise is fulfilled with an array of + values or `NSError`s, matching the original order of fulfilled or rejected promises respectively. + If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, + it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly. + Promises resolved with `nil` become `NSNull` instances in the resulting array. + + @param queue A queue to dispatch on. + @param promises Promises to wait for. + @return Promise of array containing the values or `NSError`s of input promises in the same order. + */ ++ (FBLPromise *)onQueue:(dispatch_queue_t)queue + any:(NSArray *)promises NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `any` operators. + Usage: FBLPromise.any(@[ ... ]) + */ +@interface FBLPromise(DotSyntax_AnyAdditions) + ++ (FBLPromise * (^)(NSArray *))any FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise * (^)(dispatch_queue_t, NSArray *))anyOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Async.h b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Async.h new file mode 100644 index 0000000..0588a9e --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Async.h @@ -0,0 +1,60 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(AsyncAdditions) + +typedef void (^FBLPromiseFulfillBlock)(Value __nullable value) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseRejectBlock)(NSError *error) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseAsyncWorkBlock)(FBLPromiseFulfillBlock fulfill, + FBLPromiseRejectBlock reject) NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise and executes `work` block asynchronously. + + @param work A block to perform any operations needed to resolve the promise. + @return A new pending promise. + */ ++ (instancetype)async:(FBLPromiseAsyncWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise and executes `work` block asynchronously on the given queue. + + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @return A new pending promise. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + async:(FBLPromiseAsyncWorkBlock)work NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `async` operators. + Usage: FBLPromise.async(^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) { ... }) + */ +@interface FBLPromise(DotSyntax_AsyncAdditions) + ++ (FBLPromise* (^)(FBLPromiseAsyncWorkBlock))async FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, FBLPromiseAsyncWorkBlock))asyncOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Await.h b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Await.h new file mode 100644 index 0000000..c97a1ba --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Await.h @@ -0,0 +1,32 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + Waits for promise resolution. The current thread blocks until the promise is resolved. + + @param promise Promise to wait for. + @param error Error the promise was rejected with, or `nil` if the promise was fulfilled. + @return Value the promise was fulfilled with. If the promise was rejected, the return value + is always `nil`, but the error out arg is not. + */ +FOUNDATION_EXTERN id __nullable FBLPromiseAwait(FBLPromise *promise, + NSError **error) NS_REFINED_FOR_SWIFT; + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Catch.h b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Catch.h new file mode 100644 index 0000000..a9ff170 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Catch.h @@ -0,0 +1,59 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(CatchAdditions) + +typedef void (^FBLPromiseCatchWorkBlock)(NSError *error) NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise which eventually gets resolved with same resolution as the receiver. + If receiver is rejected, then `reject` block is executed asynchronously. + + @param reject A block to handle the error that receiver was rejected with. + @return A new pending promise. + */ +- (FBLPromise *)catch:(FBLPromiseCatchWorkBlock)reject NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise which eventually gets resolved with same resolution as the receiver. + If receiver is rejected, then `reject` block is executed asynchronously on the given queue. + + @param queue A queue to invoke the `reject` block on. + @param reject A block to handle the error that receiver was rejected with. + @return A new pending promise. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + catch:(FBLPromiseCatchWorkBlock)reject NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `catch` operators. + Usage: promise.catch(^(NSError *error) { ... }) + */ +@interface FBLPromise(DotSyntax_CatchAdditions) + +- (FBLPromise* (^)(FBLPromiseCatchWorkBlock))catch FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise* (^)(dispatch_queue_t, FBLPromiseCatchWorkBlock))catchOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Delay.h b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Delay.h new file mode 100644 index 0000000..557df48 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Delay.h @@ -0,0 +1,59 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(DelayAdditions) + +/** + Creates a new pending promise that fulfills with the same value as `self` after the `delay`, or + rejects with the same error immediately. + + @param interval Time to wait in seconds. + @return A new pending promise that fulfills at least `delay` seconds later than `self`, or rejects + with the same error immediately. + */ +- (FBLPromise *)delay:(NSTimeInterval)interval NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a new pending promise that fulfills with the same value as `self` after the `delay`, or + rejects with the same error immediately. + + @param queue A queue to dispatch on. + @param interval Time to wait in seconds. + @return A new pending promise that fulfills at least `delay` seconds later than `self`, or rejects + with the same error immediately. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + delay:(NSTimeInterval)interval NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `delay` operators. + Usage: promise.delay(...) + */ +@interface FBLPromise(DotSyntax_DelayAdditions) + +- (FBLPromise * (^)(NSTimeInterval))delay FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise * (^)(dispatch_queue_t, NSTimeInterval))delayOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Do.h b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Do.h new file mode 100644 index 0000000..6838e0a --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Do.h @@ -0,0 +1,55 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(DoAdditions) + +typedef id __nullable (^FBLPromiseDoWorkBlock)(void) NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise and executes `work` block asynchronously. + + @param work A block that returns a value or an error used to resolve the promise. + @return A new pending promise. + */ ++ (instancetype)do:(FBLPromiseDoWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise and executes `work` block asynchronously on the given queue. + + @param queue A queue to invoke the `work` block on. + @param work A block that returns a value or an error used to resolve the promise. + @return A new pending promise. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue do:(FBLPromiseDoWorkBlock)work NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `do` operators. + Usage: FBLPromise.doOn(queue, ^(NSError *error) { ... }) + */ +@interface FBLPromise(DotSyntax_DoAdditions) + ++ (FBLPromise * (^)(dispatch_queue_t, FBLPromiseDoWorkBlock))doOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Race.h b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Race.h new file mode 100644 index 0000000..2f67258 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Race.h @@ -0,0 +1,62 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(RaceAdditions) + +/** + Wait until any of the given promises are fulfilled. + If one of the promises is rejected, then the returned promise is rejected with same error. + If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, + it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly. + + @param promises Promises to wait for. + @return A new pending promise to be resolved with the same resolution as the first promise, among + the given ones, which was resolved. + */ ++ (instancetype)race:(NSArray *)promises NS_SWIFT_UNAVAILABLE(""); + +/** + Wait until any of the given promises are fulfilled. + If one of the promises is rejected, then the returned promise is rejected with same error. + If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, + it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly. + + @param queue A queue to dispatch on. + @param promises Promises to wait for. + @return A new pending promise to be resolved with the same resolution as the first promise, among + the given ones, which was resolved. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue race:(NSArray *)promises NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `race` operators. + Usage: FBLPromise.race(@[ ... ]) + */ +@interface FBLPromise(DotSyntax_RaceAdditions) + ++ (FBLPromise * (^)(NSArray *))race FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise * (^)(dispatch_queue_t, NSArray *))raceOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Recover.h b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Recover.h new file mode 100644 index 0000000..bb7df7e --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Recover.h @@ -0,0 +1,60 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(RecoverAdditions) + +typedef id __nullable (^FBLPromiseRecoverWorkBlock)(NSError *error) NS_SWIFT_UNAVAILABLE(""); + +/** + Provides a new promise to recover in case the receiver gets rejected. + + @param recovery A block to handle the error that the receiver was rejected with. + @return A new pending promise to use instead of the rejected one that gets resolved with resolution + returned from `recovery` block. + */ +- (FBLPromise *)recover:(FBLPromiseRecoverWorkBlock)recovery NS_SWIFT_UNAVAILABLE(""); + +/** + Provides a new promise to recover in case the receiver gets rejected. + + @param queue A queue to dispatch on. + @param recovery A block to handle the error that the receiver was rejected with. + @return A new pending promise to use instead of the rejected one that gets resolved with resolution + returned from `recovery` block. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + recover:(FBLPromiseRecoverWorkBlock)recovery NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `recover` operators. + Usage: promise.recover(^id(NSError *error) {...}) + */ +@interface FBLPromise(DotSyntax_RecoverAdditions) + +- (FBLPromise * (^)(FBLPromiseRecoverWorkBlock))recover FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise * (^)(dispatch_queue_t, FBLPromiseRecoverWorkBlock))recoverOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Reduce.h b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Reduce.h new file mode 100644 index 0000000..5bb1eee --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Reduce.h @@ -0,0 +1,71 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(ReduceAdditions) + +typedef id __nullable (^FBLPromiseReducerBlock)(Value __nullable partial, id next) + NS_SWIFT_UNAVAILABLE(""); + +/** + Sequentially reduces a collection of values to a single promise using a given combining block + and the value `self` resolves with as initial value. + + @param items An array of values to process in order. + @param reducer A block to combine an accumulating value and an element of the sequence into + the new accumulating value or a promise resolved with it, to be used in the next + call of the `reducer` or returned to the caller. + @return A new pending promise returned from the last `reducer` invocation. + Or `self` if `items` is empty. + */ +- (FBLPromise *)reduce:(NSArray *)items + combine:(FBLPromiseReducerBlock)reducer NS_SWIFT_UNAVAILABLE(""); + +/** + Sequentially reduces a collection of values to a single promise using a given combining block + and the value `self` resolves with as initial value. + + @param queue A queue to dispatch on. + @param items An array of values to process in order. + @param reducer A block to combine an accumulating value and an element of the sequence into + the new accumulating value or a promise resolved with it, to be used in the next + call of the `reducer` or returned to the caller. + @return A new pending promise returned from the last `reducer` invocation. + Or `self` if `items` is empty. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + reduce:(NSArray *)items + combine:(FBLPromiseReducerBlock)reducer NS_SWIFT_UNAVAILABLE(""); + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `reduce` operators. + Usage: promise.reduce(values, ^id(id partial, id next) { ... }) + */ +@interface FBLPromise(DotSyntax_ReduceAdditions) + +- (FBLPromise * (^)(NSArray *, FBLPromiseReducerBlock))reduce FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise * (^)(dispatch_queue_t, NSArray *, FBLPromiseReducerBlock))reduceOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Retry.h b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Retry.h new file mode 100644 index 0000000..414a17a --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Retry.h @@ -0,0 +1,165 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +/** The default number of retry attempts is 1. */ +FOUNDATION_EXTERN NSInteger const FBLPromiseRetryDefaultAttemptsCount NS_REFINED_FOR_SWIFT; + +/** The default delay interval before making a retry attempt is 1.0 second. */ +FOUNDATION_EXTERN NSTimeInterval const FBLPromiseRetryDefaultDelayInterval NS_REFINED_FOR_SWIFT; + +@interface FBLPromise(RetryAdditions) + +typedef id __nullable (^FBLPromiseRetryWorkBlock)(void) NS_SWIFT_UNAVAILABLE(""); +typedef BOOL (^FBLPromiseRetryPredicateBlock)(NSInteger, NSError *) NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise that fulfills with the same value as the promise returned from `work` + block, which executes asynchronously, or rejects with the same error after all retry attempts have + been exhausted. Defaults to `FBLPromiseRetryDefaultAttemptsCount` attempt(s) on rejection where the + `work` block is retried after a delay of `FBLPromiseRetryDefaultDelayInterval` second(s). + + @param work A block that executes asynchronously on the default queue and returns a value or an + error used to resolve the promise. + @return A new pending promise that fulfills with the same value as the promise returned from `work` + block, or rejects with the same error after all retry attempts have been exhausted. + */ ++ (instancetype)retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise that fulfills with the same value as the promise returned from `work` + block, which executes asynchronously on the given `queue`, or rejects with the same error after all + retry attempts have been exhausted. Defaults to `FBLPromiseRetryDefaultAttemptsCount` attempt(s) on + rejection where the `work` block is retried on the given `queue` after a delay of + `FBLPromiseRetryDefaultDelayInterval` second(s). + + @param queue A queue to invoke the `work` block on. + @param work A block that executes asynchronously on the given `queue` and returns a value or an + error used to resolve the promise. + @return A new pending promise that fulfills with the same value as the promise returned from `work` + block, or rejects with the same error after all retry attempts have been exhausted. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise that fulfills with the same value as the promise returned from `work` + block, which executes asynchronously, or rejects with the same error after all retry attempts have + been exhausted. + + @param count Max number of retry attempts. The `work` block will be executed once if the specified + count is less than or equal to zero. + @param work A block that executes asynchronously on the default queue and returns a value or an + error used to resolve the promise. + @return A new pending promise that fulfills with the same value as the promise returned from `work` + block, or rejects with the same error after all retry attempts have been exhausted. + */ ++ (instancetype)attempts:(NSInteger)count + retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise that fulfills with the same value as the promise returned from `work` + block, which executes asynchronously on the given `queue`, or rejects with the same error after all + retry attempts have been exhausted. + + @param queue A queue to invoke the `work` block on. + @param count Max number of retry attempts. The `work` block will be executed once if the specified + count is less than or equal to zero. + @param work A block that executes asynchronously on the given `queue` and returns a value or an + error used to resolve the promise. + @return A new pending promise that fulfills with the same value as the promise returned from `work` + block, or rejects with the same error after all retry attempts have been exhausted. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + attempts:(NSInteger)count + retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise that fulfills with the same value as the promise returned from `work` + block, which executes asynchronously, or rejects with the same error after all retry attempts have + been exhausted. On rejection, the `work` block is retried after the given delay `interval` and will + continue to retry until the number of specified attempts have been exhausted or will bail early if + the given condition is not met. + + @param count Max number of retry attempts. The `work` block will be executed once if the specified + count is less than or equal to zero. + @param interval Time to wait before the next retry attempt. + @param predicate Condition to check before the next retry attempt. The predicate block provides the + the number of remaining retry attempts and the error that the promise was rejected + with. + @param work A block that executes asynchronously on the default queue and returns a value or an + error used to resolve the promise. + @return A new pending promise that fulfills with the same value as the promise returned from `work` + block, or rejects with the same error after all retry attempts have been exhausted or if + the given condition is not met. + */ ++ (instancetype)attempts:(NSInteger)count + delay:(NSTimeInterval)interval + condition:(nullable FBLPromiseRetryPredicateBlock)predicate + retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise that fulfills with the same value as the promise returned from `work` + block, which executes asynchronously on the given `queue`, or rejects with the same error after all + retry attempts have been exhausted. On rejection, the `work` block is retried after the given + delay `interval` and will continue to retry until the number of specified attempts have been + exhausted or will bail early if the given condition is not met. + + @param queue A queue to invoke the `work` block on. + @param count Max number of retry attempts. The `work` block will be executed once if the specified + count is less than or equal to zero. + @param interval Time to wait before the next retry attempt. + @param predicate Condition to check before the next retry attempt. The predicate block provides the + the number of remaining retry attempts and the error that the promise was rejected + with. + @param work A block that executes asynchronously on the given `queue` and returns a value or an + error used to resolve the promise. + @return A new pending promise that fulfills with the same value as the promise returned from `work` + block, or rejects with the same error after all retry attempts have been exhausted or if + the given condition is not met. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + attempts:(NSInteger)count + delay:(NSTimeInterval)interval + condition:(nullable FBLPromiseRetryPredicateBlock)predicate + retry:(FBLPromiseRetryWorkBlock)work NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise+Retry` operators. + Usage: FBLPromise.retry(^id { ... }) + */ +@interface FBLPromise(DotSyntax_RetryAdditions) + ++ (FBLPromise * (^)(FBLPromiseRetryWorkBlock))retry FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise * (^)(dispatch_queue_t, FBLPromiseRetryWorkBlock))retryOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise * (^)(NSInteger, NSTimeInterval, FBLPromiseRetryPredicateBlock __nullable, + FBLPromiseRetryWorkBlock))retryAgain FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise * (^)(dispatch_queue_t, NSInteger, NSTimeInterval, + FBLPromiseRetryPredicateBlock __nullable, + FBLPromiseRetryWorkBlock))retryAgainOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Testing.h b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Testing.h new file mode 100644 index 0000000..8478ae2 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Testing.h @@ -0,0 +1,57 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + Waits for all scheduled promises blocks. + + @param timeout Maximum time to wait. + @return YES if all promises blocks have completed before the timeout and NO otherwise. + */ +FOUNDATION_EXTERN BOOL FBLWaitForPromisesWithTimeout(NSTimeInterval timeout) NS_REFINED_FOR_SWIFT; + +@interface FBLPromise(TestingAdditions) + +/** + Dispatch group for promises that is typically used to wait for all scheduled blocks. + */ +@property(class, nonatomic, readonly) dispatch_group_t dispatchGroup NS_REFINED_FOR_SWIFT; + +/** + Properties to get the current state of the promise. + */ +@property(nonatomic, readonly) BOOL isPending NS_REFINED_FOR_SWIFT; +@property(nonatomic, readonly) BOOL isFulfilled NS_REFINED_FOR_SWIFT; +@property(nonatomic, readonly) BOOL isRejected NS_REFINED_FOR_SWIFT; + +/** + Value the promise was fulfilled with. + Can be nil if the promise is still pending, was resolved with nil or after it has been rejected. + */ +@property(nonatomic, readonly, nullable) Value value NS_REFINED_FOR_SWIFT; + +/** + Error the promise was rejected with. + Can be nil if the promise is still pending or after it has been fulfilled. + */ +@property(nonatomic, readonly, nullable) NSError *error NS_REFINED_FOR_SWIFT; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Then.h b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Then.h new file mode 100644 index 0000000..32027e6 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Then.h @@ -0,0 +1,63 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(ThenAdditions) + +typedef id __nullable (^FBLPromiseThenWorkBlock)(Value __nullable value) NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise which eventually gets resolved with resolution returned from `work` + block: either value, error or another promise. The `work` block is executed asynchronously only + when the receiver is fulfilled. If receiver is rejected, the returned promise is also rejected with + the same error. + + @param work A block to handle the value that receiver was fulfilled with. + @return A new pending promise to be resolved with resolution returned from the `work` block. + */ +- (FBLPromise *)then:(FBLPromiseThenWorkBlock)work NS_SWIFT_UNAVAILABLE(""); + +/** + Creates a pending promise which eventually gets resolved with resolution returned from `work` + block: either value, error or another promise. The `work` block is executed asynchronously when the + receiver is fulfilled. If receiver is rejected, the returned promise is also rejected with the same + error. + + @param queue A queue to invoke the `work` block on. + @param work A block to handle the value that receiver was fulfilled with. + @return A new pending promise to be resolved with resolution returned from the `work` block. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + then:(FBLPromiseThenWorkBlock)work NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `then` operators. + Usage: promise.then(^id(id value) { ... }) + */ +@interface FBLPromise(DotSyntax_ThenAdditions) + +- (FBLPromise* (^)(FBLPromiseThenWorkBlock))then FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise* (^)(dispatch_queue_t, FBLPromiseThenWorkBlock))thenOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Timeout.h b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Timeout.h new file mode 100644 index 0000000..184ba16 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Timeout.h @@ -0,0 +1,57 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(TimeoutAdditions) + +/** + Waits for a promise with the specified `timeout`. + + @param interval Time to wait in seconds. + @return A new pending promise that gets either resolved with same resolution as the receiver or + rejected with `FBLPromiseErrorCodeTimedOut` error code in `FBLPromiseErrorDomain`. + */ +- (FBLPromise *)timeout:(NSTimeInterval)interval NS_SWIFT_UNAVAILABLE(""); + +/** + Waits for a promise with the specified `timeout`. + + @param queue A queue to dispatch on. + @param interval Time to wait in seconds. + @return A new pending promise that gets either resolved with same resolution as the receiver or + rejected with `FBLPromiseErrorCodeTimedOut` error code in `FBLPromiseErrorDomain`. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + timeout:(NSTimeInterval)interval NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `timeout` operators. + Usage: promise.timeout(...) + */ +@interface FBLPromise(DotSyntax_TimeoutAdditions) + +- (FBLPromise* (^)(NSTimeInterval))timeout FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise* (^)(dispatch_queue_t, NSTimeInterval))timeoutOn FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Validate.h b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Validate.h new file mode 100644 index 0000000..9dfa2f1 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Validate.h @@ -0,0 +1,60 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBLPromise(ValidateAdditions) + +typedef BOOL (^FBLPromiseValidateWorkBlock)(Value __nullable value) NS_SWIFT_UNAVAILABLE(""); + +/** + Validates a fulfilled value or rejects the value if it can not be validated. + + @param predicate An expression to validate. + @return A new pending promise that gets either resolved with same resolution as the receiver or + rejected with `FBLPromiseErrorCodeValidationFailure` error code in `FBLPromiseErrorDomain`. + */ +- (FBLPromise *)validate:(FBLPromiseValidateWorkBlock)predicate NS_SWIFT_UNAVAILABLE(""); + +/** + Validates a fulfilled value or rejects the value if it can not be validated. + + @param queue A queue to dispatch on. + @param predicate An expression to validate. + @return A new pending promise that gets either resolved with same resolution as the receiver or + rejected with `FBLPromiseErrorCodeValidationFailure` error code in `FBLPromiseErrorDomain`. + */ +- (FBLPromise *)onQueue:(dispatch_queue_t)queue + validate:(FBLPromiseValidateWorkBlock)predicate NS_REFINED_FOR_SWIFT; + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `validate` operators. + Usage: promise.validate(^BOOL(id value) { ... }) + */ +@interface FBLPromise(DotSyntax_ValidateAdditions) + +- (FBLPromise * (^)(FBLPromiseValidateWorkBlock))validate FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); +- (FBLPromise * (^)(dispatch_queue_t, FBLPromiseValidateWorkBlock))validateOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Wrap.h b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Wrap.h new file mode 100644 index 0000000..664e1bb --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise+Wrap.h @@ -0,0 +1,316 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + Different types of completion handlers available to be wrapped with promise. + */ +typedef void (^FBLPromiseCompletion)(void) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseObjectCompletion)(id __nullable) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseErrorCompletion)(NSError* __nullable) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseObjectOrErrorCompletion)(id __nullable, NSError* __nullable) + NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseErrorOrObjectCompletion)(NSError* __nullable, id __nullable) + NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromise2ObjectsOrErrorCompletion)(id __nullable, id __nullable, + NSError* __nullable) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseBoolCompletion)(BOOL) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseBoolOrErrorCompletion)(BOOL, NSError* __nullable) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseIntegerCompletion)(NSInteger) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseIntegerOrErrorCompletion)(NSInteger, NSError* __nullable) + NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseDoubleCompletion)(double) NS_SWIFT_UNAVAILABLE(""); +typedef void (^FBLPromiseDoubleOrErrorCompletion)(double, NSError* __nullable) + NS_SWIFT_UNAVAILABLE(""); + +/** + Provides an easy way to convert methods that use common callback patterns into promises. + */ +@interface FBLPromise(WrapAdditions) + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with `nil` when completion handler is invoked. + */ ++ (instancetype)wrapCompletion:(void (^)(FBLPromiseCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with `nil` when completion handler is invoked. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + wrapCompletion:(void (^)(FBLPromiseCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an object provided by completion handler. + */ ++ (instancetype)wrapObjectCompletion:(void (^)(FBLPromiseObjectCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an object provided by completion handler. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + wrapObjectCompletion:(void (^)(FBLPromiseObjectCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an error provided by completion handler. + If error is `nil`, fulfills with `nil`, otherwise rejects with the error. + */ ++ (instancetype)wrapErrorCompletion:(void (^)(FBLPromiseErrorCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an error provided by completion handler. + If error is `nil`, fulfills with `nil`, otherwise rejects with the error. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + wrapErrorCompletion:(void (^)(FBLPromiseErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an object provided by completion handler if error is `nil`. + Otherwise, rejects with the error. + */ ++ (instancetype)wrapObjectOrErrorCompletion: + (void (^)(FBLPromiseObjectOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an object provided by completion handler if error is `nil`. + Otherwise, rejects with the error. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + wrapObjectOrErrorCompletion:(void (^)(FBLPromiseObjectOrErrorCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an error or object provided by completion handler. If error + is not `nil`, rejects with the error. + */ ++ (instancetype)wrapErrorOrObjectCompletion: + (void (^)(FBLPromiseErrorOrObjectCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an error or object provided by completion handler. If error + is not `nil`, rejects with the error. + */ ++ (instancetype)onQueue:(dispatch_queue_t)queue + wrapErrorOrObjectCompletion:(void (^)(FBLPromiseErrorOrObjectCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an array of objects provided by completion handler in order + if error is `nil`. Otherwise, rejects with the error. + */ ++ (FBLPromise*)wrap2ObjectsOrErrorCompletion: + (void (^)(FBLPromise2ObjectsOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an array of objects provided by completion handler in order + if error is `nil`. Otherwise, rejects with the error. + */ ++ (FBLPromise*)onQueue:(dispatch_queue_t)queue + wrap2ObjectsOrErrorCompletion:(void (^)(FBLPromise2ObjectsOrErrorCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping YES/NO. + */ ++ (FBLPromise*)wrapBoolCompletion:(void (^)(FBLPromiseBoolCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping YES/NO. + */ ++ (FBLPromise*)onQueue:(dispatch_queue_t)queue + wrapBoolCompletion:(void (^)(FBLPromiseBoolCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping YES/NO when error is `nil`. + Otherwise rejects with the error. + */ ++ (FBLPromise*)wrapBoolOrErrorCompletion: + (void (^)(FBLPromiseBoolOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping YES/NO when error is `nil`. + Otherwise rejects with the error. + */ ++ (FBLPromise*)onQueue:(dispatch_queue_t)queue + wrapBoolOrErrorCompletion:(void (^)(FBLPromiseBoolOrErrorCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping an integer. + */ ++ (FBLPromise*)wrapIntegerCompletion:(void (^)(FBLPromiseIntegerCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping an integer. + */ ++ (FBLPromise*)onQueue:(dispatch_queue_t)queue + wrapIntegerCompletion:(void (^)(FBLPromiseIntegerCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping an integer when error is `nil`. + Otherwise rejects with the error. + */ ++ (FBLPromise*)wrapIntegerOrErrorCompletion: + (void (^)(FBLPromiseIntegerOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping an integer when error is `nil`. + Otherwise rejects with the error. + */ ++ (FBLPromise*)onQueue:(dispatch_queue_t)queue + wrapIntegerOrErrorCompletion:(void (^)(FBLPromiseIntegerOrErrorCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping a double. + */ ++ (FBLPromise*)wrapDoubleCompletion:(void (^)(FBLPromiseDoubleCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping a double. + */ ++ (FBLPromise*)onQueue:(dispatch_queue_t)queue + wrapDoubleCompletion:(void (^)(FBLPromiseDoubleCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +/** + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping a double when error is `nil`. + Otherwise rejects with the error. + */ ++ (FBLPromise*)wrapDoubleOrErrorCompletion: + (void (^)(FBLPromiseDoubleOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); + +/** + @param queue A queue to invoke the `work` block on. + @param work A block to perform any operations needed to resolve the promise. + @returns A promise that resolves with an `NSNumber` wrapping a double when error is `nil`. + Otherwise rejects with the error. + */ ++ (FBLPromise*)onQueue:(dispatch_queue_t)queue + wrapDoubleOrErrorCompletion:(void (^)(FBLPromiseDoubleOrErrorCompletion handler))work + NS_SWIFT_UNAVAILABLE(""); + +@end + +/** + Convenience dot-syntax wrappers for `FBLPromise` `wrap` operators. + Usage: FBLPromise.wrapCompletion(^(FBLPromiseCompletion handler) {...}) + */ +@interface FBLPromise(DotSyntax_WrapAdditions) + ++ (FBLPromise* (^)(void (^)(FBLPromiseCompletion)))wrapCompletion FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromiseCompletion)))wrapCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseObjectCompletion)))wrapObjectCompletion + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromiseObjectCompletion)))wrapObjectCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseErrorCompletion)))wrapErrorCompletion FBL_PROMISES_DOT_SYNTAX + NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromiseErrorCompletion)))wrapErrorCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseObjectOrErrorCompletion)))wrapObjectOrErrorCompletion + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, + void (^)(FBLPromiseObjectOrErrorCompletion)))wrapObjectOrErrorCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseErrorOrObjectCompletion)))wrapErrorOrObjectCompletion + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, + void (^)(FBLPromiseErrorOrObjectCompletion)))wrapErrorOrObjectCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromise2ObjectsOrErrorCompletion))) + wrap2ObjectsOrErrorCompletion FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromise2ObjectsOrErrorCompletion))) + wrap2ObjectsOrErrorCompletionOn FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseBoolCompletion)))wrapBoolCompletion + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, + void (^)(FBLPromiseBoolCompletion)))wrapBoolCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseBoolOrErrorCompletion)))wrapBoolOrErrorCompletion + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, + void (^)(FBLPromiseBoolOrErrorCompletion)))wrapBoolOrErrorCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseIntegerCompletion)))wrapIntegerCompletion + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, + void (^)(FBLPromiseIntegerCompletion)))wrapIntegerCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseIntegerOrErrorCompletion))) + wrapIntegerOrErrorCompletion FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromiseIntegerOrErrorCompletion))) + wrapIntegerOrErrorCompletionOn FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseDoubleCompletion)))wrapDoubleCompletion + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, + void (^)(FBLPromiseDoubleCompletion)))wrapDoubleCompletionOn + FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(void (^)(FBLPromiseDoubleOrErrorCompletion))) + wrapDoubleOrErrorCompletion FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromiseDoubleOrErrorCompletion))) + wrapDoubleOrErrorCompletionOn FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise.h b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise.h new file mode 100644 index 0000000..b1380dc --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromise.h @@ -0,0 +1,93 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromiseError.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + Promises synchronization construct in Objective-C. + */ +@interface FBLPromise<__covariant Value> : NSObject + +/** + Default dispatch queue used for `FBLPromise`, which is `main` if a queue is not specified. + */ +@property(class) dispatch_queue_t defaultDispatchQueue NS_REFINED_FOR_SWIFT; + +/** + Creates a pending promise. + */ ++ (instancetype)pendingPromise NS_REFINED_FOR_SWIFT; + +/** + Creates a resolved promise. + + @param resolution An object to resolve the promise with: either a value or an error. + @return A new resolved promise. + */ ++ (instancetype)resolvedWith:(nullable id)resolution NS_REFINED_FOR_SWIFT; + +/** + Synchronously fulfills the promise with a value. + + @param value An arbitrary value to fulfill the promise with, including `nil`. + */ +- (void)fulfill:(nullable Value)value NS_REFINED_FOR_SWIFT; + +/** + Synchronously rejects the promise with an error. + + @param error An error to reject the promise with. + */ +- (void)reject:(NSError *)error NS_REFINED_FOR_SWIFT; + ++ (instancetype)new NS_UNAVAILABLE; +- (instancetype)init NS_UNAVAILABLE; +@end + +@interface FBLPromise() + +/** + Adds an object to the set of pending objects to keep strongly while the promise is pending. + Used by the Swift wrappers to keep them alive until the underlying ObjC promise is resolved. + + @param object An object to add. + */ +- (void)addPendingObject:(id)object NS_REFINED_FOR_SWIFT; + +@end + +#ifdef FBL_PROMISES_DOT_SYNTAX_IS_DEPRECATED +#define FBL_PROMISES_DOT_SYNTAX __attribute__((deprecated)) +#else +#define FBL_PROMISES_DOT_SYNTAX +#endif + +@interface FBLPromise(DotSyntaxAdditions) + +/** + Convenience dot-syntax wrappers for FBLPromise. + Usage: FBLPromise.pending() + FBLPromise.resolved(value) + + */ ++ (instancetype (^)(void))pending FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); ++ (instancetype (^)(id __nullable))resolved FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromiseError.h b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromiseError.h new file mode 100644 index 0000000..d37af53 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromiseError.h @@ -0,0 +1,43 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import + +NS_ASSUME_NONNULL_BEGIN + +FOUNDATION_EXTERN NSErrorDomain const FBLPromiseErrorDomain NS_REFINED_FOR_SWIFT; + +/** + Possible error codes in `FBLPromiseErrorDomain`. + */ +typedef NS_ENUM(NSInteger, FBLPromiseErrorCode) { + /** Promise failed to resolve in time. */ + FBLPromiseErrorCodeTimedOut = 1, + /** Validation predicate returned false. */ + FBLPromiseErrorCodeValidationFailure = 2, +} NS_REFINED_FOR_SWIFT; + +NS_INLINE BOOL FBLPromiseErrorIsTimedOut(NSError *error) NS_SWIFT_UNAVAILABLE("") { + return error.domain == FBLPromiseErrorDomain && + error.code == FBLPromiseErrorCodeTimedOut; +} + +NS_INLINE BOOL FBLPromiseErrorIsValidationFailure(NSError *error) NS_SWIFT_UNAVAILABLE("") { + return error.domain == FBLPromiseErrorDomain && + error.code == FBLPromiseErrorCodeValidationFailure; +} + +NS_ASSUME_NONNULL_END diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromises.h b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromises.h new file mode 100644 index 0000000..2d90bad --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/FBLPromises.h @@ -0,0 +1,32 @@ +/** + Copyright 2018 Google Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "FBLPromise+All.h" +#import "FBLPromise+Always.h" +#import "FBLPromise+Any.h" +#import "FBLPromise+Async.h" +#import "FBLPromise+Await.h" +#import "FBLPromise+Catch.h" +#import "FBLPromise+Delay.h" +#import "FBLPromise+Do.h" +#import "FBLPromise+Race.h" +#import "FBLPromise+Recover.h" +#import "FBLPromise+Reduce.h" +#import "FBLPromise+Retry.h" +#import "FBLPromise+Then.h" +#import "FBLPromise+Timeout.h" +#import "FBLPromise+Validate.h" +#import "FBLPromise+Wrap.h" diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/PromisesObjC-umbrella.h b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/PromisesObjC-umbrella.h new file mode 100644 index 0000000..5b014a8 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Headers/PromisesObjC-umbrella.h @@ -0,0 +1,36 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "FBLPromise+All.h" +#import "FBLPromise+Always.h" +#import "FBLPromise+Any.h" +#import "FBLPromise+Async.h" +#import "FBLPromise+Await.h" +#import "FBLPromise+Catch.h" +#import "FBLPromise+Delay.h" +#import "FBLPromise+Do.h" +#import "FBLPromise+Race.h" +#import "FBLPromise+Recover.h" +#import "FBLPromise+Reduce.h" +#import "FBLPromise+Retry.h" +#import "FBLPromise+Testing.h" +#import "FBLPromise+Then.h" +#import "FBLPromise+Timeout.h" +#import "FBLPromise+Validate.h" +#import "FBLPromise+Wrap.h" +#import "FBLPromise.h" +#import "FBLPromiseError.h" +#import "FBLPromises.h" + +FOUNDATION_EXPORT double FBLPromisesVersionNumber; +FOUNDATION_EXPORT const unsigned char FBLPromisesVersionString[]; + diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Info.plist b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Info.plist new file mode 100644 index 0000000..a963a05 --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleExecutable + FBLPromises + CFBundleIdentifier + com.firebase.Firebase-FBLPromises + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + FBLPromises + CFBundlePackageType + FMWK + CFBundleVersion + 2.2.0 + DTSDKName + iphonesimulator11.2 + + diff --git a/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Modules/module.modulemap b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Modules/module.modulemap new file mode 100644 index 0000000..bd7b48e --- /dev/null +++ b/ios/shared/FBLPromises.xcframework/tvos-arm64_x86_64-simulator/FBLPromises.framework/Modules/module.modulemap @@ -0,0 +1,5 @@ +framework module PromisesObjC { +umbrella header "PromisesObjC-umbrella.h" +export * +module * { export * } +} diff --git a/ios/titanium-firebase-analytics.xcodeproj/project.pbxproj b/ios/titanium-firebase-analytics.xcodeproj/project.pbxproj index a0e806b..a7644e0 100644 --- a/ios/titanium-firebase-analytics.xcodeproj/project.pbxproj +++ b/ios/titanium-firebase-analytics.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 53; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -11,6 +11,7 @@ 24DD6CFA1134B3F500162E58 /* FirebaseAnalyticsModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 24DD6CF81134B3F500162E58 /* FirebaseAnalyticsModule.m */; }; 24DE9E1111C5FE74003F90F6 /* FirebaseAnalyticsModuleAssets.h in Headers */ = {isa = PBXBuildFile; fileRef = 24DE9E0F11C5FE74003F90F6 /* FirebaseAnalyticsModuleAssets.h */; }; 24DE9E1211C5FE74003F90F6 /* FirebaseAnalyticsModuleAssets.m in Sources */ = {isa = PBXBuildFile; fileRef = 24DE9E1011C5FE74003F90F6 /* FirebaseAnalyticsModuleAssets.m */; }; + 3A54BBA82A9B30B00048959F /* FBLPromises.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3A54BBA72A9B30B00048959F /* FBLPromises.xcframework */; }; 3A67E4F32A6331180079FBF4 /* FirebaseCoreInternal.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3A67E4E82A6331180079FBF4 /* FirebaseCoreInternal.xcframework */; }; 3A67E4F42A6331180079FBF4 /* FirebaseInstallations.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3A67E4E92A6331180079FBF4 /* FirebaseInstallations.xcframework */; }; 3A67E4F52A6331180079FBF4 /* GoogleDataTransport.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3A67E4EA2A6331180079FBF4 /* GoogleDataTransport.xcframework */; }; @@ -22,7 +23,6 @@ 3A67E4FB2A6331180079FBF4 /* GoogleAppMeasurementIdentitySupport.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3A67E4F02A6331180079FBF4 /* GoogleAppMeasurementIdentitySupport.xcframework */; }; 3A67E4FC2A6331180079FBF4 /* FirebaseCoreExtension.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3A67E4F12A6331180079FBF4 /* FirebaseCoreExtension.xcframework */; }; 3A67E4FD2A6331180079FBF4 /* GoogleAppMeasurement.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3A67E4F22A6331180079FBF4 /* GoogleAppMeasurement.xcframework */; }; - 3A67E5002A63311D0079FBF4 /* FBLPromises.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3A67E4FE2A63311D0079FBF4 /* FBLPromises.xcframework */; }; 3A67E5012A63311D0079FBF4 /* FirebaseAnalytics.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3A67E4FF2A63311D0079FBF4 /* FirebaseAnalytics.xcframework */; }; AA747D9F0F9514B9006C5449 /* FirebaseAnalytics_Prefix.pch in Headers */ = {isa = PBXBuildFile; fileRef = AA747D9E0F9514B9006C5449 /* FirebaseAnalytics_Prefix.pch */; }; /* End PBXBuildFile section */ @@ -33,6 +33,7 @@ 24DD6D1B1134B66800162E58 /* titanium.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = titanium.xcconfig; sourceTree = ""; }; 24DE9E0F11C5FE74003F90F6 /* FirebaseAnalyticsModuleAssets.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FirebaseAnalyticsModuleAssets.h; path = Classes/FirebaseAnalyticsModuleAssets.h; sourceTree = ""; }; 24DE9E1011C5FE74003F90F6 /* FirebaseAnalyticsModuleAssets.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FirebaseAnalyticsModuleAssets.m; path = Classes/FirebaseAnalyticsModuleAssets.m; sourceTree = ""; }; + 3A54BBA72A9B30B00048959F /* FBLPromises.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = FBLPromises.xcframework; path = shared/FBLPromises.xcframework; sourceTree = ""; }; 3A67E4E82A6331180079FBF4 /* FirebaseCoreInternal.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = FirebaseCoreInternal.xcframework; path = shared/FirebaseCoreInternal.xcframework; sourceTree = ""; }; 3A67E4E92A6331180079FBF4 /* FirebaseInstallations.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = FirebaseInstallations.xcframework; path = shared/FirebaseInstallations.xcframework; sourceTree = ""; }; 3A67E4EA2A6331180079FBF4 /* GoogleDataTransport.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = GoogleDataTransport.xcframework; path = shared/GoogleDataTransport.xcframework; sourceTree = ""; }; @@ -44,7 +45,6 @@ 3A67E4F02A6331180079FBF4 /* GoogleAppMeasurementIdentitySupport.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = GoogleAppMeasurementIdentitySupport.xcframework; path = shared/GoogleAppMeasurementIdentitySupport.xcframework; sourceTree = ""; }; 3A67E4F12A6331180079FBF4 /* FirebaseCoreExtension.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = FirebaseCoreExtension.xcframework; path = shared/FirebaseCoreExtension.xcframework; sourceTree = ""; }; 3A67E4F22A6331180079FBF4 /* GoogleAppMeasurement.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = GoogleAppMeasurement.xcframework; path = shared/GoogleAppMeasurement.xcframework; sourceTree = ""; }; - 3A67E4FE2A63311D0079FBF4 /* FBLPromises.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = FBLPromises.xcframework; path = platform/FBLPromises.xcframework; sourceTree = ""; }; 3A67E4FF2A63311D0079FBF4 /* FirebaseAnalytics.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = FirebaseAnalytics.xcframework; path = platform/FirebaseAnalytics.xcframework; sourceTree = ""; }; AA747D9E0F9514B9006C5449 /* FirebaseAnalytics_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FirebaseAnalytics_Prefix.pch; sourceTree = SOURCE_ROOT; }; D2AAC07E0554694100DB518D /* libfirebase.analytics.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libfirebase.analytics.a; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -62,9 +62,9 @@ 3A67E4FB2A6331180079FBF4 /* GoogleAppMeasurementIdentitySupport.xcframework in Frameworks */, 3A67E4FC2A6331180079FBF4 /* FirebaseCoreExtension.xcframework in Frameworks */, 3A67E4F72A6331180079FBF4 /* PromisesSwift.xcframework in Frameworks */, + 3A54BBA82A9B30B00048959F /* FBLPromises.xcframework in Frameworks */, 3A67E5012A63311D0079FBF4 /* FirebaseAnalytics.xcframework in Frameworks */, 3A67E4F62A6331180079FBF4 /* FirebaseABTesting.xcframework in Frameworks */, - 3A67E5002A63311D0079FBF4 /* FBLPromises.xcframework in Frameworks */, 3A67E4FD2A6331180079FBF4 /* GoogleAppMeasurement.xcframework in Frameworks */, 3A67E4F32A6331180079FBF4 /* FirebaseCoreInternal.xcframework in Frameworks */, 3A67E4FA2A6331180079FBF4 /* nanopb.xcframework in Frameworks */, @@ -96,7 +96,6 @@ 0867D69AFE84028FC02AAC07 /* Frameworks */ = { isa = PBXGroup; children = ( - 3A67E4FE2A63311D0079FBF4 /* FBLPromises.xcframework */, 3A67E4FF2A63311D0079FBF4 /* FirebaseAnalytics.xcframework */, 3A67E4EB2A6331180079FBF4 /* FirebaseABTesting.xcframework */, 3A67E4ED2A6331180079FBF4 /* FirebaseCore.xcframework */, @@ -109,6 +108,7 @@ 3A67E4EE2A6331180079FBF4 /* GoogleUtilities.xcframework */, 3A67E4EF2A6331180079FBF4 /* nanopb.xcframework */, 3A67E4EC2A6331180079FBF4 /* PromisesSwift.xcframework */, + 3A54BBA72A9B30B00048959F /* FBLPromises.xcframework */, ); name = Frameworks; sourceTree = "";