From f7b395cf18eee5ad2adf413c25eebec439be87fd Mon Sep 17 00:00:00 2001 From: Eugene <94358803+priemskiyyy@users.noreply.github.com> Date: Mon, 25 Sep 2023 18:38:27 +0300 Subject: [PATCH] Merge pull request #2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * added mavenCentral() for gradle builds (#418) * refactor: typescript, hooks, build.gradle & podspec fixes and moved t… * chore: update Readme.md to reflect new maintainer * feat: update android blurview to 2.0.2 (#478) * feat: extend android properties (#481) * refactor: migrate example app to use RNTA (#484) * fix(android): build issue on compileSdkVersion < 31 (#485) * chore: release 4.2.0 * feat: Add Fabric support (#493) * chore: release 4.3.0 * chore: update README.md (#494) * New "transparent" blurType that turns every blurEffectView subview ba… * Add "transparent" blur type to README.md, BlurView.ios.tsx and BlurVi… * Fix blurType in VibrancyViewNativeComponent.ts * feat(iOS): transparent blur type * Merge branch 'master' into pr/513 --- .editorconfig | 15 + .eslintrc | 3 - .flowconfig | 46 - .gitattributes | 3 + .gitignore | 41 +- .npmignore | 4 - .prettierrc | 6 - .vscode/settings.json | 8 +- .yarnrc | 3 + CONTRIBUTING.md | 195 + LICENSE | 2 +- README.md | 290 +- android/build.gradle | 157 +- android/gradle.properties | 5 + android/src/main/AndroidManifest.xml | 3 +- .../com/cmcewen/blurview/BlurViewManager.java | 62 - .../com/cmcewen/blurview/BlurViewPackage.java | 34 - .../blurview/BlurViewManagerImpl.java | 66 + .../blurview/BlurViewPackage.java | 35 + .../blurview/BlurViewManager.java | 78 + .../blurview/BlurViewManager.java | 53 + babel.config.js | 3 + docs/tvOS-step-1.jpg | Bin 26158 -> 0 bytes docs/tvOS-step-2.jpg | Bin 46112 -> 0 bytes docs/tvOS-step-3.jpg | Bin 75523 -> 0 bytes docs/tvOS-step-4.jpg | Bin 64315 -> 0 bytes example/.buckconfig | 6 - example/.flowconfig | 69 - example/.gitattributes | 1 - example/.gitignore | 62 +- example/App.js | 180 - example/android/app/BUCK | 55 - example/android/app/build.gradle | 152 - example/android/app/build_defs.bzl | 19 - example/android/app/proguard-rules.pro | 17 - .../android/app/src/debug/AndroidManifest.xml | 8 - .../android/app/src/main/AndroidManifest.xml | 26 - .../main/java/com/example/MainActivity.java | 15 - .../java/com/example/MainApplication.java | 47 - .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 3056 -> 0 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 5024 -> 0 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 2096 -> 0 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 2858 -> 0 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 4569 -> 0 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 7098 -> 0 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 6464 -> 0 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 10676 -> 0 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 9250 -> 0 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 15523 -> 0 bytes .../app/src/main/res/values/strings.xml | 3 - .../app/src/main/res/values/styles.xml | 8 - example/android/build.gradle | 32 +- example/android/gradle.properties | 42 +- .../android/gradle/wrapper/gradle-wrapper.jar | Bin 54329 -> 59821 bytes .../gradle/wrapper/gradle-wrapper.properties | 3 +- example/android/gradlew | 282 +- example/android/gradlew.bat | 173 +- example/android/keystores/BUCK | 8 - .../keystores/debug.keystore.properties | 4 - example/android/settings.gradle | 15 +- example/app.json | 18 +- example/index.js | 5 - example/index.tsx | 4 + example/ios/Podfile | 7 + example/ios/Podfile.lock | 955 ++ example/ios/example-tvOS/Info.plist | 54 - example/ios/example-tvOSTests/Info.plist | 24 - example/ios/example.xcodeproj/project.pbxproj | 1613 --- .../xcschemes/example-tvOS.xcscheme | 129 - .../xcshareddata/xcschemes/example.xcscheme | 129 - example/ios/example/AppDelegate.h | 15 - example/ios/example/AppDelegate.m | 42 - .../ios/example/Base.lproj/LaunchScreen.xib | 42 - .../AppIcon.appiconset/Contents.json | 53 - .../ios/example/Images.xcassets/Contents.json | 6 - example/ios/example/Info.plist | 60 - example/ios/example/main.m | 16 - example/ios/exampleTests/Info.plist | 24 - example/ios/exampleTests/exampleTests.m | 68 - example/metro.config.js | 36 +- example/package.json | 38 +- example/react-native.config.js | 30 + example/src/App.tsx | 183 + example/{ => src}/bgimage.jpeg | Bin example/yarn.lock | 8738 ++++++------- index.d.ts | 42 - index.js | 7 - index.js.flow | 55 - ios/BlurView.h | 11 +- ios/{BlurView.m => BlurView.mm} | 69 +- ios/{BlurViewManager.m => BlurViewManager.mm} | 0 ios/RNBlur.xcodeproj/project.pbxproj | 270 +- ios/{VibrancyView.m => VibrancyView.mm} | 54 +- ...cyViewManager.m => VibrancyViewManager.mm} | 0 lefthook.yml | 16 + package.json | 161 +- react-native-blur.podspec | 39 +- scripts/bootstrap.js | 29 + src/BlurView.android.js | 102 - src/BlurView.ios.js | 67 - src/VibrancyView.ios.js | 37 - src/components/BlurView.android.tsx | 113 + src/components/BlurView.ios.tsx | 51 + .../VibrancyView.android.tsx} | 3 +- src/components/VibrancyView.ios.tsx | 26 + src/fabric/BlurViewNativeComponent.ts | 40 + src/fabric/BlurViewNativeComponentAndroid.ts | 20 + src/fabric/VibrancyViewNativeComponent.ts | 40 + src/index.tsx | 16 + tsconfig.build.json | 5 + tsconfig.json | 29 + yarn.lock | 10565 ++++++++++------ 112 files changed, 14086 insertions(+), 12409 deletions(-) create mode 100644 .editorconfig delete mode 100644 .eslintrc delete mode 100644 .flowconfig create mode 100644 .gitattributes delete mode 100644 .npmignore delete mode 100644 .prettierrc create mode 100644 .yarnrc create mode 100644 CONTRIBUTING.md create mode 100644 android/gradle.properties delete mode 100644 android/src/main/java/com/cmcewen/blurview/BlurViewManager.java delete mode 100644 android/src/main/java/com/cmcewen/blurview/BlurViewPackage.java create mode 100644 android/src/main/java/com/reactnativecommunity/blurview/BlurViewManagerImpl.java create mode 100644 android/src/main/java/com/reactnativecommunity/blurview/BlurViewPackage.java create mode 100644 android/src/newarch/java/com/reactnativecommunity/blurview/BlurViewManager.java create mode 100644 android/src/oldarch/java/com/reactnativecommunity/blurview/BlurViewManager.java create mode 100644 babel.config.js delete mode 100644 docs/tvOS-step-1.jpg delete mode 100644 docs/tvOS-step-2.jpg delete mode 100644 docs/tvOS-step-3.jpg delete mode 100644 docs/tvOS-step-4.jpg delete mode 100644 example/.buckconfig delete mode 100644 example/.flowconfig delete mode 100644 example/.gitattributes delete mode 100644 example/App.js delete mode 100644 example/android/app/BUCK delete mode 100644 example/android/app/build.gradle delete mode 100644 example/android/app/build_defs.bzl delete mode 100644 example/android/app/proguard-rules.pro delete mode 100644 example/android/app/src/debug/AndroidManifest.xml delete mode 100644 example/android/app/src/main/AndroidManifest.xml delete mode 100644 example/android/app/src/main/java/com/example/MainActivity.java delete mode 100644 example/android/app/src/main/java/com/example/MainApplication.java delete mode 100644 example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png delete mode 100644 example/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png delete mode 100644 example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png delete mode 100644 example/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png delete mode 100644 example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png delete mode 100644 example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png delete mode 100644 example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png delete mode 100644 example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png delete mode 100644 example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png delete mode 100644 example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png delete mode 100644 example/android/app/src/main/res/values/strings.xml delete mode 100644 example/android/app/src/main/res/values/styles.xml delete mode 100644 example/android/keystores/BUCK delete mode 100644 example/android/keystores/debug.keystore.properties delete mode 100644 example/index.js create mode 100644 example/index.tsx create mode 100644 example/ios/Podfile create mode 100644 example/ios/Podfile.lock delete mode 100644 example/ios/example-tvOS/Info.plist delete mode 100644 example/ios/example-tvOSTests/Info.plist delete mode 100644 example/ios/example.xcodeproj/project.pbxproj delete mode 100644 example/ios/example.xcodeproj/xcshareddata/xcschemes/example-tvOS.xcscheme delete mode 100644 example/ios/example.xcodeproj/xcshareddata/xcschemes/example.xcscheme delete mode 100644 example/ios/example/AppDelegate.h delete mode 100644 example/ios/example/AppDelegate.m delete mode 100644 example/ios/example/Base.lproj/LaunchScreen.xib delete mode 100644 example/ios/example/Images.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 example/ios/example/Images.xcassets/Contents.json delete mode 100644 example/ios/example/Info.plist delete mode 100644 example/ios/example/main.m delete mode 100644 example/ios/exampleTests/Info.plist delete mode 100644 example/ios/exampleTests/exampleTests.m create mode 100644 example/react-native.config.js create mode 100644 example/src/App.tsx rename example/{ => src}/bgimage.jpeg (100%) delete mode 100644 index.d.ts delete mode 100644 index.js delete mode 100644 index.js.flow rename ios/{BlurView.m => BlurView.mm} (71%) rename ios/{BlurViewManager.m => BlurViewManager.mm} (100%) rename ios/{VibrancyView.m => VibrancyView.mm} (50%) rename ios/{VibrancyViewManager.m => VibrancyViewManager.mm} (100%) create mode 100644 lefthook.yml create mode 100644 scripts/bootstrap.js delete mode 100644 src/BlurView.android.js delete mode 100644 src/BlurView.ios.js delete mode 100644 src/VibrancyView.ios.js create mode 100644 src/components/BlurView.android.tsx create mode 100644 src/components/BlurView.ios.tsx rename src/{VibrancyView.android.js => components/VibrancyView.android.tsx} (77%) create mode 100644 src/components/VibrancyView.ios.tsx create mode 100644 src/fabric/BlurViewNativeComponent.ts create mode 100644 src/fabric/BlurViewNativeComponentAndroid.ts create mode 100644 src/fabric/VibrancyViewNativeComponent.ts create mode 100644 src/index.tsx create mode 100644 tsconfig.build.json create mode 100644 tsconfig.json diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..65365be6 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,15 @@ +# EditorConfig helps developers define and maintain consistent +# coding styles between different editors and IDEs +# editorconfig.org + +root = true + +[*] + +indent_style = space +indent_size = 2 + +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index 5548570f..00000000 --- a/.eslintrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "@react-native-community" -} diff --git a/.flowconfig b/.flowconfig deleted file mode 100644 index 438e495d..00000000 --- a/.flowconfig +++ /dev/null @@ -1,46 +0,0 @@ -[ignore] - -# We fork some components by platform. -.*/*.web.js -.*/*.android.js - -# Some modules have their own node_modules with overlap -.*/node_modules/node-haste/.* - -# Ignore react-tools where there are overlaps, but don't ignore anything that -# react-native relies on -.*/node_modules/react-tools/src/React.js -.*/node_modules/react-tools/src/renderers/shared/event/EventPropagators.js -.*/node_modules/react-tools/src/renderers/shared/event/eventPlugins/ResponderEventPlugin.js -.*/node_modules/react-tools/src/shared/vendor/core/ExecutionEnvironment.js - - -# Ignore commoner tests -.*/node_modules/commoner/test/.* - -# See https://github.com/facebook/flow/issues/442 -.*/react-tools/node_modules/commoner/lib/reader.js - -# Ignore jest -.*/react-native/node_modules/jest-cli/.* - -[include] - -[libs] -node_modules/react-native/Libraries/react-native/react-native-interface.js - -[options] -module.system=haste - -munge_underscores=true - -suppress_type=$FlowIssue -suppress_type=$FlowFixMe -suppress_type=$FixMe - -suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(1[0-4]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\) -suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(1[0-4]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)? #[0-9]+ -suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy - -[version] -0.14.0 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..030ef144 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,3 @@ +*.pbxproj -text +# specific for windows script files +*.bat text eol=crlf \ No newline at end of file diff --git a/.gitignore b/.gitignore index 3293f6a6..298c1b7f 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,13 @@ # .DS_Store +# XDE +.expo/ + +# VSCode +.vscode/ +jsconfig.json + # Xcode # build/ @@ -22,13 +29,39 @@ DerivedData *.xcuserstate project.xcworkspace +# Android/IJ +# +.classpath +.cxx +.gradle +.idea +.project +.settings +local.properties +android.iml + +# Cocoapods +# +*/ios/Pods + +# Ruby +*/vendor/ + # node.js # node_modules/ npm-debug.log +yarn-debug.log +yarn-error.log + +# BUCK +buck-out/ +\.buckd/ +android/app/libs +android/keystores/debug.keystore -# Android -android/react-native-blur.iml +# Expo +.expo/* -# Misc -.idea/ +# generated by bob +lib/ diff --git a/.npmignore b/.npmignore deleted file mode 100644 index bdfb8284..00000000 --- a/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -example - -# Assets -docs diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index 4af0646d..00000000 --- a/.prettierrc +++ /dev/null @@ -1,6 +0,0 @@ -{ - "singleQuote": true, - "trailingComma": "all", - "bracketSpacing": false, - "jsxBracketSameLine": true -} diff --git a/.vscode/settings.json b/.vscode/settings.json index 5d25f03c..d49050fd 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,4 +1,6 @@ { - "eslint.autoFixOnSave": true, - "editor.formatOnSave": true -} + "editor.formatOnSave": true, + "editor.codeActionsOnSave": { + "source.fixAll.eslint": true + } +} \ No newline at end of file diff --git a/.yarnrc b/.yarnrc new file mode 100644 index 00000000..fedc0f11 --- /dev/null +++ b/.yarnrc @@ -0,0 +1,3 @@ +# Override Yarn command so we can automatically setup the repo on running `yarn` + +yarn-path "scripts/bootstrap.js" diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..12a967ce --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,195 @@ +# Contributing + +We want this community to be friendly and respectful to each other. Please follow it in all your interactions with the project. + +## Development workflow + +To get started with the project, run `yarn` in the root directory to install the required dependencies for each package: + +```sh +yarn +``` + +> While it's possible to use [`npm`](https://github.com/npm/cli), the tooling is built around [`yarn`](https://classic.yarnpkg.com/), so you'll have an easier time if you use `yarn` for development. + +While developing, you can run the [example app](/example/) to test your changes. Any changes you make in your library's JavaScript code will be reflected in the example app without a rebuild. If you change any native code, then you'll need to rebuild the example app. + +To start the packager: + +```sh +yarn example start +``` + +To run the example app on Android: + +```sh +yarn example android +``` + +To run the example app on iOS: + +```sh +yarn example ios +``` + + +Make sure your code passes TypeScript and ESLint. Run the following to verify: + +```sh +yarn typescript +yarn lint +``` + +To fix formatting errors, run the following: + +```sh +yarn lint --fix +``` + +Remember to add tests for your change if possible. Run the unit tests by: + +```sh +yarn test +``` +To edit the Objective-C files, open `example/ios/BlurExample.xcworkspace` in XCode and find the source files at `Pods > Development Pods > @react-native-community/blur`. + +To edit the Kotlin files, open `example/android` in Android studio and find the source files at `reactnativecommunityblur` under `Android`. +### Commit message convention + +We follow the [conventional commits specification](https://www.conventionalcommits.org/en) for our commit messages: + +- `fix`: bug fixes, e.g. fix crash due to deprecated method. +- `feat`: new features, e.g. add new method to the module. +- `refactor`: code refactor, e.g. migrate from class components to hooks. +- `docs`: changes into documentation, e.g. add usage example for the module.. +- `test`: adding or updating tests, e.g. add integration tests using detox. +- `chore`: tooling changes, e.g. change CI config. + +Our pre-commit hooks verify that your commit message matches this format when committing. + +### Linting and tests + +[ESLint](https://eslint.org/), [Prettier](https://prettier.io/), [TypeScript](https://www.typescriptlang.org/) + +We use [TypeScript](https://www.typescriptlang.org/) for type checking, [ESLint](https://eslint.org/) with [Prettier](https://prettier.io/) for linting and formatting the code, and [Jest](https://jestjs.io/) for testing. + +Our pre-commit hooks verify that the linter and tests pass when committing. + +### Publishing to npm + +We use [release-it](https://github.com/release-it/release-it) to make it easier to publish new versions. It handles common tasks like bumping version based on semver, creating tags and releases etc. + +To publish new versions, run the following: + +```sh +yarn release +``` + +### Scripts + +The `package.json` file contains various scripts for common tasks: + +- `yarn bootstrap`: setup project by installing all dependencies and pods. +- `yarn typescript`: type-check files with TypeScript. +- `yarn lint`: lint files with ESLint. +- `yarn test`: run unit tests with Jest. +- `yarn example start`: start the Metro server for the example app. +- `yarn example android`: run the example app on Android. +- `yarn example ios`: run the example app on iOS. + +### Sending a pull request + +> **Working on your first pull request?** You can learn how from this _free_ series: [How to Contribute to an Open Source Project on GitHub](https://app.egghead.io/playlists/how-to-contribute-to-an-open-source-project-on-github). + +When you're sending a pull request: + +- Prefer small pull requests focused on one change. +- Verify that linters and tests are passing. +- Review the documentation to make sure it looks good. +- Follow the pull request template when opening a pull request. +- For pull requests that change the API or implementation, discuss with maintainers first by opening an issue. + +## Code of Conduct + +### Our Pledge + +We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community. + +### Our Standards + +Examples of behavior that contributes to a positive environment for our community include: + +- Demonstrating empathy and kindness toward other people +- Being respectful of differing opinions, viewpoints, and experiences +- Giving and gracefully accepting constructive feedback +- Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience +- Focusing on what is best not just for us as individuals, but for the overall community + +Examples of unacceptable behavior include: + +- The use of sexualized language or imagery, and sexual attention or + advances of any kind +- Trolling, insulting or derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or email + address, without their explicit permission +- Other conduct which could reasonably be considered inappropriate in a + professional setting + +### Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate. + +### Scope + +This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. + +### Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at [INSERT CONTACT METHOD]. All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the reporter of any incident. + +### Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct: + +#### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested. + +#### 2. Warning + +**Community Impact**: A violation through a single incident or series of actions. + +**Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban. + +#### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban. + +#### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within the community. + +### Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.0, +available at https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. + +Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder](https://github.com/mozilla/diversity). + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see the FAQ at +https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations. diff --git a/LICENSE b/LICENSE index 71557ac2..35ca5196 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2016 React Native Community +Copyright (c) 2022 React Native Community Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 9bff3a3e..803fb389 100644 --- a/README.md +++ b/README.md @@ -6,132 +6,101 @@ A component for UIVisualEffectView's blur and vibrancy effect on iOS, and [BlurV +### Current Maintainers: +- [Thibault Malbranche](https://github.com/Titozzz) ([Twitter @titozzz](https://twitter.com/titozzz)) from [Brigad](https://www.brigad.co/en-gb/about-us) + ### Content - [Installation](#installation) -- [BlurView](#blurview) +- [Usage](#usage) - [VibrancyView](#vibrancyview) - [Example React Native app](#example-react-native-app) - [Questions?](#questions) ### Installation -1. Install the library using either Yarn: - ``` yarn add @react-native-community/blur ``` -or npm: - -``` -npm install --save @react-native-community/blur -``` - -2. **React-Native 0.59 and below only**: Link your native dependencies: +Install native dependencies (iOS only): -``` -react-native link @react-native-community/blur -``` - -3. (iOS only) Install to Xcode: - -``` -npx pod-install -``` -Or, if you already have installed [Cocoapods](https://cocoapods.org/) on your system: ``` cd ios && pod install ``` -4. (Android only, optional) -If you've defined _[project-wide properties](https://developer.android.com/studio/build/gradle-tips.html)_ (**recommended**) in your root `build.gradle`, this library will detect the presence of the following properties: - -```groovy -buildscript {...} -allprojects {...} - -/** - + Project-wide Gradle configuration properties - */ -ext { - compileSdkVersion = 27 - targetSdkVersion = 27 - buildToolsVersion = "27.0.3" -} -``` - -5. Include the library in your code: - -```javascript -import { BlurView, VibrancyView } from "@react-native-community/blur"; -``` - -6. Compile and have fun! - -### BlurView - -**Properties:** - -- `blurType` (String) - - `xlight` - extra light blur type - - `light` - light blur type - - `dark` - dark blur type - - `extraDark` - extra dark blur type (tvOS only) - - `regular` - regular blur type (iOS 10+ and tvOS only) - - `prominent` - prominent blur type (iOS 10+ and tvOS only) - - iOS 13 only Blur types: - - `chromeMaterial` - An adaptable blur effect that creates the appearance of the system chrome. - - `material` - An adaptable blur effect that creates the appearance of a material with normal thickness. - - `thickMaterial` - An adaptable blur effect that creates the appearance of a material that is thicker than normal. - - `thinMaterial` - An adaptable blur effect that creates the appearance of an ultra-thin material. - - `ultraThinMaterial` - An adaptable blur effect that creates the appearance of an ultra-thin material. - - `chromeMaterialDark` - A blur effect that creates the appearance of an ultra-thin material and is always dark. - - `materialDark` - A blur effect that creates the appearance of a thin material and is always dark. - - `thickMaterialDark` - A blur effect that creates the appearance of a material with normal thickness and is always dark. - - `thinMaterialDark` - A blur effect that creates the appearance of a material that is thicker than normal and is always dark. - - `ultraThinMaterialDark` - A blur effect that creates the appearance of the system chrome and is always dark. - - `chromeMaterialLight` - An adaptable blur effect that creates the appearance of the system chrome. - - `materialLight` - An adaptable blur effect that creates the appearance of a material with normal thickness. - - `thickMaterialLight` - An adaptable blur effect that creates the appearance of a material that is thicker than normal. - - `thinMaterialLight` - An adaptable blur effect that creates the appearance of a thin material. - - `ultraThinMaterialLight` - An adaptable blur effect that creates the appearance of an ultra-thin material. -- `blurAmount` (Default: 10, Number) - - `0-100` - Adjusts blur intensity -- `reducedTransparencyFallbackColor` (Color) (iOS only) - - `black, white, #rrggbb, etc` - background color to use if accessibility setting ReduceTransparency is enabled - -> Note: The maximum `blurAmount` on Android is 32, so higher values will be clamped to 32. - -> Complete usage example that works on iOS and Android: +### Usage + +#### BlurView + +| Property | Possible Values | Default | Platform +| ----------- | ----------- | ----------- | ----------- +| `blurType` | See blurType below | - | All +| `blurAmount` | 0 - 100 (The maximum blurAmount on Android is 32, so higher values will be clamped to 32) | 10 | All +| `reducedTransparencyFallbackColor` | Any color | - | iOS only +| `blurRadius` | 0 - 25 | Matches iOS blurAmount | Android only +| `downsampleFactor` | 0 - 25 | Matches iOS blurAmount | Android only +| `overlayColor` | Any color | Default color based on iOS blurType | Android only + +#### blurType + +| Name | Description +| ----------- | ----------- +| `xlight` | extra light blur type +| `light` | light blur type +| `dark` | dark blur type +| `extraDark` | extra dark blur type (tvOS only) +| `regular` | regular blur type (iOS 10+ and tvOS only) +| `prominent` | prominent blur type (iOS 10+ and tvOS only) +| `transparent` | transparent blur type (iOS 10+ and tvOS only) + +#### blurType (iOS 13 only) + +| Name | Description +| ----------- | ----------- +| `chromeMaterial` | An adaptable blur effect that creates the appearance of the system chrome. +| `material` | An adaptable blur effect that creates the appearance of a material with normal thickness. +| `thickMaterial` | An adaptable blur effect that creates the appearance of a material that is thicker than normal. +| `chromeMaterial` | An adaptable blur effect that creates the appearance of the system chrome. +| `thinMaterial` | An adaptable blur effect that creates the appearance of an ultra-thin material. +| `ultraThinMaterial` | An adaptable blur effect that creates the appearance of an ultra-thin material. +| `chromeMaterialDark` | A blur effect that creates the appearance of an ultra-thin material and is always dark. +| `materialDark` | A blur effect that creates the appearance of a thin material and is always dark. +| `thickMaterialDark` | A blur effect that creates the appearance of a material with normal thickness and is always dark. +| `thinMaterialDark` | A blur effect that creates the appearance of a material that is thicker than normal and is always dark. +| `ultraThinMaterialDark` | A blur effect that creates the appearance of the system chrome and is always dark. +| `chromeMaterialLight` | An adaptable blur effect that creates the appearance of the system chrome. +| `materialLight` | An adaptable blur effect that creates the appearance of a material with normal thickness. +| `thickMaterialLight` | An adaptable blur effect that creates the appearance of a material that is thicker than normal. +| `thinMaterialLight` | An adaptable blur effect that creates the appearance of a thin material. +| `ultraThinMaterialLight` | An adaptable blur effect that creates the appearance of an ultra-thin material. + +Complete usage example that works on iOS and Android: ```javascript import React, { Component } from "react"; import { View, Image, Text, StyleSheet } from "react-native"; import { BlurView } from "@react-native-community/blur"; -export default class Menu extends Component { - - render() { - return ( - - - Hi, I am some blurred text -{/* in terms of positioning and zIndex-ing everything before the BlurView will be blurred */} - - I'm the non blurred text because I got rendered on top of the BlurView - - ); - } +export default function Menu() { + return ( + + + Hi, I am some blurred text + {/* in terms of positioning and zIndex-ing everything before the BlurView will be blurred */} + + I'm the non blurred text because I got rendered on top of the BlurView + + ) } const styles = StyleSheet.create({ @@ -151,134 +120,53 @@ const styles = StyleSheet.create({ In this example, the `Image` component will be blurred, because the `BlurView` in positioned on top. But the `Text` will stay unblurred. -If the [accessibility setting `Reduce Transparency`](https://support.apple.com/guide/iphone/display-settings-iph3e2e1fb0/ios) is enabled the `BlurView` will use `reducedTransparencyFallbackColor` as it's background color rather than blurring. If no `reducedTransparencyFallbackColor` is provided, the`BlurView`will use the default fallback color (white, black, or grey depending on `blurType`) +If the accessibility setting [`Reduce Transparency`](https://support.apple.com/guide/iphone/display-settings-iph3e2e1fb0/ios) is enabled the `BlurView` will use `reducedTransparencyFallbackColor` as it's background color rather than blurring. If no `reducedTransparencyFallbackColor` is provided, the`BlurView`will use the default fallback color (white, black, or grey depending on `blurType`) ### VibrancyView -**Uses the same properties as `BlurView` (`blurType`, `blurAmount`, and `reducedTransparencyFallbackColor`).** +Uses the same properties as `BlurView` (`blurType`, `blurAmount`, and `reducedTransparencyFallbackColor`). -> The vibrancy effect lets the content underneath a blurred view show through more vibrantly +The vibrancy effect lets the content underneath a blurred view show through more vibrantly -> (Note: `VibrancyView` is only supported on iOS. Also note that the `VibrancyView` must contain nested views.) +`VibrancyView is only supported on iOS. Also note that the VibrancyView must contain nested views` ```javascript import { VibrancyView } from "@react-native-community/blur"; -export default class Menu extends Component { - render() { - return ( - - - Hi, I am some vibrant text. - - - ); - } +export default function Menu() { + return ( + + + Hi, I am some vibrant text. + + + ) } ``` -### Android - -Android uses the [BlurView](https://github.com/Dimezis/BlurView). - -If you only need to support iOS, then you can safely ignore these limitations. - -In addition to `blurType` and `blurAmount`, Android has some extra props that can be used to override the default behavior (or configure Android-specific behavior): - -- `blurRadius` (Number - between 0 and 25) - Manually adjust the blur radius. (Default: matches iOS blurAmount) -- `downsampleFactor` (Number - between 0 and 25) - Scales down the image before blurring (Default: matches iOS blurAmount) -- `overlayColor` (Color) - Set a custom overlay color (Default color based on iOS blurType) - ### Example React Native App This project includes an example React Native app, which was used to make the GIF in this README. You can run the apps by following these steps: -1. Clone the repository +Clone the repository ``` -cd ~ git clone https://github.com/react-native-community/react-native-blur.git ``` -2. cd to `example` +Install dependencies ``` -cd react-native-blur/example +yarn ``` -3. Install dependencies +#### Run the app ``` -npm install -``` - -4. Run the apps: - -#### Run the iOS app - -``` -react-native run-ios -``` - -#### Run the tvOS app - -type: - -``` -react-native run-ios -``` - -`react-native link` don’t works properly with the tvOS target so we need to add the library manually. - -First select your project in Xcode. - - - -After that, select the tvOS target of your application and select « General » tab - - - -Scroll to « Linked Frameworks and Libraries » and tap on the + button - - - -Select RNBlur-tvOS - - - -That’s all, you can use react-native-blur for your tvOS application - -#### Run the Android app - -``` -react-native run-android -``` - -### Troubleshooting - -On older instances of react-native, BlurView package does not get added into the MainActivity/MainApplication classes where you would see `Warning: Native component for 'BlurView' does not exist` in RN YellowBox or console. - -To rectify this, you can add the BlurViewPackage manually in MainActivity/MainApplication classes - -```java -... -import com.cmcewen.blurview.BlurViewPackage; -... - -public class MainApplication extends Application implements ReactApplication { -... - @Override - protected List getPackages() { - return Arrays.asList( - new MainReactPackage(), - new BlurViewPackage() - ); - } -... -} +yarn example android/ios ``` ### Questions? -Feel free to contact me on [twitter](https://twitter.com/kureevalexey) or [create an issue](https://github.com/Kureev/react-native-blur/issues/new) +Feel free to [create an issue](https://github.com/Kureev/react-native-blur/issues/new) diff --git a/android/build.gradle b/android/build.gradle index b401cb82..4bd9c81f 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,47 +1,142 @@ -def safeExtGet(prop, fallback) { - rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback -} - buildscript { - // The Android Gradle plugin is only required when opening the android folder stand-alone. - // This avoids unnecessary downloads and potential conflicts when the library is included as a - // module dependency in an application project. - if (project == rootProject) { - repositories { - google() - jcenter() - } + repositories { + google() + mavenCentral() + } - dependencies { - classpath("com.android.tools.build:gradle:3.5.3") - } - } + dependencies { + classpath 'com.android.tools.build:gradle:3.5.3' + } +} + +def isNewArchitectureEnabled() { + return rootProject.hasProperty("newArchEnabled") && rootProject.getProperty("newArchEnabled") == "true" } apply plugin: 'com.android.library' +if (isNewArchitectureEnabled()) { + apply plugin: 'com.facebook.react' +} + +def getExtOrDefault(name) { + return rootProject.ext.has(name) ? rootProject.ext.get(name) : project.properties['Blur_' + name] +} + +def getExtOrIntegerDefault(name) { + return rootProject.ext.has(name) ? rootProject.ext.get(name) : (project.properties['Blur_' + name]).toInteger() +} + android { - compileSdkVersion safeExtGet('compileSdkVersion', 28) - buildToolsVersion safeExtGet('buildToolsVersion', '28.0.3') - - defaultConfig { - minSdkVersion safeExtGet('minSdkVersion', 16) - targetSdkVersion safeExtGet('targetSdkVersion', 28) - versionCode 1 - versionName "1.0" + compileSdkVersion getExtOrIntegerDefault('compileSdkVersion') + + defaultConfig { + minSdkVersion getExtOrIntegerDefault('minSdkVersion') + targetSdkVersion getExtOrIntegerDefault('targetSdkVersion') + buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString() + } + buildTypes { + release { + minifyEnabled false } - lintOptions { - abortOnError false + } + + lintOptions { + disable 'GradleCompatible' + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + sourceSets { + main { + if (isNewArchitectureEnabled()) { + java.srcDirs += ['src/newarch'] + } else { + java.srcDirs += ['src/oldarch'] + } } + } } repositories { - google() - jcenter() + mavenCentral() + google() + maven { url 'https://jitpack.io' } + + def found = false + def defaultDir = null + def androidSourcesName = 'React Native sources' + + if (rootProject.ext.has('reactNativeAndroidRoot')) { + defaultDir = rootProject.ext.get('reactNativeAndroidRoot') + } else { + defaultDir = new File( + projectDir, + '/../../../node_modules/react-native/android' + ) + } + + if (defaultDir.exists()) { + maven { + url defaultDir.toString() + name androidSourcesName + } + + logger.info(":${project.name}:reactNativeAndroidRoot ${defaultDir.canonicalPath}") + found = true + } else { + def parentDir = rootProject.projectDir + + 1.upto(5, { + if (found) return true + parentDir = parentDir.parentFile + + def androidSourcesDir = new File( + parentDir, + 'node_modules/react-native' + ) + + def androidPrebuiltBinaryDir = new File( + parentDir, + 'node_modules/react-native/android' + ) + + if (androidPrebuiltBinaryDir.exists()) { + maven { + url androidPrebuiltBinaryDir.toString() + name androidSourcesName + } + + logger.info(":${project.name}:reactNativeAndroidRoot ${androidPrebuiltBinaryDir.canonicalPath}") + found = true + } else if (androidSourcesDir.exists()) { + maven { + url androidSourcesDir.toString() + name androidSourcesName + } + + logger.info(":${project.name}:reactNativeAndroidRoot ${androidSourcesDir.canonicalPath}") + found = true + } + }) + } + + if (!found) { + throw new GradleException( + "${project.name}: unable to locate React Native android sources. " + + "Ensure you have you installed React Native as a dependency in your project and try again." + ) + } } + dependencies { - //noinspection GradleDynamicVersion - implementation 'com.facebook.react:react-native:+' - implementation 'com.eightbitlab:blurview:1.6.6' + //noinspection GradleDynamicVersion + implementation "com.facebook.react:react-native:+" + // From node_modules + + implementation 'com.github.Dimezis:BlurView:version-2.0.2' } diff --git a/android/gradle.properties b/android/gradle.properties new file mode 100644 index 00000000..ffad8cc4 --- /dev/null +++ b/android/gradle.properties @@ -0,0 +1,5 @@ +Blur_kotlinVersion=1.7.0 +Blur_minSdkVersion=21 +Blur_targetSdkVersion=31 +Blur_compileSdkVersion=31 +Blur_ndkversion=21.4.7075529 diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml index 1770f6ec..56e4bde8 100644 --- a/android/src/main/AndroidManifest.xml +++ b/android/src/main/AndroidManifest.xml @@ -1,2 +1 @@ - - + \ No newline at end of file diff --git a/android/src/main/java/com/cmcewen/blurview/BlurViewManager.java b/android/src/main/java/com/cmcewen/blurview/BlurViewManager.java deleted file mode 100644 index b583b026..00000000 --- a/android/src/main/java/com/cmcewen/blurview/BlurViewManager.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.cmcewen.blurview; - -import android.graphics.drawable.Drawable; -import android.view.View; -import android.view.ViewGroup; - -import com.facebook.react.uimanager.ViewGroupManager; -import com.facebook.react.uimanager.SimpleViewManager; -import com.facebook.react.uimanager.ThemedReactContext; -import com.facebook.react.uimanager.annotations.ReactProp; - -import java.util.Objects; - -import javax.annotation.Nonnull; - -import eightbitlab.com.blurview.BlurView; -import eightbitlab.com.blurview.RenderScriptBlur; - - -@SuppressWarnings("unused") -class BlurViewManager extends ViewGroupManager { - private static final String REACT_CLASS = "BlurView"; - - private static final int defaultRadius = 10; - private static final int defaultSampling = 10; - - @Override - public @Nonnull String getName() { - return REACT_CLASS; - } - - @Override - public @Nonnull BlurView createViewInstance(@Nonnull ThemedReactContext ctx) { - BlurView blurView = new BlurView(ctx); - View decorView = Objects.requireNonNull(ctx.getCurrentActivity()).getWindow().getDecorView(); - ViewGroup rootView = decorView.findViewById(android.R.id.content); - Drawable windowBackground = decorView.getBackground(); - blurView.setupWith(rootView) - .setFrameClearDrawable(windowBackground) - .setBlurAlgorithm(new RenderScriptBlur(ctx)) - .setBlurRadius(defaultRadius) - .setHasFixedTransformationMatrix(false); - return blurView; - } - - @ReactProp(name = "blurRadius", defaultInt = defaultRadius) - public void setRadius(BlurView view, int radius) { - view.setBlurRadius(radius); - view.invalidate(); - } - - @ReactProp(name = "overlayColor", customType = "Color") - public void setColor(BlurView view, int color) { - view.setOverlayColor(color); - view.invalidate(); - } - - @ReactProp(name = "downsampleFactor", defaultInt = defaultSampling) - public void setDownsampleFactor(BlurView view, int factor) { - - } -} diff --git a/android/src/main/java/com/cmcewen/blurview/BlurViewPackage.java b/android/src/main/java/com/cmcewen/blurview/BlurViewPackage.java deleted file mode 100644 index 87aedefb..00000000 --- a/android/src/main/java/com/cmcewen/blurview/BlurViewPackage.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.cmcewen.blurview; - -import com.facebook.react.ReactPackage; -import com.facebook.react.bridge.JavaScriptModule; -import com.facebook.react.bridge.NativeModule; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.uimanager.ViewManager; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import javax.annotation.Nonnull; - -public class BlurViewPackage implements ReactPackage { - @Override - @Nonnull - public List createNativeModules(@Nonnull ReactApplicationContext reactApplicationContext) { - return new ArrayList<>(); - } - - @SuppressWarnings("unused") - public List> createJSModules() { - return Collections.emptyList(); - } - - @Override - @Nonnull - public List createViewManagers(@Nonnull ReactApplicationContext reactContext) { - return Collections.singletonList( - new BlurViewManager() - ); - } -} diff --git a/android/src/main/java/com/reactnativecommunity/blurview/BlurViewManagerImpl.java b/android/src/main/java/com/reactnativecommunity/blurview/BlurViewManagerImpl.java new file mode 100644 index 00000000..47030e59 --- /dev/null +++ b/android/src/main/java/com/reactnativecommunity/blurview/BlurViewManagerImpl.java @@ -0,0 +1,66 @@ +package com.reactnativecommunity.blurview; + +import android.graphics.drawable.Drawable; +import android.os.Build; +import android.view.View; +import android.view.ViewGroup; +import com.facebook.react.uimanager.ThemedReactContext; + +import eightbitlab.com.blurview.BlurView; +import eightbitlab.com.blurview.RenderEffectBlur; +import eightbitlab.com.blurview.RenderScriptBlur; + +import java.util.Objects; +import javax.annotation.Nonnull; + +@SuppressWarnings("unused") +class BlurViewManagerImpl { + + public static final String REACT_CLASS = "AndroidBlurView"; + + public static final int defaultRadius = 10; + public static final int defaultSampling = 10; + + public static @Nonnull BlurView createViewInstance(@Nonnull ThemedReactContext ctx) { + BlurView blurView = new BlurView(ctx); + View decorView = Objects + .requireNonNull(ctx.getCurrentActivity()) + .getWindow() + .getDecorView(); + ViewGroup rootView = decorView.findViewById(android.R.id.content); + Drawable windowBackground = decorView.getBackground(); + if (Build.VERSION.SDK_INT >= 31) { + blurView + .setupWith(rootView, new RenderEffectBlur()) + .setFrameClearDrawable(windowBackground) + .setBlurRadius(defaultRadius); + } else { + blurView + .setupWith(rootView, new RenderScriptBlur(ctx)) + .setFrameClearDrawable(windowBackground) + .setBlurRadius(defaultRadius); + } + return blurView; + } + + public static void setRadius(BlurView view, int radius) { + view.setBlurRadius(radius); + view.invalidate(); + } + + public static void setColor(BlurView view, int color) { + view.setOverlayColor(color); + view.invalidate(); + } + + public static void setDownsampleFactor(BlurView view, int factor) {} + + public static void setAutoUpdate(BlurView view, boolean autoUpdate) { + view.setBlurAutoUpdate(autoUpdate); + view.invalidate(); + } + + public static void setBlurEnabled(BlurView view, boolean enabled) { + view.setBlurEnabled(enabled); + } +} diff --git a/android/src/main/java/com/reactnativecommunity/blurview/BlurViewPackage.java b/android/src/main/java/com/reactnativecommunity/blurview/BlurViewPackage.java new file mode 100644 index 00000000..7f48b1f6 --- /dev/null +++ b/android/src/main/java/com/reactnativecommunity/blurview/BlurViewPackage.java @@ -0,0 +1,35 @@ +package com.reactnativecommunity.blurview; + +import com.facebook.react.ReactPackage; +import com.facebook.react.bridge.JavaScriptModule; +import com.facebook.react.bridge.NativeModule; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.uimanager.ViewManager; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import javax.annotation.Nonnull; + +public class BlurViewPackage implements ReactPackage { + + @Override + @Nonnull + public List createNativeModules( + @Nonnull ReactApplicationContext reactApplicationContext + ) { + return new ArrayList<>(); + } + + @SuppressWarnings("unused") + public List> createJSModules() { + return Collections.emptyList(); + } + + @Override + @Nonnull + public List createViewManagers( + @Nonnull ReactApplicationContext reactContext + ) { + return Collections.singletonList(new BlurViewManager(reactContext)); + } +} diff --git a/android/src/newarch/java/com/reactnativecommunity/blurview/BlurViewManager.java b/android/src/newarch/java/com/reactnativecommunity/blurview/BlurViewManager.java new file mode 100644 index 00000000..e62c8de9 --- /dev/null +++ b/android/src/newarch/java/com/reactnativecommunity/blurview/BlurViewManager.java @@ -0,0 +1,78 @@ +package com.reactnativecommunity.blurview; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.module.annotations.ReactModule; +import com.facebook.react.uimanager.ThemedReactContext; +import com.facebook.react.uimanager.ViewGroupManager; +import com.facebook.react.uimanager.ViewManagerDelegate; +import com.facebook.react.uimanager.annotations.ReactProp; +import com.facebook.react.viewmanagers.AndroidBlurViewManagerDelegate; +import com.facebook.react.viewmanagers.AndroidBlurViewManagerInterface; + +import eightbitlab.com.blurview.BlurView; + +@ReactModule(name = BlurViewManagerImpl.REACT_CLASS) +class BlurViewManager extends ViewGroupManager + implements AndroidBlurViewManagerInterface { + + private final ViewManagerDelegate mDelegate; + + public BlurViewManager(ReactApplicationContext context) { + mDelegate = new AndroidBlurViewManagerDelegate<>(this); + } + + @Nullable + @Override + protected ViewManagerDelegate getDelegate() { + return mDelegate; + } + + @NonNull + @Override + public String getName() { + return BlurViewManagerImpl.REACT_CLASS; + } + + @NonNull + @Override + protected BlurView createViewInstance(@NonNull ThemedReactContext context) { + return BlurViewManagerImpl.createViewInstance(context); + } + + @Override + @ReactProp(name = "blurRadius", defaultInt = BlurViewManagerImpl.defaultRadius) + public void setBlurRadius(BlurView view, int radius) { + BlurViewManagerImpl.setRadius(view, radius); + } + + @Override + @ReactProp(name = "overlayColor", customType = "Color") + public void setOverlayColor(BlurView view, Integer color) { + BlurViewManagerImpl.setColor(view, color); + } + + @Override + @ReactProp(name = "downsampleFactor", defaultInt = BlurViewManagerImpl.defaultSampling) + public void setDownsampleFactor(BlurView view, int factor) {} + + @Override + @ReactProp(name = "autoUpdate", defaultBoolean = true) + public void setAutoUpdate(BlurView view, boolean autoUpdate) { + BlurViewManagerImpl.setAutoUpdate(view, autoUpdate); + } + + @Override + @ReactProp(name = "enabled", defaultBoolean = true) + public void setEnabled(BlurView view, boolean enabled) { + BlurViewManagerImpl.setBlurEnabled(view, enabled); + } + + @Override + public void setBlurAmount(BlurView view, int value) {} + + @Override + public void setBlurType(BlurView view, @Nullable String value) {} +} diff --git a/android/src/oldarch/java/com/reactnativecommunity/blurview/BlurViewManager.java b/android/src/oldarch/java/com/reactnativecommunity/blurview/BlurViewManager.java new file mode 100644 index 00000000..1a282095 --- /dev/null +++ b/android/src/oldarch/java/com/reactnativecommunity/blurview/BlurViewManager.java @@ -0,0 +1,53 @@ +package com.reactnativecommunity.blurview; + +import androidx.annotation.NonNull; + +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.uimanager.ThemedReactContext; +import com.facebook.react.uimanager.ViewGroupManager; +import com.facebook.react.uimanager.annotations.ReactProp; + +import eightbitlab.com.blurview.BlurView; + +class BlurViewManager extends ViewGroupManager { + + ReactApplicationContext mCallerContext; + + public BlurViewManager(ReactApplicationContext reactContext) { + mCallerContext = reactContext; + } + + @Override + public BlurView createViewInstance(ThemedReactContext context) { + return BlurViewManagerImpl.createViewInstance(context); + } + + @NonNull + @Override + public String getName() { + return BlurViewManagerImpl.REACT_CLASS; + } + + @ReactProp(name = "blurRadius", defaultInt = BlurViewManagerImpl.defaultRadius) + public void setRadius(BlurView view, int radius) { + BlurViewManagerImpl.setRadius(view, radius); + } + + @ReactProp(name = "overlayColor", customType = "Color") + public void setColor(BlurView view, int color) { + BlurViewManagerImpl.setColor(view, color); + } + + @ReactProp(name = "downsampleFactor", defaultInt = BlurViewManagerImpl.defaultSampling) + public void setDownsampleFactor(BlurView view, int factor) {} + + @ReactProp(name = "autoUpdate", defaultBoolean = true) + public void setAutoUpdate(BlurView view, boolean autoUpdate) { + BlurViewManagerImpl.setAutoUpdate(view, autoUpdate); + } + + @ReactProp(name = "enabled", defaultBoolean = true) + public void setBlurEnabled(BlurView view, boolean enabled) { + BlurViewManagerImpl.setBlurEnabled(view, enabled); + } +} diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 00000000..f842b77f --- /dev/null +++ b/babel.config.js @@ -0,0 +1,3 @@ +module.exports = { + presets: ['module:metro-react-native-babel-preset'], +}; diff --git a/docs/tvOS-step-1.jpg b/docs/tvOS-step-1.jpg deleted file mode 100644 index 742304d6990d98d758cef8e2ba30ecb27c3f798f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26158 zcmeFZ2Urx_wk}!-NET5t2r3{-lq4vjMI;LdNET3$EJ?D2CP)y477$Pn8bp#Li7l}u zgGf$715E~rO>UsWEnR!BwO#9;b?UDdN@%@O99WBg+j#BanY;G~9% zx(Yx-0sv~@KY%z5JXH3vw*dexEkFPO07`(AnfrnH7_zvC>VGoe~ybb{3 z;3oi(rjz{fYx=Q&{(9_oI_W>Z0}DSI64wBk+jcGh&u2Mj-Jsz(5Hs9J@_QavnIwKtjquLTm=O!GV#J{M>%t z1|CR`k&=-gr=X;wrU4sNoCJ=MkdhuFBPA#Q@feZ-@OOZWf&A1tF~#Gjb?;N0cViR} zj?JLtxlz)J(g_Vt+?*jkDO9GNoSEOaGUQ@cMtfH!>uAzU&z|hFp z#MJ7cwT-Qvy@R`lrn?~~A{Vc`*x&!XbuUnL|ay?&GYF7tg>c1~{Ihtjh0ib}+% zs_Mq3=9bpB_Kq+81A{}uBi}~Hre|j7<`)*1zAtZXZSU;v?PCuPf6xW;^Ea}<<8PGx zi7p0^u480mq+}F7=ps4h{ey4@GV*g`$4@EhQrveteO^46lJQ1tMo9w|kAxnE>A~YZ zYGz)^X}--Lr2VAqe~++`|0BwNC+rWpP=FF}?B_;$43rWnDJUs2a3iN6|FKa}QvBQ~ z|FKd3+-QDmbiZ#zuoDun5Af#W;D0(Q3aa0K```XToB-95k2nU0DJ`2 z8sqmFNiF%hoCwg`Zw3_G9ckxW6G}qpK~HyF;`pd8qkN9hHJy4_=Zek-yES8+x(Us=7<_Cvzv`yYpF-Rq}(OQAmfKMn&I)2ZY} zA+`2D53g>M{YwuQkNteWKb}IupTfT%{qrCm1;ls7AGQ8Gyio@JqX!w-y9l3^wM~=h z$&}GQOa^LxACL)p?1>8w-#`SQEI2#DzyNe{nfnNfoW0I&@lO(@Qt>(2M4)G!dw&z! z3R{zxCIn^>0pxRnBuUnPqNjouxzj~Uye7c<3)a9_B)0!^N(|=HSdV|7Q)^gXWelt^ zJJQi20`Oeu#tadN2JC<5->~;yS_%<>xI)n_M1UPqzJoqEj35w1vAxHWerK31)c!ki zd!GW2v)s)5&vm6Awbk!lNj3ZOkS83HkuUkLVo6?)%o-2V9gGjUc+BO8Zu}HoH^^R9 zZik

idnQgODFA4U(+=r{o=Fe;d^&$WH>fe@aK`H|daS{?4H?vu z;T5qL|LtAWMc`f3f@grwSo^ToISbFD_3;8C#TL&qTYhXvq7neKsGH%i=00Tqj2%roi{ycTvE_B3q-8==b5>&4S&?fRqFn z&)Iuc!fUZ@PZlASo~fw%Z_tUYSridSU))WnSASQP%3~p|SD1>q^QL}Ql;*;5wT5mE z6o1tB-2dWn{TLg#_Y7Lc$r#F*Irf}yF1Yq$E`Im3%zob4kL8H#dF)4V;_AD+ySY-_ zyOogLEyxZ<;WglSdnmy-2fuZ3>nssSvnK-nQHfP(mN+^7LM9m=?V7W&!?{6{nmI)x zAU8lbVDvo+?U5t`^~(N*)1oh~wMLirnA7E%(gJft;QiS>t0p`Ld@ujIFimr^=riHK zk<9V;%VKq^r_Ra0(cwAZ8YC(HYgd}efbu`DGQk5LKIbqu4QAXt_T`J%TQ7z5{X)|y z=HWIR! z3`L)Z{o}Vh#||mc(<_OG(Sr%xF1h*%2Tw$9O7AF*^#f?ey`TYd&LL zh-5u`7;-7uqg0(nRcsv7-dDzjo#QT|?5VRX=z`##_VNC3Jjq2;?UI==DVjI7pEzd2 zl{nP`mjs(Qy|4C6n=!q~A_5=agnC;d(Ax!=pS*re1*ACZUj!Wmj1 zZ_5+1OASIsOB=M<@U|AyGubsc@QJ(G8mDMf&&QRjG`m%CGRaKM^29h&KHw3E%Nl}O zj&xR`BRiM-n+BTI{YnW*XeW7YE8G8xHb#w4o&RGra{mxgmCH%&c4HvpkViC&4`v}C>Gu! z0;~?md!MQ!yG{k9`65)P?k-#$KcRZVT^nQBQXBz2S;SX{iK$>(`zlyB^)QaAlGZx$ zYAoBUhsW-mq*{oqcMASqwWM&9d%Fv=5v%$SRk~Ato6O=**9=*n`)l2wLenjCT^yWE zGc&((S}yNV+QWj(qYoM}cy-`}I$%@i<7ZZ}DH5844R7I#LhDsVE%T;&Y2=AVkPMz8 z1$-NLdSh=46D*5ymlfb6yHz>=RPjG1|G&=IKd$Nzc?JmHD2dk}-f-GEl8JgIB9dkN zKyOZ9emsor0k9b7W(tIepHN&p9|R%x{brtv&&C)giBe!cZVC;u&c(E@29s-QPuk9tkoA0xK6U#v&*|kwH-abEZ1T|HBW|r~JI)7eoaJ=i z@)li&o>&beXUuP3r;9U;;&FW|$E)^}Iy-xm*oh=!5 zh~hpx;65ZBPPK7>tUQ9Q%t4pvO+5f3S@o|nff~Y|QF8;%SXXWM)0bTy1 zLR{{#$~Q#dEXwk5nwt=EagYeiad;AeyAMHYrN#aq8gm=^U54Kbc5XTm(C0qN$9*sb z1RFeI2Q+Bt$XDbcTk(@(@?prFXaEtg6bCtD6D09t?cPu2CMYsPcGu_$L4q1(<$=hJh!V#ON|90W65K~L;k|{jyc#X)oJ_h zux&~s#b!DKbMDs~ZO4|3#KI|!p9HmWn=U)H6WFj%{FK?dTIS2QQrsOSZ;u`D@qM}4 zbWmzd$??jGjg})OVJYn_+_18@f@+5YTCuD<_I22m`OYbA#sdeFFS+C;acWFEGVBQx zC!VZKZmsnmtU9sl7OyVV$sNH@;*=`}0tJ1_+Qw!b+)NQ6LYbw#`*#a?(I{CRxnNCE z+1PiqDg!T71!GrWn?@#el~}V`GY+Ka%}u6}J)07T+!xtfGvcwhdGFj9kH9cR!1jEx zzciM7`V6F@`ialBV%ea-l6YNfrhI?F*1>kkTArvjcDc;Z?q43SFPV{zhBSptGn_?~PwKLL5lE!uc{%@#H#mN{ z(2<*})|#+6f0JdATLY z_s5DS3e&SvC(3SR6i)7qpFaEYey|Bm{bS0GIR=g4=P#;FAhPB2eAujE6n*mgO5xa+ zy%Zx6IF1`Y=Oh$2Z=CkwFzGEWQn+BRAYV3EoKZ69f%0*hNt|$&+0M8uAwk(Le zU{7a17Cl2B=^QAqJV{lvS<6jdj=wTYCB&E9eN`oWyOr&|eUTV@fwR{dt@OR%c3#J& zJvdWEmyTvx4c2>_2+$~!ZK~%vNXS=gq_8v8In6{mN25L@+K|FhMr_-9aT@WKb>-C< zk=WS{x^aPu5V>A69lL3jY0)vID=9^evDZ-F#=ljrnDvyal{86&-MJn3z(k+g3!~yQTYC$AhQNxo z5sj?QiAvw3EVauT+OaJSr@Sft(eR`e>xo;|pJXhqHna}M-@r1>uqjYEDv%9kM`#UJ z$Sdxearn&p-Wzx=>B5A3?R_den=MIZTy0$CRv=Fq_Fz-GsSkH;#9zvG`p7XcO5Vtf zWm7v|iRQQ!dF{h$HtG=4Q<4}{h3FM8eK*P!JN?S1Lg^eX&L-=M&3xNfzJ9|dIxl}QKWs-5& zy6@blt!CZv`W>~oSbe(#@3`xzgxeBvrk^@DqAWx)e1#FuZL#oo*ss1Ak(>-gx>A`a zJ+ko8nS1Mfiy;QUvLdPd25PD;5~nmx|4e~nh)3(16SUczJv&|~jyH0t0CpOgc=uhE z-g|~m$FwKkXmW5rKP>s!I}d7I7q#(Rw99VQ*zhtHkM^02iWe@1fgji+SJk?eGB3G4|OEjLyesb}?+Xhta&n_MRNX>z)0p(ulYl zjQ$ys{IUHXMQW9&U7kU?&Y};8Zj)pwZ=vz7o#DX*yamPu$QvQd#u8Rg?F;b)v4p-cy6b| z(~o7ts^6hiMezb=`2FphgF{^+d7`+)OQ@|a+b?OSs<9oLG_70$QK(j`_jZ9?n{+L2 z-3p(c?h#iZ0?Y1C$DVUto=fD5agP!CZW_@7d!CGrte~gEra`Feu3gD+%Q9A_du#M~ zLd&VC^HS2w_b;zgWVDLYNT>VrVX~3a(Mqk`D~U)OEvsh4ld#zBQ#x11%xk#kY*24K z9$j7+4EorwAmYzAj8n3m+MsKgnV>KmLjXm zt(KicAl@E1yDjpec3~FRLj*`_P?!T>=5ok03#n?X!EDZm1qYM~E9SB~SB)?b>lCi# zoB2f9S?(-fxhB(n-0MXTm%rgA7d#zHs`zpEQMtTkOQM*$4v*a(W}r`Ck7vvofPuI>0wTorXu zx19I0n4pc{uS0K)5k8=HD@T@%F!arZ?wZ)793K|F&Fs|KHEHw8G&RwJnea=i>rTDx zddgv=H^eWsYMy%H1T46mu)saQwj9rz6+Pio1fjN@S@3h>>JoZTEm2sLux;xr-uWry zJ?+#M3+ckDKb`d^#huN&rj>}PE|!LBsrMpsPcK_oj%!clUXna#C<$zTb{1=YRD34g z9?GsjpPe(!P32>QZb@cLk}$Vtv2=;*TVwVTdhmw#-21Wd%@=dH@o5{=v7=G^{!y`0 z@%CVOxz~FAitNFL6O!jGc9FihOMgnz6#k-!r?2=?mfEh<70Q`3!L1QpzS?&NUYFNC z$2-Kwshy=I*_93{FFv_6Ms~%5f4C=7G*p74$?;5@Zb^mQrw+?kZg1yCVzG$N+zhqm z7?F)ei}OgtAkN5req16~?X2jT#;+gq)cSms$EZk!2WOLakz~sX7YA_=x}F!3*1Z*c z7p@AQT9B<6dri{RmOxUy*1=OHWk0GR?*bK0oRBt$oag%xYUY5PK3qdD<`MgU3ygBJ zLpWZKaYPQQp~8*WC@@mOj3i-1fO0ar#`|Sp+QSs+M(Q`b-~-lkmC^SR(N@tu)ad|( zM6d5>?7*NyCM_l@%}@}FAUAdf?}q*LR<9@^>bJXw5w?zLNqzMR58KU<$i2ycAdWC!Y3yMI15CMkktOPcU zMewwmm%S^g7^~ki1$+4NL_}$jV17Z@VGnMr62#9z>YH_upu7Kj7r?-~GU*k_@7<{2 ztq8tmP;?s+m;phR^lI0{{uZ*Tc_5F`Heu?}5Kg?nJxzch0h zhAbu^@Hi;pd=MCgOrORO0UWsM&Z$GNA0YoYh5kJ2MHhf61wof1EZ9VuV;6QX?*zi! z+(aNUod(l#ruGsU&m*^7Wj1~i6`*4=OWh=87yd_^%s&m!B-usS`|Q%bkZP|0Y~d2S zys2BMN;tXvE$h^hwU_UT70JAM3&dyz2oKZL73Q|=jyZfCkTHwwF{pY4&lKa?k;*X{ zFxB9fHhfGucaJomHh(tTtzEwCIt$8c0KvAF_NM4`g906t@>>Dz-oQi$r=zD&31i}P z=3UbLm_g1p#m^nf%_YkSM;?L+iu=g!FEr)3K97qx&DfST?qA58;9JQsv!a({5Qw9M zDBa!|hW?Xl(T8n+=!OC1v>eG)p>3m)QKz3D?J!+rK}Mv)e3-aeuykP?Bt zFTm=>B1q2&a&eCvM?nPEUilvG;|NXQB1#1Cr9raPg0St~jRSlHxWW^GBWtd}IH8h9=+z% zL8jLwg0$uHm(MlI96TOv-MCYgu)8I9)$KU5blqz0n;mPWnLRlB4t;6U-il^V`GMo2 zuUOms!E266=OkJ8x3+H$vr{+ynoQF&oN^SM{7WagI4Lb;8pC5lLfkINbSwfRXS6xK zPJ0W8v@eCbha|-17WLeD7bVyvfBjulR-UC&*7p(9)Xz3i{cQZMLCk`u63-sH-c7-F zK1ig`!il~)*ZG|0bLa`55aX=dOWz-`nHWDjdGqzz7)2(2oRH38qQ5E;2q6N5(d%5# zm3_<6r!o*>>mqVjXDHu2)2ykBG%(POQy0GnT;(0{%|Nt%+ zI1r@PO)ql+e3~*NpsRcj`@GqZi~Zw~)B3)x8{^5F(wdTm`?@Suk|cG?zNO3DjLsu# zUWd*JwhVJ-=30W|R=uVEL3l^2rb(e|S#x6-3hfSUik)jFN55U`;MUrdnI3^8)d60T zy2=3K&t1#rj^6r>4S$XwdaYa;vd_2UMi-O|KS}>Rlu0hSHOHN<>J#dt3fHs)}x$+C=^Qc-s-iI)y!mI z!>))%b<=5U8I6hYDIJ!F+sC(C=nZcb%MRkq9u>f;ngEkcv7WsG-dKZ7zqrmIsf&{RC=u$eFfq z+~p#5`F0i*gK`p6=rwuGR`l4U3LKxCNYL5ST!W(3DOD$fkmtl+&^7nXz@w4O{w(Pe zJ}J#;8ils((StyLB7k{0)>+o&8Lgl;<9*eeG|263+C|c3>WlA!e(aDx3fV4_Ewx9=O$!&Kp1ETD@)3JU+`ECYn0hDr+V6J*nEeSxfue@hqq5l-z{Sr)jd! z7%!6@BRwV&q7tz397BOi&|v_B)qO$&UjT`vW3%zT5)(PAa=qH}aE-TuBY)$Eaz0;3 zl&Pgw4;afm)oiicIgWu6j)4Gp^GNFQp;tz>|4j^zJ-RZ*QBdpQwB)BT8I6<>@rEGT zElU1g>chBt=q3ovB)MibpEvJr)wG_$rQ`#HLJL>d$0rK}JE|?0|@& zC3V1cL;9$UJN?Y#duGLl9@;^t?7f;ay2F~o<&tbh|qIpz-DB*}tm4^tZf z;{pxiASzNB&WBOJRw~5|?KO+k9G}OtiX-fV{zhPv@3oL2A43xL-78&9B$3>yF2AaL zLJP=6ThQlp!CgRpGacEp+!Gze^?*t;U@7~x8=q#;?d^;c>v{sNENeM99wa9IQT!_M z!I9Tjdg(7)xUW{S-cD;ZY#Wn7awrRI=!v`>2L(<&oF7eeH_DwI(4W*S2dEz-5y=pj=g4eH$c6ynfh$ zTGVZW8f<1ZYGRuyEkStbqr5`z)}sgVjkHHb??=we^w3*4gbx_@T`&uZ`M zntE&R3lFA^l=dR& z61zY}>U<%-z^GEMp!ZhBZ0rexSNlvhKb4$%8_6{}J}I0NDv1#EEfiC~>lxnXo6s}p zpDFKq#<4fGU(%lUoPnYZe-N;&<%j z8d&;)PR^MXr6XB_2>%{ptPnXzvj;8ng@1=^ZX&;KZ4!#H-nJWVQSF<}E*Z=0-Z5); zz&g*5l}PHVeph3t6za`5VeV_!xssHn&hRS7iL)6W*Sku_^;G{yt>;D3kWJ^3e5u{y zr?{(;yL30MB&@^NQD%8fGH1S}F+Le86o*jxu=hzm6J2w%c3V^%(SN5SD|WUW70J)b z^~5c>{{t4GI+S=g(vrs6oE#44xVcxn@9gw#{w3E}dVv6k;WzwGYu)XVYZI9fdg)sa z&2kwQgI~p2Iem@|(K&OqedYS`JnpBpo_2>fz4s9MXSXvQP5QtVLA>VgV?$KsuQq(B zKQ%06U0;oXM{Zuo$Z0Lj>JLDrc*z*?l#w>kn^xp?Op6{HQz$+YR#?z2_j-7kOnuSj zY~+X?*<5g&w)hhRODem=GD~xxvSuIH?Li*nxFLnLit4u?PES0WhZO?e<>2bcq^Xze z7;tTQW@0+ZI3u=iUEP=|LH+oRtCaLYs*i@ovhtLqT2nn;oL_bdeQb|RI$KWr^*za1 z&R6{5q?LB0Up>%FK54VM6^Kv6a(qI1UF_G)%ryo|%Yd8rDrsUHL(xp$gi|^U&_-oE z9G^E0E5#!^wiNpKQMJVq&Rr>$2PmIbF=SL$HrA+l?=ZTsr4=>}7S7sDOpXm3q#78X zvf^{)JaH!tn~%gqW1kaFiLTMFB54DX*6O|Cd%g-2^S&vF4HTjq)$JaQ>m?V~Y_Z@+ z3_2IC?ZT*(8THj7lce!wCchbHUiw)Ka&iF;EEYF}-F|SHAC1YUjj)K}>zN(3z{3N0(r0PGCWB;+sCC3ys z&MT(LD3+P^QSex4E}07bIg)9`wJ4zG$1-f8Uo>jI0%tgVlQ1;sadf9oc^JhJf5MuD zTwH}s`_6W&59dg}(W@0i(ind;?+A;=pcIW!Us%z~McPj<$5|S#l7?|^rzrynDq5AXT_q zGU{n7da7}@NR>^0wC0FQFt^CENr9;pGcJCu#@zC5>b_Cjwovzzx$UqsNrfg$o z7yUu#^?V|N2;5si;u(j&Dj!dEn>s@xCI7(b)H(Zy%FQgAc3&q|Db0h)7~&Bq`TX*c zM-PW2wUll>4U1bJ_F+s5et#n!{wR5?Q}mSmaIzt68p?(R>prxc?(tPu#%PLOHR?1v zCF^ulbrpCi@uK$_5wON;5~5CI5`oZMWFsOgR2zXgQJ-v6as|OqUUy-}FRRAdh3D0Y zbO2~TZKUl!cQ5dlW)XFK?_=*-`5fGNQMVk@N6Hl=XUT{E{?*3xj?tWyU{v zK9Py;UgArNH*%%x4IeMd#(tyirFiE9At(!Sry6l;{CqW8Od>&-( zDK>>L4%w-mgkc?Yf+0H+(7CXEBEU1ExVh1CZ9k;`v}64ROxMV_T|r36!RZ5gk)A8d ztmwH|lM}k_bDXw3$=jgQv;=4NXZp>JVXOb$jd^bR4>zXsYUd|T(id}^*SWcuPOnU| z^ah^xNx8k*ws#^$6vqo61^alIwYaA+Vz+R>;yw|O_l^E-;EI>(vHBqF{^rKCbaWs% z4mM18&0d$r_G;iwZma6&&;(Cf*mehXdgD2{*thrG?}CybNcn8c7~urbWJ_FTGPZ|e$ zHKU2r7Di*mwMZ;(LS${yC8c*(R;CT$PXFQYGc6M2HotP6s)!jLhEzC=z=aD-Lz?5f zBJN#n^#LBY1&_n77ehAD!A>|chomb#d*+5c3l&v*ie#K&53Zup6gl(eyva!aS@HVr z6Z9GTaOU&|xx*?3ys9bWo8=j>yzyZ_a^o|YS9}8bSTFknX3K)2gNZ=j*Esu5~2PUatWJA%S^8<_f5r#*;Ynx7rh9Gvua{(@fjLA#P`*BDlYUh+h6wD4+gt8WLAT_&|3t$9d>0LR zzBdYV2&9@sATbSnSg1+}U4l-50O7nXVpzM*>PlY5@-^!!gT(cIpOaPRlr+K=d5^ip zcas!fAT(k(K%nSC0uczL0B21fK5P?B2-gxM;OGgenRxGJXm9>$FpmV*ht6jZ@^wK6 z;gA~(f(r*G8DLuofdP$G@m_*hAF+J%URdnfszr)kZJj{*t+o1j6%8CwZxBvG!4_?M z#jEg-8y#D+xhL!aN$E`kV{a?x>O_sbABYFQ#Ty-I_arTdccB1pcf^e^GWq%?xD8;29`Vd*~J@ zS%X~A90btgsG+!mrNFjL$QpEvOEp|!X#PMUuoEu*rF$)96I5Ndx34MJ8#nkY-+ zjFq;)+NXh1b1+HcabHGs#UL}HY1Zz`<37Gi%OK=I`aQYO*JZC$eNArk?Dnh=?wi@e zyjq4Tj<=V)6;~a)m<|;;RYB0|Uwu)JUr#-k%5PKrsfp*L2?`(6Por~19T(XTxnhGB zTm_uHW`*41{F2N53E=(u$rM(Mb=TOGDrbJu>?Cwj8$m+KMEj*6U5s;<)`!e+jgiE# z`%8~DLQ|8H2N8ChS>}}h?6bj#AE?`J`w13fF!dBY)pHa@1is4@TNIxIUq8t7ks!<< z548nHa!K0=@>nyA&EiHU?zG z*`r*vhYD4<*f2s)epA-4v{$lI1}DEz!0dXH_sBs66Prs16PlIjmNiPn_7Id)Huk}# zSIKm!4>?C~MFcEB!?JX&o*ITrtU#`^!wIP$0-P)lE`YXtp*Ne<;$hA+m-1BY4UJDD>lS90 z<`G`7n?V_Nuk!@7)2YZ}#7Wv5@MePTZoVOpn*>oKJ33VdG49P+&LRyNgyW&_zGIof zt3Pw%udG=VJ?_(HK2-5+=lN3q0Z+MOpPSQZl@3O0Lq%R&x$G(J{w8N_AF1W`mGcod z*o+@Cw4bk%;H+T?F2Z16kEv~ZaepLY9bsI+Tg-A$6aj*LG?rlPTZSVM;0NU$4f+(n zUNB-(c1?=~k<(w;@Mo^H=w3flj1vy9C4?2@;5q~;)qg#?YrshI?;Z$J|6TcDumEN9 z_sqpcGz||MU6cN1Ae!+?eJ?AC&!BZ8gN3cH4$Kc6RQ=BiMnIKT8y3O9Pxv zD=0jD;grt7#mn$nRm86|<*zDY`NaRhhzbY zdF2mQ&1dis0Rgc6j~9^tbm56Ly=uoDiL+WUJIS|ZnCTA!wSsmAe0G1C0)aB7eg0v7sR180=S%y zvN{gHfnyWAJSV2sz0l0Z$grgUemPR8RK8rIAYCO}vAlLYGlA_(n&6ttv5w-d=^Fdm zo0Z>XnYT`jn%o!*jg(%u`5Mhi+kEfgEGZ|!8FvD6CI169WWPDC6=Uk-#?d44p7~RX zn9$vw`=835I5jK_g6j;(+?Vn&yq^*n(@|sDAzNmKU^M0cJ@m@kt$@zG2E!c7MG&(8 z{#rrKDUG=fy8Z#)5#|GXA;R}*a}r_u2qxL@u0mN3=0*J>GfsVqq(f>IehU5t zqn*#ce~*9b{HK&PoyKcgdv!CNo#0;&7{KWS*t9C%##Ga+qfo1`dGqs|aP^yyYk6;#Ub0NkP++V)0W=i4Ls%TfPZF6tMpzQO`^83TL2Hd!1 z-Nr{MTB`K&6YeBJ=pWrQI2hNfHma=IK^ZtB9iwlbYbi?Z)Vvs5E>~Er;do&M!~NSic06G`_^=-*kTk6S^$-bz72IRK&y#J@PNqn`*E_jO3k7XwaidxSK%wQtmCr&9X!-~D<%u!fn-=MP4y9E`yLI1u?A%|PJ z(pL=*sxfW{nNvNqKCN^vv;3>0n=H4=`(1DWS$BQPZkCiKb(h5)uw@wpKjWQGc(QYn zee3ffdW~ml1<7Pm_c>*1qiIb_7%fyF_1rO7sMKrRVt7o)^7W-zyZQ~X=%$^kt-h4FZ=J(kSY{G`%4K1q;`=-E zU8pZ}mgA#|qz=KuWpoF3Hj;rLjT6P{rjPo>w~nncCz@s}e7;ZT$u}jy;cyHpZ4t4c3wu(J0C>5*Ua2g+bqHRPv-3 zp~BQ``<(B^ox0*}Xp(K-S{gsT3}Wj-iH%uoVlRHSKk=<|ZbCjQwQH#M6lu6&BI_t? z-gG5%L;Er%SJDhR#*!LGKdr^x#&v#VDnfB2Cu*|kb}(;Mi0vDb!S!Hnhcy+x6u>Hu z&OiQ$YXWyJVo$psX6Yn$4tAvGQzf!@TSIcbAW<@OQY;;<&=qoO*mLfz5as zQ(kR80)k5-UoMp@eN(eB)Q3-tvnjTnaj25tunh>9c;e8Hcdp5}%EzLRwwLOmMMw-N zg7pPR?2Y1+J#`STaTbZ4IiE*poeM?Mw=?w^4@hR{1m|9;q_?Z6>5=f%VhxUzaXi>Q zsNZ`mg{kzDu&06k!||vtN9p)aqObD>M0RPfKd2g0n|Sd8H+!V&wwM zO6wM+v#*+-yQsmrM{vO^NGIg z+sHYU<~(w@m)F}{EH8Ad6exH!voG0 zT3jfzO2m~UiL$W?B9PytbUNd)`__6p5Fgy-v-k{ZV;O^HYRQQpNctPX^fB*^#KtG= z#|#sgUL>jTBpAjXoAM?P4U;+dn1rnw9U;jE)-Vq}n9FO-i%9f% zHh3lQA;moZOJB~Q8!?s7LF9m(nFvT_h!0Gfv&_uJ;U);?FyCRM13Z{;24nbacEYNe z+jhWTrBvY!L*<*Ib!L9MiLmO71OpQ_ks4Q8$02F{-vr-IB* ziTcOKsJ%zT-vD1V2no4KAiXTX|8$)q%Cv`^_9(^Wt$yf5h%H@O;JWWS=6G|sbY~(6 z3eQ(l(@IQ2 zu9-sDA#e*ma|7f<=yT*~4K8+5Z*_9@`<{z9dcz9qj~1yxKIfv}Tzsx@!pDZ5)n{?q z3pUN`r!EKayYJ%dBJ?P4i!WcGip_F2DlhG711DqMy4jkYX#FKZwRh$GprJFW-gaLa zuP|m87>v7vPgh{{XN~J0X*(PnowSVJ+jDK<>l(;bL(ktR`0|GA_@iTrKpbU}HN?Rs z^jc1nu=|X61Wt)*I5pz~Uw?`(4l5#ZqSGT0eebnU+{ui}RT@)6gr_owwEHlWAHY_+MAs$jxpz+6I+G_Gp9WMyq*8 zTHn!J{#TL%5%T4MQsq&8g&M72hG#hJ3Y!;X-dO0LKlP>KB_BU8=Ca#vi@)s=nYn4# zk(3=Xrjw)7#XFC;y?{ogbzOxdXkOirf}(_?F5r#1RGeO^ST;%<|4mn!DK=gAXO$Ww zU_`e`O1KW99V6q=j{K@3ju{GEFbL%qgX$D-)Zmi|)<9=N2z6yEKBoy9wEWn<@jhjy z{hW?}zG3&j^T|GW0)(bu)99lBu>|(wa(Tmer*I@aZq=p3hkK0i4uV- zC=t*e7zu5Xm=@Y+&?ncqw5NAxkx$e`&(JM;I62U^1g;dh6?M5qM||&Dx0u`B?U*<( zv}HT~99STUncWTgQTYMB8X)to8irMp15-{4&;w=&LFCu7AUVHgQ-!4WKDI`LuN5(< zwK9CsY^Qns!>wwU*gBJs;*L4Lz+(kiPzvnx5l^K!YHD0WE)L6gEu3q8cwL58M_<=2 z-vtl5pRy*eGn(2k z+5BtYGpTme0yR=XkP;FCQ_y|} zrYaKQI4`83GTtAZnctcoyK*k=`d20YPizWcCK4PBaxvzggDE!lacnZZTOat=!_QYN zx^HqU6n1n3zC3o)XCtEPqkhAPtA=|1k(#~7h}wnyv87FM$nl(nndzvEE}!zX4v}bu zQpfB)DaQ~Dq=}x?Upn46r6Kv=!2HMtTzBxjM3?J6i{8T|n>2OS$LiGYFYY)X9LFyVw#&{IKLxD5%ASD447%jB-k#)M}2w@wncH|V192g zd8CQ{7&fAHOtjg_QuDMAtf_<7)bp@QQit|&_=zm5SUu%)sAo(;<8CjKv!;-tNV-5S z;9P5XgPBL6c@A%ACe0vmJ>>!8U1X^Jzc8x`cYXdN02swA!%K=+Q3XEXmZvSS;`9|d(qp_a9QnDz zrnlzcWo_b(B=UDI>W@Em-{tCb0kPfzB<4PddbZj9GBo|}t-XW#5*jeE09g=St+g&( zwRXWEx8y=+C_W>fq8TOSAx&wLn2D_Un3wP5<|Zr?uh^kVze zeb5D<#u{LpoIz~G+>XKC-SXbuaml#xakcchONrjGjilY5Z!ChDt3A5E5f!s{QubK0 zlI4afu6e80O5Kmm9zQ}*{hD?W4J>d@bETpFBua)+8@yjwbt4)kG?Qx)PZm-~bhS(~ z$kSM8t0^H_WEV!GE?KSBlPU?d@oju|qS-TgixFC2*ecT^grvij1i7bz6L9T>a z`qXcXflq;!&XU!~=oUt$E<;fyEK`TPCF}*g@O#58(~uIzBiUBhj7U^!j$Eh({FhmD z#SGd*04oqeX)Fn{H@dfW3i6x41TO3#v{Nj4q90UVu!te*lW!mgRsb4#(qAu0i*Dw* zA8A$#bn(`eF$oD)TslF09`;q=Ti(rl{ckjq8)f1}m;}@O(65lv%|t}WZ+&mUKm$V_ z$clSdR#}RT&QQvyxghK$a&Y!jgqJi~GPC-z%H#7Bvm$Bc6%fvR&=LxHku$#G230(afwxzu2$8JX}F%sXK7IGnXgkz)B_LhP2ATH+58eDCIsxvEey?fe~s zjP@4HJ%)S)dF%N~`#f3pEX1-?FUhW8>XAHc3Kww{Sl!K6rqa#k$IfUwo>Z=D>=3SK zJU5qOoD2@JX0ETGLCAX(yM9h zSLa=$xW%ney$q#(zOKXThGphpm7qQ`csY6u>7{lY zZLD}5%7)C~?(aWy*r3s&lCdSgslOd|_I=tnG_;-B0om9bIG6N=lyjO>mgwL@%@zPC$gZArhf4=5x>3wJ zNbR8{!6Ub8@T4BnPDx(eXm8RB);ty3T~QlFGl`=9$=I^8e8fB5bhsm|YP7Ff5a8G2 zQu@cOfO8j$2W$V@#zR%45tcGuWiDOVtdELBc;_VJvh78HB*Br(?j$_ee=4lmc5in> z6MGTA&KP-A#ZIXWj*a9yZ(LE*w;}zz9YbFS@19>!s(r=N3HX{Vek5l0yQRyK)1b9lx11 z{w%JrhhH^!ljB}@OWHx7ZA~_seK`mN%8y|Kz4Pt$z0j=t_ReBGhrqV=gKY0}o{ujY zEz2h?Ft^BE#~?cGChsE8+I2c_jR2#Jdfb@srH%Kx;3Za?^K9ORHhZg`>eL)3y(*=GM0;xUHfJnVH8-ZD| zLM1ODpnHI5oa~OdU<`HUo2g?^a4YHn4Fb7EkcsPqK^~-k@_|o2Fq04L=H1m2()#a;=`Q{< z>ZWfwcxT|{Rb(!1g#)p1%jAE$DnFDU%_L8?^`X$#2QmGj zt&a+AeFpE^`c}*;#T$jQt6WQ2QJuoHgh_0BZ&c%z6Ox3&1B%M*t)2P$*DBARUqkqw zz=+YV!?IHHfMVo>tMyYuAoNcWZ!6C(!H#5F+ViAv{;%npKn%;XIR!I qxH|HEO!sg(-X-wo^~ol*oUPk^MSfmrEFuH#6IzE-;r?H$w&QOij^wfc diff --git a/docs/tvOS-step-2.jpg b/docs/tvOS-step-2.jpg deleted file mode 100644 index 3e955050855b79f1d8d7b6126fe5e693d724a9aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46112 zcmeFZ2Ut_hx+ok(MVd$zM2ONmN)ag%L5hfgAVq3alokQ$JwcETq9C9sMCl+9>77Uy z5RfiGdhZEf2&CQhedp|b_xGLWp1sex``-Kf&%XyJYb9%D&Ac=7_V<03-ndflh&FX-=XF$hjXlaifr#*4vw_#{Pfajp&tS8tmUe-9tZv22w zz=K2X*{hGI1U1WAI86qzLh=ti!{`~f&T{jd6BZE_6PHj>yrOhfS>=Y7wvO&iy<2xp z&CD(CSz6gYdhFon>|-pK{u?3@KCh@3dc?x^5{5Xv9F5?;>-TySJdsSe>M5ny8PSO_}5|h7n1yyQ2g@_ zgZg7!Q%#F3$mNoA;Bt)bp3Qa98}3s54UBTTR&xP8nWG(4Q0rr&8saBVx2=*M36w~&rAE3BM?!;y=>D51F0OP-Xe{_gfC>6BQDYz3w1qu1fl0={t zU1X3Cgt%@*xdp7)^Ip6^74+dWurMKdR8Y6s4g#A)IZFk7XMhmN5Gv?AK=}W-eyt%ib9y9M08kFZ z!4ZO@tcyp)BKA3-Q$b%`5W5%uUv5IlwX-&a6DSvapmb_P0b|_S(6pdn&l$DnVn4OJ zFFZOrhe!PR2z|p;hvyJr3zWAxPO0-_{d_kJ#Lqa~XN;bxduSw-Jk}f(Ex&W7Hfa6F z`=Mrj(;~BoD<65F(`fJ1?#yPR*I2m6*6OUYdHkH=-NyH>+mjU`R_Y&sJy6B2P@aJg zfaYmwa%s=fE_N&ML*`}d2FyzG*Rx`^)S-?p<3K?NBO z4-&5eM{k;R2lycz_~E<7FE^H}->^2Knx(X?67T`$EjHtDLmT{fCYx`KL*h!jq4l#4 z4^AupdItCqTF|vmp-whmDhmZ)iz2D6Q1WL;*@y#I|FkaTggb>J@wpVq0yx%6_;JiH zu}UgPa1;D^a`}cr!vQ(VW}&BZD!bIHlV#H<*nk*-=)O2e1#Ld6rh7(9sB=#(Xcg+o3;V+lS0jr3zh zjQ2o~ZVwFm_fqsWkt9yY)rf$ucG);P5W(7&xhuiPv^?njA=i3|V*3Xl$@351Ic>L} zpo?E_;%|l!EVI`ra^#P2VgG@4alWmC$n7ofCh^B@?lLcjLzbr0-c z(GP7KH!I_=CTEE4De{W!2y-Mm=lTizIX?bQa#ZQEXzNUolCT>pK4eeroq9d#tT2^L zmpeLDbuH=(n2&Onq(34wNRlk3SL7ZktEi3Dcb>3N7Ar4`xe}^>T*}n*I_JhOoL{_J z0G6(EhOJT2E5PT|TC>=oVnKFzck342GZd#!A0IdQf({yblC4!_~-7uhhEyIzbHO;y{J~Ih1=D{(}q1J!Qxhx zlg6G718I8iwP`j?dqQEXysFw)mh9EmlU}G9zp~wLpqo5(Crt_!kb?;ltMl@%JLu!w zW$8?ePoGMQRuh~Bvusq`F(X(l5zg!9mUeRrAG?{w3O&4i(NV0opI-I4WRgo-D>Qcc zLJc7g&J9yn7^YlUJ4!_g;#3RX$M%^DZfM!80KkVF1N zJZn(C>qZ%N1g8YS{5(`B+skHCHJ(ZmcUI2tO1`6l5`dQ>3A!6cj&#<{adYY1x46Hl zJywHMBo$g}8V8fcmyA=$yfFkFiHzVYK^CkQ%yzdFo3ftfEaud?!s>LUi&oZ{|099l zLlAyI4*@X>UYp1ttW2(ki#lOf)vp3FM`f|}w)yVW#w{-9iYzsk$qz|au3B>6fA2MX z!G5_`HLPGsd5rgRyF;xmgJ;97a<^%VSZM6EX_5K#x)&Bu+8eU%g$9;(sYq3&LvR-O zcNXCPH!Pr3bT02z0Rb`B72(ZiCo4b&84N0Hs20>n9(uL7pZAnmlq#uu9bb3>FJ$2g zec{L+kNdSk=e;75zFs;o?D_Q;w~BF6g>m9ySgaW8>K21oR_Oojs{S8X1Sfn5va9Zd z{-)lj%6LpT@XM&@I zvxGHD&IJ*C9+eZV?Ck8Ozj(g&|3bro^(>5V=$zNMr)H0x>6|`8C@BfPjzxug4}hKd z#bRmw^6m88PxNJs(0^9*w2>6kUH6R?dVl6hA;f;ruKj9xlQQb@E!Lc@xvzC~PcX^j z?=lbcX3~#j()qP&0a;BJX6{+AnA?9CkR0o5>A7nuGFta!*l+yq;u{hjPRWK~wlHaH z-&QXYQ%Hy${4i8$AfoD@6LIDW*ZkV8F2OQ4Ip0$HuTxclD0Tu%M_}S+*V(pSRj_jOU$0bwK zTN$Rc@OVY9uzdm_D4ydEX!JVo{JS% z?$VR`YRQ4uyOga*ngfvoA9*8<>miXUO6~eH+ynFAGX(H;tW3g*>^67DC)MLB@#8Gd z8h?KIAQj|yO#SY6*9)nrT(SJSF=d>Wkfw#Fn$DXxZ4^{b>Q66CH7Ie7Zf16x5?mtG zEXJHoU;D&)*iJ9FR)R2WHr)+o~0Kd8eT`Cx?W2ycHTRrz!B zEz8rZZ_{4&%fFgA+3bwnX-$l?V;!s-IEEo9eOHVlYtHX<<07{DDnqrOp61DVWi=NY z=KBI<-}5SI=3}M#h<^pUVY5KvN1h;uT%p6Hde=`@dTV~!uIh!!77^IpY|VIyTk1We z63-fk;^9WC@p`?|1TY_<#}wh_2(+_C$EhF(ni8k_zKE$`HJA(JkxNthf;DfK16-@P z&r7lef{Zxv!Wz_$_0@OF!o7xweR&7&1`4E!nbb!kPcO$iRUbZJ2%MbD?{mzu zYIcObv%G+cZFHo9L z%R1aceKadp5}&;%NF5@l5J~_o?=+x>xdCdlx(YrJml!*>YqQ zCkIHW&mjxf`7$^=5fA;*lt?J)WfaMY(vCxrnb3z9SqR_h9JM`=KQaNT{xJ=}BUW*T2O? z+KQ~&fj{CC_>ag4+FUJ_{{u$p{s9|9RaGS8{|2E4{}vTLobHcZ_yaosVepki3}b7v z_!!ADZ^lW*c546W4~e(ZbIzPL`hxdgp6Wk!wHUDDP(jY%Lu@k@)MACe6&=O>CzC;+ z|JEp&5gbRYk1Wk3So2oE!Qvw0+ju%rx29%ObF$36D;* zUz+*zAdoqEKv!L9B~n2roT;GBPwTS(=_0jJF3JGZ>Bc6M!h~3cQ9-P9C#WFJ_YevQ z{q@j~!VbacQi5gCSaT%FCGpRr{ih%$5}wzkky*+Rgv(UW8$`QC3*vh|3n13Z?yB1Y zV&(w;6(Gkl?vOYE%iFo^KMvKL^}pJg>_5yHj63rbx-Sk`Xl5BniD`&GfnV?+#z7UJ z|CUJq?XFTm(fV%@--!T?4hJ7bk+jaAB{Mt)OnAotJIVk4QbXq1mZAIV0DGD3q5ypC z|J6zt8!&1T-jxO$43doJ6Zom1Z^V#n8ym%sF`NPtb*g5jpikW>6ykreN-%~@CewDa zTs63Rbjdld_z_2$$No(U2t|baP5%^zONHlUpgQl~+gQg|RLq!>o&Iwk2dzb>fvLlP zmoK9nKOBn{1FEFF)q*ZskP?yyFj8hmtNe<5alApA;rSusZRp-Z$`QqT_d1X0F*G|B z^f+-sf6k&48E!R@Kyoj1QL+7%neXRR^VFt|v#Rlu#_=p&OZx|*j~=#v<_$twjbK?` zsF}?t{)n0%dp6If6Y_Al&Ck3#{qg2zf9JH`th!0Vqt}`Zui0*WikQ=UmW!Cu@teME za;S<(Cj~Kt;VYh-52eXwkCTx50}~&Go;)qiIifW}wbzg{)j{_t-^QR^h`CG1o49nR z!Xiy1#(WEH!eA>sHg)F~V=Y6&J(cs9MPZI3!A3+4lF=aK0g7(J-lQHl!1*0#E1Y1T zcrFJ@Ur3z|=)HLOt>nBU_}u~JAu)WeaKxr@(5gpT(yyVM1os_@^}M^7+M|comu$KQ z;bR$PFJ5B|AisAniI|>k)_AKn)&7Y2?bLg(p~_Et=ED^FzFAmel;$;k%aOzvD>cO1 z>8SVTCS)i4ICg!PKC-ktoVNFzjPy;^Cr7A@6B_2}+FUK#npJ934=k{ex#ah5rQD6X z*L&ZLS*SI>DzA4F71msNpL|PVH{w?;I@v;BcX8%d?h0}$erU*W+ONW8qfaEH(b6LI zLWncZAbgMJ*HzR2f*`I$dd18_>5MZX3pJp4$z}VAv>SlliD;7s&l`R?vWP6LJYlPe z6Jk{`j&WniSQ27PW1yD^#Bbc|v~ZRwUjhWI0Mrq04^ry<%+0!xA>*0_uV2M_yyqp4 zg(O%sjYui{fDab@Y=d!W?xbrccm^_+(JEp^H#e}K@HeqD?X`;N@MgK%F_JdS(bHsb zCp#lJ>Q0ifc1=9#V-(JB71j>tAStKeCkgKsSYi-dijr$;(jR8jk=bikhNB0~x+S?E zyo@`qaZWQ-q5P8TkK=sj8eiK_)GRr=XY7-Lctp2*OtzEuT%k)9l($DyC)&^6$?YhP zQ7~c3?rcekDi91e{QdMkY-S`F5fw?g1a@5d{J@v=oU|GGs$NTNa_+D1MD5BUtuNdQ z44gT7oS>Hy$-G-nQl_AM@E_oEbQ|=U9T?kOINOk5W$6=QuvvQISNmPrRKcGN&m-k{ zuk9te=v#0!kEUfzRw3t5rai{+-7UY}TL+|lh}-C3^9F6=jdY*jDXcEuhTw`lYcZlY zb9|sk->b+fH)ozQul!P{6fD6ehMnNkQ}adTxa1^NMaQ`vXlQeozW!$!X+6?KNeL8T zDyW8q%m%9{mDi$zUZLC3c)%f(W#H=#GS=q!uT~oB$UjV9Dilk-gRqblj5`@Lmcg0f z0v~$+aZ15fdAD1?j8H|q2=4|nQB;EEns8C^D4znE*)hk@_ljj6M4pTlyZ@36bv)kM zJ4*EF!uivH8U+6iWokT&eTP@aA;TN#@?|pe+FY56Kc?%6yxsmVBUP>}wf%!u2n#Zf z0I^g%m3YWvT1^+SoMl_biNCmbh!U>~emT$J&?H*ijV@$4Dk7Jhq$Z0?{u21)m4EE8 zLG`HOz)atz#;O!V@Vt_*)}Ka#3L4>*-1EMj!YnmHp)S4l8wTgwg@5JEu z{nfBTBS-d08_c9mZC6^Y9-FL8>_^iwV`$!MV`XLW+$>KM=oD;!ci1k+#3r+^$>y$6 zA7p&MR>cRRAPt$#=4Y)T__LdQ_qmKab_(8k1Wn?a*ctT=$b8`1%L>26vByDrb9LGp zOV>KX-3+4i*+~=LvP4;%;8N>C_&?VxVs46X-RvnI(u%OrFUw8q<-ULE)Km&;NIuWG z#9KBY=j7t~n0VN-WBzn!V9@Bg$mB}WkjZejOJ-bONpQ2dAV-}b{^8E@KFnhA-P#c{ z4g#p2PDCiCtwsGL!D2Rq@ebmwolEsWU_yN>6RV9b)64SKRvm{p?-CLGmz(1<8vWPk z@ZDo1-q{_D<6LG9j@>|IJj$EQ#7n$*+)q9Dp>+yv&)Za`wv;FGzB|xQcYfTP91!kn zYBV;GJ?duVv?Y?hoiti7UsJV{iyhT}hplR2wdw1;liIKLsn^bdYzYvRJzOvT9yt_CS@vDxN|8hRt)q{sI>8ekVSW#EV&l3nrxf#Ct~sM62fm%!l5KS0q59(j2h>%6TqgH ze|PfpuSo@$TkGS4QjRC4-?Xgm$rcovdwui_Doq8o-3oRAwD?3oi+_SXRYk+EXk3RPTg&nrUzOLxbY4h{oN8-Oe z*|B_%m*c#*%{r=27q7(dGa;|JmoN!*VIZfe(-3;xqbN!^sl5&SGlQ+n6i4Z`3K_Xi zYSG7G7tg;rID1FqF(`iR>TV}n>I;kE(j*T=3i+IfoXP9gKDRLYV-nDk#OeZ6`U5fw z;YVV^0)n-EZolfz`xS!d@R0gJ7XtT1TJu{$${8^cfJva@GQ0*2exi z?kfEzlB=ekwc++#ZwEV&a3oAzui%z*u(ar&Gn{$iaIMZ*um7_9ya6hyo;dcY*R~2` zT!8ANf-s4A>?ryXFf}lPnlyH$-M3i26SbrIoFso5}CG(UlKgLY`deKg-Izx)6K;*E&akat zIeNl|ew}1b11O7#7{nH!l4_-IuKtDY(Z0vIN9+&q5C8{Ln@X!&6*{`JovB>O z)Mo%E2x|Lju>x(~c@~&gh_l;ivl9&^hqv9O_c%A=Fq*z{^cFdpLEc&eL3c39JQRi zi5cy@ixB?>yv9Vrv(R_w_5I47vmrqpzif@Vz|W6REln^ABRzjUR(gM}QR!L+QBVDa zy~>lLXM>AG)6`Dcsn^bOmdO&k?)Ps#LDG}o&JvQrTRgbsNdsI>8|tKgMwPA3HB*vC zxpibijZ&J!FIWC0&oXh)Pr)m;x44d96g+3qu>Gvy&d&2t{*B|?!5<2Hg5RbryJ>mQ+=vIr3CD%5SnJ>1=8UdEr9B_rWH+}< zE7wYWLyO#)-+zzEFw=~BDIYlv7Sl1?csx~s#H**p_R;7`O=n82)lS+FUD55 zPfX96Sf)4Aw*x<#{785;hoT__eL;U#+LCvlbB|7kByN`eVqw;kTs2R_r<(ie7jz1l zo%J2Vmc8=5|K;8jvwn`e5U+)qR#cSASrVJ<7x={?l4`!jrvQHN=!*}jgC!GjARjoDICAgD6fJNS!&kgK#85PE1%57)_iq4{lYa&i|OwXY3H@RU9$N z9Z7bJRO=af%YDK8VK!&>JanRB78OT1eUAjfosCi-pOu#5RSmKg-Ku$Y=yC6iYZt~o z!|g?DcIxX?ihzrUUcX#C|28u9rQWqB1(KzyNcPv2dVI;zNEKQXVXF#`f!6e=YHoJr)rUY#=Gi3y8E@w~6UnJd67WuQ> z8L=?08`8-wARQFg3qUJ*QI&<{p{L~$3;Cid_R?1VF}m6+uhI_{vk#%o)xYGkn%-s0 zl*MOJoY$Luw{i!%6A9w{DS3!C8p=TZ%#T^h_sO|W(CPqveBy=GyXb!ha`JZ|ixDuR zNF*a5+d>JV_d=CqM=kDt2m~X34f`3#I*ZnLD>0kTeCIG0ph6w#(oiY~8 zN4h)?m`esGj)*NYWpr)&eD-%n6t6f8%I@T*PiQZSsK(_75jz|i1QUYMS7|dd3=Hi} z6!|4Q&^y9?VCzrNVLxOHT0f>Z#^v;R@2@bu=(zXD`$8=720rRt zcjeIJ)xPGcBWDZ8Ba3ffmSFJ$e}wJ1mDu9NDM$Bfqt7oJxpC>o1v3xzeCuY@l@tnq zTuQ(B<@m|2?O-}4X|>FIu{cAk-F#T}`$`K^klVltn$>9@$Me(a!Q#SMHwVD?CN~15TWv5lAN&_@yws(Ftk6no?z0&|7Ndr!kCs5ln9Hegt=F+4wXggnI|Mmj zK$SJzrz-g7y0|%iS!^!I$;1`>uugcXQ~zj=&PZ;@usYNHsPV>)5i4&?vDpWsxZV7qkJr2d-Y;*D}VAB;>qwmCEc@X#(a1<=*hl%66z`r*@2Ei zvQ+J`_}h0JwK^XmW8KtybFUBTiy~zR3oTBAsh68gd2=M{uK8cx4=OO@MByWoC>n_hkmlYIS}RQw@==c^)J_;0w&vp!Q*T{hdNxrmH9xa(pE9vtal=v2($Iwjhm z?gYL1DvjF#bEEX6?zvh;C4=p{GzzUFVaj?mVDf}&8^*gF5d_0lpdX=r5HYc&ku>}V zLJYvCLg8YB4xa$##c5$&%2?uTM?<7Sb@}kYB|V|tL7sNl`NpsJQnmYaG?vkTZ+~MB z65S|SVoP%Ut}f+V-*4$Py0qIE(IeT@7DSbv@2)aUQBuaAm7PCE5pS}_i=zHb&GbMB@!@~bCkf(IANqS za_UXT&polAHBXx7^h?>6@zsgrEwgdI^X2}rmN$WR4LHPnS}SBC>7c9mYQuNZ-TCM| zeFM=uLpgg-6glf(3D(pm_uhPYhUaaPn&feiTpBnGTvO=sen;OkX5Pv-%5rRZSAD{tLhpM18d@7!?rVv7<{ zda86Hk@(|2gOWB*vq&`U z5hi?eb_9p34+JU2+|>><&|FtteYLek3hQO-l(Xy)?s!lWBo4A1ggB$3r%w=QalDqe zc6{>%oL^|8J|t4wok@UOW=T%SqgO)f3@eXJJ1An*Opi(5v`+g*=8>Y$aw#x!N(S2G zwKY=Idg4%3Ib_VD9-_0+P7#FV~49Kxq7Hy8H&6k5v5CaR%*!YDFluG=}gePFuD`Nk0dDJ!j2a72|@Gs6je7K?b(gaXAaGFs?_Ux zoi`9D)mgsY;wc{=i;pD@pmE61=Bw~A2(u6R*(KgJHMyD^evxt4;+&fB%_QA&vD^Tz zD_+k8j_JsYF<39t`ps7Ke{7fYs6wKkTL@$j>^ipv!-tcz8;usEVPB?I z;^q#XH!6PmxoTw!s5VM_Gd7mw!+huJ@=qu4wp^gC6fv!EA{Z?o+xzrqSvnkWrek>I z8Fil0{CpeeL}#SxNUZ*D?z?}@k8g7LUKKUEc|`ZLel* zCJ64g6K{v@PYHiwU7pgDu~d358G@_5e2Rma6t$)Aj_b80CzmLqV-7t0y-bH?Oqdbc z)sdKGzI#oJ;?7TH1XGPF4(|sT6mO;i~7PZj4KY59*=O_DsfkcdlwUh(Q4q6 zam}l`e~$h`3b#~8%8>Ts`=?M0fIW*B_l^>VhZ5uf`Sj2WTJMkOv^;H*)|zU+V*u6H zH?YIU8R?XiW|XF&&n}d*^vkPx7tMzJXn<{RWMOsQ7mO}5M@Y9^^nKa$jb#^=P4hF~ zb_C@w3k@w$E`Rk>YxXXm)N##!lv`T1b1FA0MEA?ji|?0eSIxSnjrBg&@F}Dnyqm&b zW9dv&7p%a(sPdU5UM_%@{jj<6&c#-M-S*J2+hkWxAdJxMK+CtWxDy5~1I!2|fCi41yo7^n}ob5TSH0lqR@-EzfQcilcNP0=Tu z(K&Y~)^eg;SJA5-S&`Ur6YT(DcBb$~BVz+~$|*t_NkL9aNko$X^DUw`lB!Y)z&tOS!J!DAcpE42-mS^}ZDL8ha2$QT6|1gT=oMz}{`i zq^Yi~4|8?5dhdLch~&`X;p(5}bc~rf{?XxSK99!;kd9+rpD>c5JGy5*u(w*-RCyT> zn<#>1EupR9wwqf%zQL9_&)x;^Y57s9D%l7-K0@7WLypd1c6t!tNL9qs2=t7{5@Vjs zW%FI~6Ym+Pn}bX!by`5mcVg5zH-<5*^~-g|>ge1FU9~i>bgkGywJVV}Uo8>7W>fkL z@LAhP>wWdu&dW=2u`>pNtHV%*q0ybVRSD*y`;9JY6-9hgI!ny%$VF$L$xLa z{a!QKjt<*~)x%6R)vDOX+N(U)+s!V5;Z&V-d9z=E(F~%!$8tT!AF4D)aOT9N|{_kB*lRIDVtkZ zxh@~U+xA8mC%-A5zSI+;t1Qr5kX60nXR=;OA=IK<*4*-fKc%!h8G?GhMk}D;5vtOv zM#F-a*2X?#I=ejX3Emq)nsCshAGYCr2muQ$$6!znl$ynTsVp2gL6O<|_5+2x0r`? z@V)nPlT5YVxeZy`d$Wn3=LqQuitTyo7MD}sl}gUeUwXXpsMIO1DXUN>F@0(py-b$b zUk!GgM~6>e#<{m8hCw*t{LX>y(N#z~f8SQ+eZG6T_z=UM?H*3=yGq;7WA z)@jyc2a5w-yCcDU{#s2mNgLbNI>Xc`pNHwm!*G<3D8hORjbCzayS_SpxxoEhgwQec zr6>76K5LvPX2oDSU$!wwd32qN(9-5MyK@Od8%hTOc z7US*KgbxsQ)!#|`SidNQ^UOp&ACUCjHgMdMKx`eJ{%J?>C9S`_r*~iG4N_!T`K{HR zC??I#=xBf|<@bCW+(=S8MT^NF_peaBu+MKn*os&u=p>w*V10aqR`u@iFWUzx z3PjZeoqNmmjv=91`G&no?M$-Df@94nz`PvP$*=NVaVluu=$R~>uPf_iiw{qxhT5?! zNqQPVLBUcF0%l(Xj`x78kfaRvFYZKoDiz^%Rqh1AU!HJ*OrUP zhxIn&&+2Px&mW1FdE6DBJh>sfqa=nh9Wq)8(Z^e~7g-#b#K9A;P_`q$6J7Y8A%qhP zuS+w)BcBIU(w9i{<9l?Q&Wdb{EuNZ1C7(^5RjHPB2MgtGh>7;bli;;?&}LN^CbG%oAB?CrX3-|SB+8*IKrlER86sx$ew%?&oiA{f`c zuVso64a&bH6&H6dYfTEi<%#I)vU_%yXA2MBYAM+8MesD!xn#1ICt8d?M5l+S^yRR2 z`8<_*f)V=`kz!{1S&0oqCp2I4`s_9Cyv@aVVgnSKUSSSM-Ya)~3ubl;WqR=ShpN-$ z0nI^#Ysp=GT=T2hodgK8qI(o>qg?8W#khPW?k!J>Tn`>F<}{e!=No*Vr(bf~A=9{LBHclGIPz=@#ZC>QmEXDc; zx=b~1SW-c6(ZInf!_j@IPfZ2>>y>7Xbvw52K7Lw>cM}$qyJh5*I&oqS#(N4uV`g`5 zYWkzB$sZ6dlBn=NWVknAyfJQsDJ7Vgf99&`Jn30-D(0bC&HJ9mdyzlwaRdBbL~D{E zA$K+|#NZb)(vAPyR z``P81CRP~K;N6#kNG*LNUn1G5~?jx+Qt<#ZP2qV z*%KbBSX?J*$j3IgQ!-t?TRnE^qo~T6!ZCAnZZ-7UcE|*lWdRvUfe?6t?LS!eK9FLs z${@#Y@@*kL&l?3^Ui{txsW*Rj>As!Z1;`-XI?8H$ZO54P>#I6rjH;DyO3dC1m21I4?Ht&&UXG=)kbMh}|U)bUlhB&y3 z?lPK4QI{r6w$88xE6rcQCdQCt)=dtjB6cu>u^LihYbz~@(gzDk3=QJkor-8D_lf*g zAoQ3k`MwYDL?!gh>g0=zPnf*rL^z|+D=w&<+?PulGK zK$V2AyE59mJ|oiwm|+>w4g+zSw79Xi^JunUcN|@u!X*1;q;6B}qK3Cn%)*^z1I@?0 zJmK-3KMPg^_#*)2{v;I?8HrU)3y0J|KC5>XX%~j%Zz7+}EOjW@LDN<=;t%Vl8shEG z2+nA z@e8vD8_?rFC>;>?#?$qg;n?H_kxz3oOfGKUp72lQq@Gz|GQYW!5ZroIPNz&BM6=2a zj~&!%T2pSCrogkJ8crChN;fvKFcN66ylsezgK%(bJ?97}rEjSV^NU$?&WwNFGZrZU zc$PlGwSKlgT8a@GuQ%2n!|#OO`ra1~N=vVBQyRCp!4qVl&fFWSyQB5?MCzr00e1hL zt~B%+cM|U$l>KJScwp65k&x#O*OkGqElXk=#(4kHdThV3u1Mq9z`TkLp*#fEc5dIw zEg`E#CMsLfCL+oIWn!hB^5ch{%X4R!)hazA`=N@5>acnCfLygtj5=#}X4cIwM}>+< zbH!cZF{>f{)@`-1?Dt}Q*wXd7w6pgN6e!y(URc_8Ag5kkW&>Iw8tay6pq!(RWS%nW zdV8W(-r8%JEyvyMM=Lq&$9t|?&Lc)>G`cbvE{02(4#&}H;I1`w)_wR^{WxM(&%ASP z!Cs=)wpHIc$2$5evFJ378`_3IJMY*oSrXKC1db*dfJOyJHl=)29coWFy7p9XC%csC zzcjb@L@Xtj1}O96ZQI|!-Yl#!=ot(_;h}leyJe%9ixOxN0Y$;B_fVDX1@{m{j3Q!3 z+z)acw%3KvCg;Efg4GE5xlV}FmP><;!j7&bgh7EwdcO%<+cpNxK8cD>-_KpCX6Rtv ztR%?wDn{ZpiPja<5#f8%Pv(;518nB(V}+$QjXvDbLv;^CVr08!Vlkra=;&!)Y-vQ1 zGx%(7eYJIh1OBGWhq4-ZYt86axau?4@3x3s^7I$n8bMYz`YhRutxk7CM1CDY(!LaQ zCC?BIbca8|`eZw@_p5j2kAG7r@B@~7 zLVm{)IpGJxV#aBIyBR}f{;Rt=Rrc>6Ezzt>T3!`bLij-K4vf7i6jwy+Owa>PCC>aN z*T&&A$j|Kj_bErv{noAp-L`8t3~)LXTy;!Vh;Uhl;i`s)=*60_v31(0#BV8_k1o8V zOTBmb0#lOw7XmH5l0c7>Z6EZ%(V8jD=8~q&_5CO2rxjxux{bH*oTTzP`^CijPhqpN zV8UIy@8}0;Mwf9J!FL_aQZ+cy=u%;Ge=BLdJg1!6Q;ghL={OL5|0Vj4z?u#ty5QS5 zv;0s|+{z2}bI#`G>0?O0xlbhmj0J9weFS@B`zpjPU&TBPcb4Q4x^JfWZeG`1`*j^1 z;2pB?k_BCK6K)Q2*LM{pKXqfHMh16|&(=i^7o@93h2+i!Gy z9c*f|X4I~#Q)(IXOLBc~=alG9`XA)IcT`hdw=Rx~BE9#jG^HvDVY5JW&)lp;-t zfb>Wdq<0Wdq(~E~QF@Pb1vSzol#qm86H17X#Jk^f?)Mwt>-pOG#<=I+F@FDuVT4WkL~22Wf@h|5oO!?2*-)>>6R% zGOg+JGeTxw{X`8tfYssAK0{#a0}Aq&y|F+-6{;}YE+JW)-E%5DcPV}sxj6Y_ zW3?u@?8!oh_o>mJmu)8jEalvbx7Afn6h-y7?OXMxLp1~DB_tefperRQoShUv@b4w+ zXy6Z0O!_*aOS0HKnzDidKb3jJpFC~;YB)r}bR(k8sOjB0xRGvy@@D-&gd0JS{YB%2 z^7LC(w$;BMydycLApXc8#^ctq`#qx%-$ow!B7+r)j|qU$xKxk{AVFy0+{H2SWv&k^ zSyqjPWmC2)gLf9r#W3}XZbcYaeCe`e0TcCy0Y12Cr`kH&<@uTkZr1esEY~T>83{M` z=rvw{o{wvxdwl2XXPkB7ntW!44MW!}>sC8nsVczF1$f9FEM`DPb>C)BdgZqeIEn8_ zg7~IhrQq9rooDGQuS6Ip*cp3l3(VTMg!G@DH3uFs=w8GXTF#&W#|!wfUbCmI2MN$K zxRA#t0?RkEFi_)Ci3~GWA-)iy8?U8U3XR>`JR0O)Lb9ZUg~{)qU24VXsXu(L}n$ z2J4CN5py5r@cm#C&9y2n>e_>-r2a*x=ifp%@Nm>Oe63J#iV0R(UV$t~6nlevs zs@=y3@FqZcMR-%T&=>N1>P zSW~rVIG;5qoow(!Q?oXL;r%DE(ly>04(4QpMRA$m%>n-Trw9TN-n9%=SMGZ>Ovj(s5^D0erp@m+$&jeifV0cCJ*lzr6y^B0<{#8+hX}%?!{7z!<>9t zpH7JUgl9nMv3Ve%hH8wCb_&QEz1_0=@VJram!{^WDV%+JI5N6Em8mJ4%jd_P<#o4Y zjZ;%x7cR$sbz^4L9H^1mySe%tET@*`Ho~%;Z1N4IbLNT~ZNZ1rRAI_8XrJ=r z(@t2yGX%rd65;vi%DJz&v1Ab2Gv7z$p=W8&{E%eiOzPc^73a~4oBe7t4ji16C#XVK z@hP{5Il%POy0jNou_2>Qb{B#PN(Rz1d@fC|T3TjIO`lwgx38E1fcuw@S_4IumzLJy zI0V`ic0IQZ9}}(0$|y>UUd@`+q^~#Tystzrc4_#XWr~+u6vM?Cw$n@Pc3q;iZW|Q* zZttyNc=sGfw6N)L)3k}dzkjgUBR>(9=A0YWw-3OA*&n#~T)Cmh0uU$DI<$ws1oMb!hr0Pq~@bdEbeW^GO&+%SNG`RM(Fqennc;vJAJrFDO z5?(Y43eZ9sj;?;Ms&3c3pH4TL=wu+3Y#v8jWYT|I>}cs)Ut5Ml2RFSW@5wsBp!AGc z(M!Q@#Osv2_A^);ZM#B}&gp%@yU?S+{H3KOKG$#8OO$UCPF)`qMx5!gXS=w;LB5QK z&RvedK5h-xk!l)E&JaGxJ2&kz!hbXT7EFS?VTyg-<|btArh8{D;eA!ZlY^gLKi7N# z6d{^!#qr{#HmuYG%N*A0;muPPv}{BTwUzp$pY_ezq~hX^%yOrR#jp-HR0qG`6eqX$ zm51FMdo+}E-7W%C(i%_1Za6uuY8e#TKQg~!rVGDX^mcG!)eG7d%KZeg`?J)Gf(jK? zB{>tX{>NwxwC@6=p&j#naHQL2<{#kCr4-rXa3;qsmRq|V6`0B}|ID!`1b@(VK-Czf zO3bce&Dd81{Z@(DosZuPcwcl{U5sJBWGr%*kqPfrS5&cWCf^wf>ba^KhOPkwnP5op zts3QSVAe(Fjq`lAyK{m+WcP+9wl==)_HfEgJEN(bcxjq2A+U# zYcpb{HxPJ5Y)w1V306J-e@b^=xLAl)AdBt9MCc z*V$syeSj|_OwtJREhp>X7c>L*$HFbM{Y+HH2eJ$#d5q&ETr950mDgW9q45#!S=5+k zXyo_q0H|*$t8%?592V6A-UG}@CkfKMex$m-POf;|otCcV{JEtiBvPDIVi!_m9y88~Z zTz53oDkXL0*?^Qz^#48Z!M{bgI37>%zKyk552a+K;dj9RVSp!FO(5#%T7bdXOh@jf z=PJBepWtWfzg!Kx#|C|KL8@ai8LEq^Ha2V_NVOHtt~9B6L*5xf%8Va)pLLgXU-Ecu z-g3w6vQtumem$K;?Xw)30|D8dYN$U}kz>ua0U5nN%QC9l*k<=c$1X|Jt|y42i_=i) zOKVbXZOEpar`6>Wu`@4)#*-AW7ArZFtuz8Fc=$}irL0MTCx_jSnzU7MfRA7r0H z3RKC_1ULziOU{d(K)DyCre2`$550AK_-{%WsOIr*U*O+Ye?w<(P*tT=!oFz?Z0lCx z)s?HZEU$g5yt1y`ct+rOlI%(ngG_$GI~&glp2N49 z{>+P+3jooouRTFdSyzlHMX+3EaPTS19{)>6j|1){fe-DpJPcq^T=L^17@zgZQIhV=pK-Tg3kNeRyDdAqoa83YO!qC$V zBcA#IAZKMABh#)hH2ElU59N7FVYXS-)AZE`ZvIQ@LXjKpV_Y z0Ko~{rvTey%TRBxPm z#%qqhmGnw}uDoIu<=HQmBikZ*`YS^I=tu7RejV!*4cC^4x!>m)*2$)8pdM1j3xl z?#n5Q+s3(xF)DJzG|(gXry9Hm3H>|1Up-_}tt+xyMn^og3;g{MB-Kf1v1uR?f^F!0 zw6t_I5``EDSllOr8s5f008klF-r#8H;IUCDU?L^sdU7nL?dg{%%HlH3i>;C`^7(yC z%SII@8`=wbs}b`^85lG>DR2k}>pn_3=^ifImfT}De%m6Na=)!W#4^adzrtxYKWO8A zwAN{>X-olI=P6P=>yMZ&0ll>QL9lo3L4l6v#~%W^hIR7abBr?+qnwv|6+$Op;c?msGh#k7vceZ!!5Bru|aHK1=UXkeLF_G z&R|u&v9LAv0z6YQg0}wZR@=~)W>LBtX0Vd;BI9SL1mly2Gl2-DFpXZFy;EtH#h04#fN!2Nt;o57Ux^AfZL@6mvEg_tn zRD+u1bi-EjmnEsbyWx4vtZqPO^QjDHgW+^TE;o%cvm(yAAN-@KmwgRqPT-~%RF^Kt zEOs2J63@_&EKXP$h%p*pf{6@c2COh2rq~=Ik;kn5$?@ z&;i6dtbriyZI#!N3`PxMVNoiZ(gUL0;T*Fh|BtQhAI^;5A1iKesZGXFEVFqkIX+cP z@w13)&$~7j2Z6X@9*Ug7z#$;}KS&Gl8PUw19TEww4_}suz>PD1vY)fi0 zZE7?BSLi;WjF^uH55S)@<5Muv1?8S|>IC2Vx+lCF7R9SbuHhkNGjW+-E0A2$r!TzQ zm&WNt^4_j0t$-S1o~vj`C^hEcKgf%iwte9>jjDT=o0c=Bw^KLlP`cFOaX5MX+#gD9mVYf&cSV(-n+Hg&~hX4HZ&-y%P1C}Pv>b-}tX*YhP z_@*t~5sZlPp3<@o=^~jGkRF1Q26CT70&Q#zGI#pR=RxeyYb5<6-Bl5uhODDojik&V zm~e@Vt=;p6SGJZ(S0r=wjAfo0v(eC|$^v{^zCqL=ARSG1LhaP~d;`=jYU7FRa94>A z2%Rh_FLO^P#SGPkb&L8Ihc!zCF(|Z4&Ub`j1%vma#<1<_UuJeWXYHOFii5X9A}*a! zx4Or*3la_&3cijV*o>M7(~+>l4a{dDr{_%Z5+hezuvwVY?YOjl7FH(ZWIuI~_KYX2 zF1uG=Tp#~7sS;{VfXAxFRb#TdA>}g~4KGAreml58dF{fa5%7R zQsCMr=eN1_{SNJduWf#6%-dX;rOn8sEV!uA@ptiW4{(2xEHm`A z$ghv8s1|K(bb@VRiao4T#X$B|-V??_($aICkiO22=xEN`!HE0tJA2%H9u~u7c}hIO z0NV~IP9ez>FhT!R5XNb(BfP$R$fnzN$`H^T9j@JW4LUgFyyLzstbh|GXL)x{209R} zJ4;XqfY(IVtD`~?jS4?WR?F_s%4g5p*mtnNnJ1V$ozpW&XY`dRP${%f5|r3&^04yQ z3RfWs;;c8uaS$G_e7+p4Fvkdy8PG4>Mw+fPsNWc(km*D>#WtLYTIGV z`pxL6Ljvet(P)@}#lelN<=)n4L}63E|;U z<^wm|qEJ9AXU}_VPbqG#!^0E6%5(eRoqKC>?m6_`jj)r!h zieI+Be$RbvA+_g`)il~XoLbbddA<_t0*4IG&K)!^E2I?*!sKk9OwWdA*;W%T+d@zo zSha+P6gJUk1x(U}vKZ(^f62VLYN;~r*w*HlR~#d1dPCp<9fzWEep-vGW48 zuN9dPz)J5B9C)~9Y&Tre*70@lt{qqpx+HS*=9~Vv77X|Fcip%@ZIt&L&W0s*GDD_nW21P*bi0j$VtbQ)NUek|==%jit?(|L)rEP1ldANx7%HKc;gh6P~@O z2Q9ztE0_Z4yw6OoK)NAuovfrf0ASBUl3Lx`+X?@&DWPlMMF|2=Xo=UxMzahSW-m&f#u*$!!U{| zI#L8g1VnNYuIeC#yV2IxG`epmm~~2n-P=u`Go_Ugh=@tF4sA1hxNVviD+)0Ulw^?_1Q$W37!MbrTwH8gd3E={ETzFO@4d~`Sd zCD`j@%z0m8)X%AVcQi!RRF?}*L+_ORfcoIwq7e@uBEj(fe9qQg{Wz5lPmQJbBUPD7 zQ4;xlHzfQxof2y+vc0ES-;)IUQLH_%X>n{&G}LL5hd2E46WSFf@6uoh)1^K>*$Ort zx9MigF{_i$_%3tdj(%wQl%zkg^&Fh_X)UX+uj}}^_W9_1%}mXDQBd1XlO=KFP`P3Z z;Q^0B&9z}ag|k5wfYYjU1iWlCKyWp{rm8G|ZItpjkk}`pk2)q>udLqBb&(;w7|)sj z!)W5eGqF8y!R}w*eUu1eHsXm`LtQay_Y;rOR>~Ek8HyHS2Lm|(PF3X8)lMi2)9HdEM3-xQ3zIOR9)g`B2HcX(0a;I1yBUk za`;8_-gTK87y5IOX!naI#SEzFP8x$2<-^&rs@emheJu|Rqx#2tx~pVbH2r*o;{9wL zkzQWkDRz-=k=>7oTFUU~D39AOIBv(oIP1tr_2I2ftrbm^{J6Isw$H7y*z_UCh1DUK^UO_ z1Yikq0k5kZph1)MufKBM9%-QWR-8|tdo1wCVtBCB#>b|MpYGjKC$Z=s3FpcHsOSGJ zoC{D9|E!z~Nc;Su(%U)yKYxXHqkZUl7uTH2m-dZwKL}VHH$!Z-z#HBFEY_)xq-jU!YV&cnV3a>-wg_2N~ZghnBlK(n9c*Ad30sZ+ZLs&HGqR^*S@0AB@ zJw{i|#(v(BCQHHUQ^+JRAhlZ!AU}cr9ijw!f5k&lC*ao3zi2K1c8iPv4#B3PK&vP4 z0`v}0MK0JB|3#z23(#6*&8VvS|Ltqs?3AYz4Wn+1LbwaIFN_q^Qp_^H0*AWaE)4b@ z)+b-HAEL(mK#=(W^<5BFY#y<4I|k_A#rso~8`kaiM*|{c)Grz;15o@+GXL*hg3}O~ z5+(bPR_}G(+s*SVAoa>@LMu6d6osioo+iCE9d{jR;M%E~j~Lika^Io9M(D5M!lm-L z6=D%r+{?3{ha_gpB0pIDq7nQ>b8(8zMfzP0 zwexPIHpC%Nw*HcdJw-1o_ZL}cDHw0~a5}e#%JjrJzmio0108fL_HX+{`Jb0w3iT`t zBQ?qfMm`2hBUt}tJW>2B>Ii5T^T#>_6ije;h}B%MUdb$le^Ck-d!#6h-4w|mr@1hS*|s`WOTkO9u#DpfT6A>vlf&pv*>d=ff&WC0r}ivg{d zF7L#5#^b@{I211>QVwW0VPwr4qp~YR$Fme7B`avn&Ty*)yJq-#&d_i*On$TMdRbyw zWFMYLr(75v#c%my^j18Wv6h^i1+=@FMGl(&rji@*XO!i?)e8soH)uyom8HM6&sci* z*Jp$i;=Q6f$HoxrBQOfj_#*feY|Im}-9^stu>LzAAh@w9Kh=LKQo`WBXi5wyYG;Ag z7|O~3PXuTNCo*-*e%9`8w~xZ2!P%3R?TPGH{kZi^PZ_h(m8+Mpe?+(|a(eJM(vOif z!rX#FCoer%!`j&-mcP~Ij6AtGa4%x<*4cFJiIbtH#EG{1cQkz%X8 zM3Yk}W!bQW^JE(TEuSl-$cD7}hrln5?B(7q!Dbf(3PWp(gFGP4QM8%#<1WrOR#l z^7VaMwI!>9n#oF*Y)XKl%D&OtoS7G+Kh71kmS3YRz; zzVhQ;w6F}&PQP+OBK73WlJqv2i+&#R-)iE!@J+E*?GBg@#Xfb3w%0=#?4>?i zX}r*kxn;m~Y?(IYn!aksopa4iye;S7)FqnPO3l zsTGVZ3`)JnkP;*OmAYr&-{UtBON`KD^We|qYD=wnlWzEtCP*sg?R>+J0PgH!uN<}5 zy_E(SD|*_~N|}d!24z&&y~tPT{aDhJkL^*gICuGVhmYrK%=*JMfNIz*H~A_~*hpBZ zk54Sb&sJY7HLWN*MChsMxWyy-6?*u2e8J{*ymi0rn26{|16qo>8evzxz%eaRGedh< z;@0ap%vG@uVodqxQrdqyHyi7IA?idFwXg~XA9RCQ9$OLU5`oT%(_&c3ASR^5a}Eym z@5*iWIHPFiIf7|ZwDF)#VSECXrAahK8&s86ev>|8Zj0VK=OGjJQrfjT=hT)NeK9s> z_Jh2v`913}k;T7JbfJqQKlnvsUJ65ic8vDHtN=TL&g2&j+yJy^JDCan`=4Rk6@i+p zs3!2;$DqB~g15_v9X;0q98kX~RdxiT1uErB@-zlPhOL8%t3V6U&yLlOxAAByXdiI| z6fM5Hz^(pDM)$Ar=l}Tstbc=g@;@9dgx?kuc)ME-+o<20gRMRd)~dbOV7z`Xel6l| z?Uj%GpG6v$a;hg%sp2U;tsCjnXiu2iB-xP5bHqDhMs#CV$>a?={=|^dy>gl5t)Uzf zut{AVp>LwJ(qVdy2POOVZH`MI_WYKrV2jZzu`4lYNmO~+iTlwIKj^%e?Ff}4IGML& ztidF(f8BC?tF#mGYOhCX^)1aq3m@wPUp*cPKGCy@fUZZKi1?S?pZDJH8?1)jjW%WRK%j50Xe714t5BY;fP}}S@;$7_~dPUR= z6+uHj%35yOyXDdl#Uz;90%0yu#XAt_w3ee@bHDw0-nk{Mgg~Z5&`8Ir5v@X*VD)0m zcJz&Gszce2y>&amO?Ryt);Y&nEFj< zLQxa5m$m~TFP)SC5YAN%4T}VO)LKmor&Y%|s&it|fwe?-R}tGQpxcEeI-D<2<9VjO9<#ucnB+R<7Rh z*V0QOu8QR@bxwT!+)$d84>yME!ifXe8Xm!4r6oHk?!cR zWXY=)9=CerKkpuoqv!XHm^LLO=lX5pWwFdLPs7iU)kdn0PuY3hTA!nD;k}UV!a>g@ zBVaPjb>lSCYscw&cBwAb&}M;O ztFbA&OWP{FyyHd(F9~=REzyCQXxdKo=OF^;+Q4MBAV5aH1L+W^1qjDIBXlO=A-$rU z%dN?4CSiTN0&Y=ROXnsSjpe_vqn!#LB?#rVJgiMza1lB|i0nhNs3KU_nn2upu-FNK zJn|*Y&P?xzn|&Az6WOiOiwx@N0L`c0WI= z*5^Ez=?}<=wy0G}51@5PB;+jZIdEbRVjH|Ux|cC#QBc8?4ZTWhsH&pDqp!(IjMeoQ zj}O=FSWDu4caz`F7YnqvO_i>5r6ar@rq|(x+!BjsuVfw6R;8w!o^V>N7XKI`#Q>UX zK?MS;@R)-FwrVQBN9djE`kcpgHu@LF9D^h4Q&f)3@9<^z<5?~oyVo1kI?#)b1v7^q za|j;jYtqz@g zWIs=5SSn<*e&DvC?n9TMbe(HegJ8kBY;oz+Fb3ox1>occc2t+m`)qDn?{x}aS`BkN zTwlA6ouHKHum$U}#^+2X$&-z;OlVstBITc7xbptnVB&iuACr;tv($3R2HT}ZbTS!C zxZMX9cr1F1tV)n^7cgzW1UH1d&HBdpHcH?weU@s#%!tzSD{b9R4d-`l=49SeN;?&T ztW=;GJG?nFQ?57QwIHJhu02kTy_$%%uV3*PTm33tJh zIUw2T9OB4?c398t@L`>^goC(F=FfyvbK~0b3$uoBsZ6HqCi)No?F&D3vsAC9fAMd> z&`-3WDKI1*;ZjaR1ql7+*s1D$IA^eyV|EYmK<^BfwG!_QLkXMi6LktRC*>-R{fzS@ z!cGQD_a5pGq{KR^j6Eb*3)(l16u)oTb%tnEzp;Gr&`L>ag74?J|Fr5t**sl>w%I%) zevWS(n_}ET5RI=Qv$91(sWZh?WmVV{$ zn~5y+7D{C!;WDIw?r>&GS-UV6%sV^aT3QzEV~Lc5h%w84E8i(Os*X7u%KhY3f)8eEd2au#lM0r4L8fNpAhsZ*>DO zv!JUjwJrI2QCV6s9)XH4zP2x@FIqmEiC;M~_naQuTJV~D0w$-l8dB;o!k_jH?f{4>uv6_2k3NEcDdtqiEbtz2E;Y{zxZ|>6BlhiX6$!rAOfzV zO|~Eaj#)*1+{zmRkjsoK&!wrXd&MoVe?QXcCV2;qvB8enSxci}tjx zQ(3MLlK>VRmz#TK$%?2T^>lD#?_tn0ZCP&|h}r8f@vtLK;JKBu4bne}FetS+c8>=FK$UaVtw+^c})7mXV_u64UttMWb;#M=jZhpv*-e(BnB?Sowcsff5LY; zqfx}{s6fYCahW`4CuqB$4o2=Q0+@`3-I<_Xv!rm@(RO+KP*09ehcku(?$2@PAeLd} zuZr(fVQs`igw3-D(aOp+r)k*hz2*4tlROA+y`gG-9m<%Aa@LM@a{s>nD^Oe z!34od7Y_!5_jO6h@2<>zF%(N`zBhzbj24k5NIwhbgzDl=^X^x#<@0^t81WXhpkDx^ z>`}e^$FdLZPv*77ie8%cd!y!$U%o*~svxbQ9VV!vfFiZ#$)xtDT^y)6Pit!qS+VoJ zK9!4N%t!_UT4+~oM+0}Ir9(*Bs&@#?*sf-Yw?lopKAege9hr0E#K`O81_lzm?FKq| z2rnF&zmIH%IWTm|ooQ8L^!c%?AiOiwj4_*A4rHTI^9R+-iSnw#ruwI?NY8vlV%~Y| zmS}#}Ta4C|5Z+dv0H2BkK$2S)b%%Tq5^=-r?KQ&fhoM1@uy>@+51=;c(92 zLBS_hs42;?AM)WN-Z=S;mrJLUmSk$(H0-y8o;jFBOo9oJ=hZQNAO_o2+e8lUOB`QM z6|?V*$$Y75OAA_j-y*3`n>%?If~jWcW_QJP(Z0UV zCXlyTd!tlVT=kdt@XV{5UXIjOAlJA${RbOrY8ik;a@{5dv`>)bv7gz?-XpwOjg1-o ziCRNpQy({sY!}HBKqOcfQt4bx^<<<1 zroGYPsan>;@n*qE6mX9zcn_Mh{TODMM#1wGP#&D9>0~zpxqw1 z>tBz`Gqs{jWFQtxG`uSDv*(2jcL)qR6&Lu6OcY@(pE+$3-44tM3Z4ee2Nj>x0vMFIxQ~vp3 zRMh8N5=~iC&@bZ7XIvORWEawn9lzMA3RNMDqZ8^C6G8O(vt;u(*N7P&2asCfYo8B9 zWqn<*d~Cz_U1d&P`_wWIeSofq3^2=wi<-=npeKsKTn^ydEo0&xLCYJ?@7H1gO$wImLrt(SzM02ulm?)ssYlu@{sLuN*^o=%t^kFNut9}KHpEF z3obM3h+a1IHd1Q>*T)Eo8%OOdxVW8&NivTWTIOCYU?YnYjJsQdo-1^o{?c@5j_di| z8B+MteWB2#q9VOlfij&=G6n5D8O?r|nqHEMZ;+-4+jjW=Y;4NOtMhqu*T(OUD{L)~ zIk&ZB7UG7U_Ht+Y)xlWQ?q&0Jtyox8Y&NML*?HgI8;8_HGpi3<&+5&!txQ%nneY>5 z0WO2U@5+@xpn6Tw%cPQl_Fl5%P|z{G!P;og69rA611iYKA5MPfsKMIKcXMt`#<;-XXoxj zjc)FI$op`yKWH+BigXmA&NNO6Zi?tgszrGTk^N1S#w!DZvPd&Gd$#?xbBJ`YoXBEjFiN8D)Q=9k8?iaTYd zTdV<)4DF@(J;wYeWX$JNxN8-MP_*|Rhi6~#0(>NG4g+>)VcfA@FaXZM|qP~!hj z&(8l%%lyN8>zI(fQj3j#(S*YmGS@mq0bgQy{fovi6}Hk)qeYCu9}tBbqtWiW~A5D}2&Y7Vyki1xturvQt-(>tnibEht8_&l)a|6%qp`|msV`X9};LBC}c1LkKz zM~Yy=$&^=1Kfz8viJRY6rdnMN4=0QMr(_;jy!!7oMedKAr$3&4PqTfL4UY&Hh3XL$ zdtPoAjXYlQ(LK6>B*rdiLEn6Ic2;y4(0~uO%I>nL;SYH8mV)i4k0l3t);mk&L}VN^ z%^9H_9v4Gk70eQjc zfI~a^rg`EP!|_LN(#>vTnZ+H)r%l`I$Imu)jwn#4-NdKsKZLwJFLqzz!Tk<_^LYkL zRcfv_Y|Ozh0!uT38h;)rdcOohzgs!A<ji%Fa5?>77sU)HJvU^Se2RwKRLQ=K;*SJxv~Uu6>y6 z(YfS{7k?yhoqNOcK+Erop;QY*@GExvwB33EhYGXa=bGyJq$aDT#&i=Vf=$S1H&(#^p&CbsO+g^k-up`GDF7}}Jq*H*_!{oR{G=4-!8^}q^r%(=o zy(<~0dozpUkcY>A{Gvevk({&$^n5=L4Fsh2weV^Ko$Pp>(lW+fEbm=a#)5_r(Wxwm zQg_{pos!+FI`^kr)Dw4+%)tSD-+UvmGTA;u2N%)5Xil*155=_DBR*hU0QOQa5jY2% zf~f-f0|k30Km4LW+y;&WgCI-^G~^e}6+6+ReGovwhS#_E4%T3@7WG0Y=YtBJo<+|q z>4ltF)hA!CQ2=NH@nux{6o93x2wWSnV#fMMRsSa^7D@6D6@h){8K6>tU3=ghpt_Sr zSf(6%2-_Y5_I@)6}&E{?K=d_1RXoc2udc8>)cARUbL{4#=?R<8Etz@5>Oc@U~d?J;9)vvAO+EZuBo$`~_q~7d~y$ zdu`?y&5-x{;{L$gH%)?-`H1CR@p~&Dxm`7AMV_;d0lvbvo`6^>0{rB!T`T54T#MjF zR!K<#tuO*k7Y;Zd?ggyJfV4|}+6X#WgHbiW4|K!aw2|ISg#R4Qw~iK?g>cnfQJ|j# z>O{ZJaZ+9pR2DD&^mTtuV?*iZinBG9B6%OqhHy_Fyl;IZE-l&b|5SM#)~khGFQtC4 zoTTOs)WMKbz;xDVUv^X62)+v&9hg;I+!|2_{P-WcMXT8{>IiD7kRXM`==Y(IfuW$u zhS+>>;ga?g^SX|m7j18v_?a%?e}O}#CWe5(9}kzap1QT z(jgS5zZfN3KM?%za2C9BLdePZ7UG_*&igx@PD; zZEI;qT})HN${S@Fon=Apx|F`$SYx^n9enyvb@KJ(zMV8LT+=A}* z1MGGmm=(&0S6xnNH#<50HR(m_jqg)(kVl)oGQDk9hT^v)ra%|wMH*OpIu+~)Tt~1| zAo44(#Na0@weEj30smtHwEoEi5Ca-|tshDDGVx2?`WV4V>(=Pelzr<5$|UTOFBf}# za_~`wQs}%nh=tTj-{Q+Pj#&Ky`+4ztVsmKV;%5w;q76h=Lcwp-`n&tzAWM-dF~~%n z6Yl|x(5D)2In`5n7J?W7d+DjAV7t%(iFlNo_i3 z{$kwp=Fu3(DQ(an_^Ji7gx`Z`@$c@o4@ySVpGw0&5EeJ88}T8V0s3V|-&b0NV-BaY z>`w(ff-m+n(ww$>ARYDb0hk{_Deshnsqrh0RC~Y^) zHY3nk#fQpTN4PU$1CYD(OLBUx+f3>ky)y6EbO;!=)cV1YPbUQF$szPb^u0ty@4PNEku^)`S`vQUR6lX6$ZVY;JS#KMF^!=tCsr z?$it!*nM<9@sAglt0K9bkFgM<2g5)6?Cscrvwjdjj;iJ=sj~w;LwJ_Sv6`Vn11LA6*qoW^R*es;!-KFPq?&4BpX>MuEX15##qBop^ zSdi|w*G`8>Mo={V$ z%VoW~-1GmEngj#M1nAoP*BnnrFMQG3Y&d_gxveFwJ5em6NBlr`+wmE32=a4Nl(Glv ze<}|UJppOj^!r%k(FrhYC94L#nT6g(fsR&SNx;dkFRU_<=^&V5X^q zCTtbJgwVkIHp8&I5uGx@2{;%akXGu2Dh`ex3x;)P3p{uwzh7^4=*1h?`|iqZ`Q8gg zL;Xr28tRlMg#5U7r0i}@WX$8d8!HDnrAd9cYU{kY6L3u~j;b)+%;(%^Eg{?X16}Co zP)OHy^r3W5hXSl&prm_9ayVsBjdO5QqV~niQP8K}sF`WKQ>HQ+8o6-P&~n>OEr8Q( zdR0_Dn5}RC%*AwT>2eU9(i$E*4ZWJ(i(u_MMuxrmJVxfkO5h7(XOUlp)Z*o(vYfk^ zhATjqnZ`O<0GjIC@Ud)=XoFo;Lbv0ENmV3mNm93jfNs0g#J%46s-5Z7Q>PdZ(yDt6 zKz1p+Y;Fa?-7c4Z)_u<`&N|IAi}>Kvg%MRQn8uRc?m(`{t&+Fm-S6xV%C(J;BvydE zeq*sD9Eo2Sb=6ev@jvzcA-RXxkhYKmsrxxZtv8n0+zr1qYpOAF$F173W4XG`|J^QS zBC~CGHlWkDjH@GauK~U&;>L=|Q3K*Zs|xgfg;(bVJaQv51XnFtvl)<*B%+-kR#qno z;rK>a>b;N_`6~R|wcWu%{p(gPcqU+gqLE~iqs!#8q)3c#nBlm5wngjM_0L}KJgTlV z8$Tn)y$7E-!!6$Bq<77EPpc0^qsD|f^9TxS=ckQmn9-O0tV!6V zS5tN&&!?NFE<{0sTqWHoKLDaas8)3z<>s3Ix6HXsqxJfdY468tRR{JRkF~{d@SdYj z;o79gel#G41+>_4dj_xazBerKeM>5{J}Q~pF6u~v<3`Wp*RTDR-bp`_jGN}E#%;5Z zKt#!Lg-+UFxNTcqhGl|L^zt3olv~4ATQ=?Mx18_%;JBp4$1}a;DjGE~s-r|=CMZEf z*5))xw+Xk+@y{mHFTV4bw7TfU^BQ-naB~FH-SzSFF~b>CKE*)=pu}y9x5~!*JCLqp z1=nYNwQmO~lvb_PrU{Q7CiV$#UQEezK1V1%n}-u$n$5@$^&AVa9W~K9`dojgRe6L0 z^{&1EHiTVtQ=7~F_}yvU07TlZ^nmD8BnJHv9gv zDaEDb_Qh#;2Nu1PUKA_8=SG-(2E9y}Ccej;7T{uiKy`{#Av@2eMz$fz=4O!lt6q-! zhqb4Bllh)r9c1wuMsCF55bRT{A}pjrf|msW^sL^aIQ=pplU23YYz*7KXzx%3mjkj@ z+f1<5TbLLC80RNVS}!Ae#8|RR#zar|l$TV$M_GOuiMxTlT2C__7~=LeD6l%S1ulPQ z+R|PySwG15;`Y`ud4UJAfe?ITIKQYjQU_m@UL>*3UvJ+%6Iv-9I2F<51 zye)X=kuUm0Z}nkO+t_BY(#=4l8W-J@+zCFYM}6;Q;}ZG+2#fBKD%2fc5V0>f6b!wL z8%kmIP!sW2?aO?zdsefba;vt|ugxHYzn^ajp+}a+KMw}uc!6e_FfYMk+&PsMoh~9o zaid_0aJp_eBxwoK@B87>-g5P$)}W0x%m99%7eInn-p;TZ?UeAEv|Y%zJU(GZ_o_Fo z>Y?MUZKimB`*%!w49;TnW3zk%M~&g$rV2A0|vblG#KHN=ub18Q)llq~9bNBxpu$Up&q zK$2J2q1><`Po|esPQce*0Kc?`ZSG8dkaOci^o&jZn@Sq}W-n2?$vdRwH&74i#6@9N zy_OMBT{yDYWVt?RDTI1&x(PPBGp)WRTRJqC(3zdFXUeQ78C04z{j&6^MYr0UduSchvG5Ispc8t7yaIRbYY@*(jxShQA zRB*}f2Uvx~d89*DBUKWNvC9eVFfZSV&J^5NBSuD0{a1)LQ-r^)NvxyN)_`Z~fDdnK zSa^YTA~0*$ba*@+)y7U$1(=a;w(AGLH!h*wjucU*(A=NtA+KSG=g0$HT@61&zg3q_ zs`R#1C7o`^(>aaeyT}asO+KvoopuF8j#1?RNsz^@8DvA>>6~6Ik zgaoNvSPitYyXnQzO-TKbEwtd`)4$~8ugx1)xe5aqob>pLBa7wY3HW{i z3l#}sP<%{**y6vzF_jL+*2DED5@xM8vToJi+WGt$cgGv;2-{WBDuI>?d7;~0O{hM8RmJYC#L;P1J~`zd z-xh1>+4?m@0$KvZj9&k_u7#+6#Tp8DnH?tAX|7N3TS7z|0G0?NxDQ8om+wQ`(BlHl z9VfK|rKIGwcIZcN!F((L{rFqloD171Nz}=n#?p-L81SS#-mJY>>>+~|Ms}a9j_}%Z z$3d&H;=r?8!ly-s5wAlGCdUf+L^;&`-7iFH)7JAfX^P~%Aq>ebzmLc_kawI-w*Hga zmt<>5hEi9y$O^O~CiY5FssMwfjWbu5%w3VaEN_#Ag402^0r1Zm9t&eHoX-tuNF8+& zinDJnJdWovJc>F5Y(^YS$n)$Sn|;X+8cz?H59}<((X*WMxyb8rY6X4(rbVfP$(r^L zlMH0T`UXXZ(p=I5zrwbA9QT4nCJ2S-mvIQ?2GmOq_}$6BMT}48#`?WGcD6 zHte+<^<^X&>E}FjPwo8!v&p#b?5x?9(5L}igxR@%rp(a?`0m#jzRt1Uu046`NmzLS zDChTgSF3K4&k8xQhQYKWDH_8u14(Obw>)0`AyP?|wl$-@4Ohu-hMP}{&>OE5vyP3l zV1`SW#BZ0ve8QT53G;vh%J#4(9Q{#&w)t+L|JI`~^t9WsL!|VO#;~S7C*v5xpQ>@C z(YeWjG+~f@^ch|~lM__~1z*5Ly?(WOdX3k*Pv?yfx*yGcTYOb5J~vmjH@EeY|B`7x zw1)CG!Up$ou#ni)Mxxq^9fTu;E#2`c^7*o8C- zpFRduO2w#(wsNI!?m%JoVO{C-MMFkG;_w+pe{#^q$m8nHPnDHj2~Sp??K2=QX%XO} zd%*>6;!sgBZm?C>ukFbSsH)IFMFxB$x{ug z1@&VIHUig9t)lnGSV}dfNHxFt$+)btp{(gMP@d|LxDgSVh{|W>cOULKu5W9R zgl(iNvEcQaR+C&+_~!oa9c*5D78I3*n&fxpS7v;@efqRZ>8a9C%y6my;Zm?GTw45^4vP{+u%9VQp8nb{akYuJFX}j~BHI z%0Q@5`51FKs6y4MK`1z#`ILz9qni-9RZP>yrQ_a43n7VNJ;MRQ*1}N_A*EJFW_bfg z44KxBa%S)TFg^>5sSTFbXKiZOW7WJ6plnIgDJKc|_wDWmKpaP#F{ame?4bF~)49oK z0#h0pz%idGXl;t6Mfzc;mTWo!0fVOKUOoZ--2Lz|U5Md){Kz=Dx~@`^-PwH4t?6=% zt2jGGinSO!mpX-^h`o!%M$^<7Gsq(mkF|)+VB@1|xt`4|vl~etZx03Q-P3M3+~w>c zX>dGg+}q9xYXoR6YboCSvhIBQG7Hj}%2pk%ZU=IQm|M>w_l#^%gO#sUOx7fUtUyxV znB=TA1o$9N!8h!n2*a<2)hrH0UA}xW7s)kL+{!fE>TaCt%4y)wRE$mEwR_}Mln{#} zv(td@D+--5YW2y}tvL9Lrj9yOCw*e#{?Zqp$CGF$>_S<8R5;KMP6dw}M3SluP=j!j z+G(8<0}L1+BP=($Sdm+G?P&SC8nePYpitdXD-F5~LCjf;;6S~qZa-4Q9vElN;p(AV zJ}BF;IKF#TW=`w{Rl;Y|Eqz;qSzaxaL^TIZOGk@?`NS$y=9BItr9(X+ClM1+<>H7nwpk_J%H*9{VMSHof)JR9C%OW;i z;tTZ|1RNRaWH%S$_T@agLpLXL*`C{t z-o~_#^Cv(7c9AS$kBBH8sco*0*KGhA_W2cz=p7Ud0sV^0UREn>w_F+jZM%2F;IsOr zBNlp&LZ)x>Z4GbJo62hf*L|Z!7Dy77)$ob7Pp1^?F|mu3XoAc+Ge;G*rTyDO7}3Su z*H6I->cOd+tJUe(`!&}iCXQRhZ9Syqyz0p8>O5Z|-ff;3M76&k(-rUTV9%9ImP~$n z9G^qprw=rO|GUaT?w1Ise#+)d9srsm;8V2aa2~+f=q~{Xf!~Fn>(d925}EJFF3Xb! zm{8G<C~_o;A07lEkxuoAkK7oGgFS( z+PZ8Bz)jJ>iz|GxE^7v;WZxC6fCl$H%_03hDY6$EuYfEp7UUe3RjEG&l+=O3Id`O0Rg25(u;ry5*uAaKtVu=3esYTNSBZ(MLI|q5TXA&|ED&+a=jyYK9N^L{&fUGwhFfhQdDJg3~}ocrAEcOJ$hV;*qS z+}O+*z`_Cmm@Hc*FW{`9mN6c#weyoWJP_^@sX-LLZ;fQdI|>zhY*| z_D5~Z^ryVspRz|sB@(8R0hMg4&kn!ZAYXwqz5)ce4t-!{_DULXNPvY^fQ8WkkYaX> zo#jvIPsNxYEQeUx*f}`44s-J`AE-GBIK;xrdWemco&AqySi+e10c-;7$4+Zp<~VMB zpHtdbQ1f}pTP~R^6|F)xLj+l^2T#Hea|?@{5EYX5)@tn4f?s>fnSFafvo0yuJ z+upiuXMe}R(bestyN9Qjx1WDNU{G+#(}>8Z7tt}Xaj9wP8JStHvU3Uwi;CZsyf6Jw zSyf$ATlb~Dp{>26v#a}CPw()^=-Bwg

HBxA=2udF9vY8gYAP_cv*eynpZqUCi

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%0A``b= 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 diff --git a/docs/tvOS-step-4.jpg b/docs/tvOS-step-4.jpg deleted file mode 100644 index c5661e433417130ef93feb6ff8bb819256bd4c43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64315 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